Created
December 1, 2019 12:58
-
-
Save tevdoradze/9c7e940381aefb7c00b2ab82dd0307a2 to your computer and use it in GitHub Desktop.
transfer_learning.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.7.4" | |
}, | |
"colab": { | |
"name": "transfer_learning.ipynb", | |
"provenance": [], | |
"include_colab_link": true | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/tevdoradze/9c7e940381aefb7c00b2ab82dd0307a2/transfer_learning.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "5hs3kQjoifbW", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"from numpy.random import seed\n", | |
"seed(1)\n", | |
"import pandas as pd\n", | |
"import numpy as np\n", | |
"from matplotlib import pyplot as plt\n", | |
"import matplotlib" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "AtF2Dor2ifbl", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"import tensorflow as tf\n", | |
"tf.random.set_seed(1)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "DDd_9XZ6ifbw", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"from tensorflow.compat.v1.keras.backend import get_session, set_session, clear_session\n", | |
"config = tf.compat.v1.ConfigProto()\n", | |
"config.gpu_options.per_process_gpu_memory_fraction = 0.7\n", | |
"config.gpu_options.allow_growth = False\n", | |
"session = tf.compat.v1.Session(config=config)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_o3xqLhDifb6", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"import cv2\n", | |
"import os\n", | |
"import imageio\n", | |
"from tensorflow.keras.utils import to_categorical" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "qgge3w61ifcC", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"TRAIN_IMGS = './train/'\n", | |
"TEST_IMGS = './test/'" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "AnurSHt0ifcL", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"# Preprocessing" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_ddoglOLifcO", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"PATH_TO_TRAIN = 'train.csv'\n", | |
"PATH_TO_TEST = 'test.csv'" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true, | |
"jupyter": { | |
"outputs_hidden": true | |
}, | |
"id": "CUjJ4v3HifcV", | |
"colab_type": "code", | |
"colab": {}, | |
"outputId": "893bcd4c-ffd3-40db-8acd-66181f1fbf98" | |
}, | |
"source": [ | |
"train = pd.read_csv(filepath_or_buffer=PATH_TO_TRAIN)\n", | |
"test = pd.read_csv(filepath_or_buffer=PATH_TO_TEST)\n", | |
"y_train = train['label']\n", | |
"X_train = train.drop(labels=['label'], axis=1)\n", | |
"\n", | |
"#Normalization\n", | |
"X_train = X_train/255.0\n", | |
"X_train = X_train.to_numpy().reshape(-1, 28, 28)\n", | |
"print(X_train.shape)\n", | |
"\n", | |
"test = test/255.0\n", | |
"test = test.to_numpy().reshape(-1, 28, 28)\n", | |
"print(test.shape)\n", | |
"\n" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"(42000, 28, 28)\n", | |
"(28000, 28, 28)\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "t0EttI--ifcf", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"X_train = np.stack((X_train,)*3, axis=-1)\n", | |
"test = np.stack((test,)*3, axis=-1)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true, | |
"jupyter": { | |
"outputs_hidden": true | |
}, | |
"id": "PDf-Be_Gifcm", | |
"colab_type": "code", | |
"colab": {}, | |
"outputId": "ac3a1de1-a75b-476e-c23c-83082ec970f5" | |
}, | |
"source": [ | |
"n = cv2.resize(X_train[0], (224,224))\n", | |
"plt.imshow(n)" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<matplotlib.image.AxesImage at 0x263e9dcdec8>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 8 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [], | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "JEJv_cuVifcv", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"try:\n", | |
" os.mkdir(TEST_IMGS)\n", | |
" os.mkdir(TRAIN_IMGS)\n", | |
"except:\n", | |
" pass" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true, | |
"jupyter": { | |
"outputs_hidden": true | |
}, | |
"id": "G11pVQGYifc2", | |
"colab_type": "code", | |
"colab": {}, | |
"outputId": "82e258ba-5f7e-41b3-d9aa-56340530bf3d" | |
}, | |
"source": [ | |
"indexDict = {}\n", | |
"for i in range(10):\n", | |
" try:\n", | |
" os.mkdir('./train/'+str(i))\n", | |
" except:\n", | |
" pass\n", | |
" indexDict[str(i)] = 0\n", | |
" \n", | |
"total=0\n", | |
"for index, img in enumerate(X_train):\n", | |
" resized = cv2.resize(img, (224,224))\n", | |
" label = str(y_train[index])\n", | |
" path = TRAIN_IMGS+label+'/'+str(indexDict[label])+'.png'\n", | |
" matplotlib.image.imsave(path, resized)\n", | |
" indexDict[label] = indexDict[label] + 1\n", | |
" total += 1\n", | |
"print(total)" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "error", | |
"ename": "KeyboardInterrupt", | |
"evalue": "", | |
"traceback": [ | |
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", | |
"\u001b[1;32m<ipython-input-12-2ad839d6929e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[0mlabel\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my_train\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[0mpath\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mTRAIN_IMGS\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mlabel\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;34m'/'\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mindexDict\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mlabel\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;34m'.png'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 14\u001b[1;33m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mimsave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mresized\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 15\u001b[0m \u001b[0mindexDict\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mlabel\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mindexDict\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mlabel\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[0mtotal\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32m~\\Miniconda3\\envs\\dl\\lib\\site-packages\\matplotlib\\image.py\u001b[0m in \u001b[0;36mimsave\u001b[1;34m(fname, arr, vmin, vmax, cmap, format, origin, dpi)\u001b[0m\n\u001b[0;32m 1496\u001b[0m \u001b[0mrgba\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msm\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_rgba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbytes\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1497\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mformat\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m\"png\"\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1498\u001b[1;33m \u001b[0m_png\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwrite_png\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrgba\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdpi\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdpi\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1499\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1500\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;31mKeyboardInterrupt\u001b[0m: " | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "ajJYRDGeifc-", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"for index, img in enumerate(test):\n", | |
" resized = cv2.resize(img, (224,224))\n", | |
" path = TEST_IMGS+str(index)+'.png'\n", | |
" matplotlib.image.imsave(path, resized)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "ggJIP78_ifdE", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"y_train = to_categorical(y_train, num_classes = 10)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "O9_wHrX_ifdK", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"# Model" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "jSxNFx6oifdM", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"learning_rate_reduction = tf.keras.callbacks.ReduceLROnPlateau(monitor='val_accuracy', \n", | |
" patience=3, \n", | |
" verbose=1, \n", | |
" factor=0.5, \n", | |
" min_lr=0.00001)" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "leNtaGe-ifdU", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"datagen = tf.keras.preprocessing.image.ImageDataGenerator(\n", | |
" #rotation_range=10, # randomly rotate images in the range (degrees, 0 to 180)\n", | |
" #zoom_range = 0.1, +# Randomly zoom image \n", | |
" #width_shift_range=0.1, # randomly shift images horizontally (fraction of total width)\n", | |
" #height_shift_range=0.1, # randomly shift images vertically (fraction of total height)\n", | |
" #fill_mode='constant',\n", | |
" #cval=0,\n", | |
" validation_split=0.25,\n", | |
" rotation_range=10, # randomly rotate images in the range (degrees, 0 to 180)\n", | |
" zoom_range = 0.1, # Randomly zoom image \n", | |
" width_shift_range=0.1, # randomly shift images horizontally (fraction of total width)\n", | |
" height_shift_range=0.1 # randomly shift images vertically (fraction of total height)\n", | |
" )" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "4iwq7sUTifdZ", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"HEIGHT = 64\n", | |
"WIDTH = 64\n", | |
"NUM_EPOCHS = 30\n", | |
"BATCH_SIZE = 64\n", | |
"path = TRAIN_IMGS" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "F6V3wpFDifdf", | |
"colab_type": "code", | |
"colab": {}, | |
"outputId": "fb213cb0-0b13-4228-ede9-76704bf9a65f" | |
}, | |
"source": [ | |
"train_generator = datagen.flow_from_directory(\n", | |
" path,\n", | |
" target_size=(HEIGHT, WIDTH),\n", | |
" batch_size=BATCH_SIZE,\n", | |
" class_mode='categorical',\n", | |
" subset='training'\n", | |
"\n", | |
")\n", | |
"validation_generator = datagen.flow_from_directory(\n", | |
" path,\n", | |
" target_size=(HEIGHT, WIDTH),\n", | |
" batch_size=BATCH_SIZE,\n", | |
" class_mode='categorical',\n", | |
" subset='validation'\n", | |
")\n" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Found 31503 images belonging to 10 classes.\n", | |
"Found 10497 images belonging to 10 classes.\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "MNoywQYLifdk", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input\n", | |
"\n", | |
"base_model = ResNet50(weights='imagenet', \n", | |
" include_top=False, \n", | |
" input_shape=(HEIGHT, WIDTH, 3))" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "m9jFGhVBifdq", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"for layer in base_model.layers[:-10]:\n", | |
" layer.trainable = False\n", | |
"model = tf.keras.Sequential([\n", | |
" base_model,\n", | |
" tf.keras.layers.Flatten(),\n", | |
" tf.keras.layers.Dense(255, activation='relu'),\n", | |
" tf.keras.layers.Dropout(0.25),\n", | |
" tf.keras.layers.Dense(10, activation='softmax')\n", | |
" ])" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "V-1cevSMifdw", | |
"colab_type": "code", | |
"colab": {}, | |
"outputId": "c29d1151-2e59-4e7a-fc5b-37572f31b86c" | |
}, | |
"source": [ | |
"model.summary()" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Model: \"sequential_9\"\n", | |
"_________________________________________________________________\n", | |
"Layer (type) Output Shape Param # \n", | |
"=================================================================\n", | |
"resnet50 (Model) (None, 2, 2, 2048) 23587712 \n", | |
"_________________________________________________________________\n", | |
"flatten_9 (Flatten) (None, 8192) 0 \n", | |
"_________________________________________________________________\n", | |
"dense_18 (Dense) (None, 255) 2089215 \n", | |
"_________________________________________________________________\n", | |
"dropout_9 (Dropout) (None, 255) 0 \n", | |
"_________________________________________________________________\n", | |
"dense_19 (Dense) (None, 10) 2560 \n", | |
"=================================================================\n", | |
"Total params: 25,679,487\n", | |
"Trainable params: 6,557,439\n", | |
"Non-trainable params: 19,122,048\n", | |
"_________________________________________________________________\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "Pd0o4sVyifd2", | |
"colab_type": "code", | |
"colab": {}, | |
"outputId": "4c61ed19-7003-439d-e4ab-633a12e83b43" | |
}, | |
"source": [ | |
"model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])\n", | |
"history = model.fit_generator(\n", | |
" train_generator,\n", | |
" steps_per_epoch = train_generator.samples // BATCH_SIZE,\n", | |
" validation_data = validation_generator, \n", | |
" validation_steps = validation_generator.samples // BATCH_SIZE,\n", | |
" epochs = NUM_EPOCHS,\n", | |
" callbacks=[learning_rate_reduction]\n", | |
")\n", | |
"\n", | |
"# Plot the training and validation loss + accuracy\n", | |
"def plot_training(history):\n", | |
" acc = history.history['accuracy']\n", | |
" val_acc = history.history['val_acc']\n", | |
" loss = history.history['loss']\n", | |
" val_loss = history.history['val_loss']\n", | |
" epochs = range(len(acc))\n", | |
"\n", | |
" plt.plot(epochs, acc, 'r.')\n", | |
" plt.plot(epochs, val_acc, 'r')\n", | |
" plt.title('Training and validation accuracy')\n", | |
"\n", | |
" # plt.figure()\n", | |
" # plt.plot(epochs, loss, 'r.')\n", | |
" # plt.plot(epochs, val_loss, 'r-')\n", | |
" # plt.title('Training and validation loss')\n", | |
" plt.show()\n", | |
"\n", | |
"#plot_training(history)\n" | |
], | |
"execution_count": 0, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Epoch 1/30\n", | |
"492/492 [==============================] - 121s 246ms/step - loss: 0.4895 - accuracy: 0.8777 - val_loss: 3.7323 - val_accuracy: 0.3643\n", | |
"Epoch 2/30\n", | |
"492/492 [==============================] - 123s 251ms/step - loss: 0.3383 - accuracy: 0.9193 - val_loss: 3.6158 - val_accuracy: 0.4299\n", | |
"Epoch 3/30\n", | |
"492/492 [==============================] - 118s 241ms/step - loss: 0.3334 - accuracy: 0.9277 - val_loss: 3.0009 - val_accuracy: 0.5441\n", | |
"Epoch 4/30\n", | |
"492/492 [==============================] - 118s 240ms/step - loss: 0.3089 - accuracy: 0.9309 - val_loss: 4.2812 - val_accuracy: 0.5503\n", | |
"Epoch 5/30\n", | |
"492/492 [==============================] - 119s 241ms/step - loss: 0.3012 - accuracy: 0.9347 - val_loss: 3.8561 - val_accuracy: 0.5079\n", | |
"Epoch 6/30\n", | |
"492/492 [==============================] - 120s 244ms/step - loss: 0.2956 - accuracy: 0.9345 - val_loss: 5.4723 - val_accuracy: 0.4112\n", | |
"Epoch 7/30\n", | |
"491/492 [============================>.] - ETA: 0s - loss: 0.2991 - accuracy: 0.9387\n", | |
"Epoch 00007: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257.\n", | |
"492/492 [==============================] - 121s 245ms/step - loss: 0.2989 - accuracy: 0.9387 - val_loss: 4.2983 - val_accuracy: 0.5069\n", | |
"Epoch 8/30\n", | |
"492/492 [==============================] - 125s 254ms/step - loss: 0.2619 - accuracy: 0.9468 - val_loss: 3.2079 - val_accuracy: 0.5561\n", | |
"Epoch 9/30\n", | |
"492/492 [==============================] - 130s 265ms/step - loss: 0.2591 - accuracy: 0.9478 - val_loss: 3.5592 - val_accuracy: 0.5482\n", | |
"Epoch 10/30\n", | |
"492/492 [==============================] - 125s 254ms/step - loss: 0.2386 - accuracy: 0.9512 - val_loss: 3.9279 - val_accuracy: 0.5322\n", | |
"Epoch 11/30\n", | |
"491/492 [============================>.] - ETA: 0s - loss: 0.2568 - accuracy: 0.9472\n", | |
"Epoch 00011: ReduceLROnPlateau reducing learning rate to 0.0002500000118743628.\n", | |
"492/492 [==============================] - 119s 241ms/step - loss: 0.2565 - accuracy: 0.9472 - val_loss: 4.8753 - val_accuracy: 0.4542\n", | |
"Epoch 12/30\n", | |
"492/492 [==============================] - 118s 239ms/step - loss: 0.2462 - accuracy: 0.9510 - val_loss: 3.5105 - val_accuracy: 0.5600\n", | |
"Epoch 13/30\n", | |
"492/492 [==============================] - 119s 241ms/step - loss: 0.2267 - accuracy: 0.9536 - val_loss: 4.1685 - val_accuracy: 0.5220\n", | |
"Epoch 14/30\n", | |
"492/492 [==============================] - 120s 244ms/step - loss: 0.2388 - accuracy: 0.9529 - val_loss: 4.6609 - val_accuracy: 0.5125\n", | |
"Epoch 15/30\n", | |
"491/492 [============================>.] - ETA: 0s - loss: 0.2188 - accuracy: 0.9548\n", | |
"Epoch 00015: ReduceLROnPlateau reducing learning rate to 0.0001250000059371814.\n", | |
"492/492 [==============================] - 122s 249ms/step - loss: 0.2186 - accuracy: 0.9549 - val_loss: 4.1446 - val_accuracy: 0.5405\n", | |
"Epoch 16/30\n", | |
"492/492 [==============================] - 124s 252ms/step - loss: 0.2210 - accuracy: 0.9546 - val_loss: 4.2820 - val_accuracy: 0.5463\n", | |
"Epoch 17/30\n", | |
"492/492 [==============================] - 130s 265ms/step - loss: 0.2058 - accuracy: 0.9578 - val_loss: 4.3026 - val_accuracy: 0.5447\n", | |
"Epoch 18/30\n", | |
"491/492 [============================>.] - ETA: 0s - loss: 0.2053 - accuracy: 0.9588\n", | |
"Epoch 00018: ReduceLROnPlateau reducing learning rate to 6.25000029685907e-05.\n", | |
"492/492 [==============================] - 126s 255ms/step - loss: 0.2054 - accuracy: 0.9588 - val_loss: 4.1962 - val_accuracy: 0.5497\n", | |
"Epoch 19/30\n", | |
"492/492 [==============================] - 124s 253ms/step - loss: 0.2052 - accuracy: 0.9600 - val_loss: 4.0658 - val_accuracy: 0.5486\n", | |
"Epoch 20/30\n", | |
"492/492 [==============================] - 124s 251ms/step - loss: 0.2008 - accuracy: 0.9603 - val_loss: 4.2257 - val_accuracy: 0.5391\n", | |
"Epoch 21/30\n", | |
"492/492 [==============================] - 119s 242ms/step - loss: 0.2092 - accuracy: 0.9580 - val_loss: 3.9996 - val_accuracy: 0.5626\n", | |
"Epoch 22/30\n", | |
"492/492 [==============================] - 120s 244ms/step - loss: 0.2076 - accuracy: 0.9582 - val_loss: 3.9104 - val_accuracy: 0.5690\n", | |
"Epoch 23/30\n", | |
"492/492 [==============================] - 117s 239ms/step - loss: 0.2022 - accuracy: 0.9593 - val_loss: 4.1907 - val_accuracy: 0.5498\n", | |
"Epoch 24/30\n", | |
"492/492 [==============================] - 119s 241ms/step - loss: 0.2037 - accuracy: 0.9604 - val_loss: 4.3731 - val_accuracy: 0.5377\n", | |
"Epoch 25/30\n", | |
"491/492 [============================>.] - ETA: 0s - loss: 0.2208 - accuracy: 0.9583\n", | |
"Epoch 00025: ReduceLROnPlateau reducing learning rate to 3.125000148429535e-05.\n", | |
"492/492 [==============================] - 121s 245ms/step - loss: 0.2212 - accuracy: 0.9583 - val_loss: 4.4472 - val_accuracy: 0.5284\n", | |
"Epoch 26/30\n", | |
"492/492 [==============================] - 118s 239ms/step - loss: 0.1918 - accuracy: 0.9605 - val_loss: 4.2652 - val_accuracy: 0.5387\n", | |
"Epoch 27/30\n", | |
"492/492 [==============================] - 117s 238ms/step - loss: 0.2095 - accuracy: 0.9612 - val_loss: 4.0703 - val_accuracy: 0.5486\n", | |
"Epoch 28/30\n", | |
"491/492 [============================>.] - ETA: 0s - loss: 0.1934 - accuracy: 0.9620\n", | |
"Epoch 00028: ReduceLROnPlateau reducing learning rate to 1.5625000742147677e-05.\n", | |
"492/492 [==============================] - 117s 238ms/step - loss: 0.1937 - accuracy: 0.9620 - val_loss: 4.1217 - val_accuracy: 0.5535\n", | |
"Epoch 29/30\n", | |
"492/492 [==============================] - 118s 241ms/step - loss: 0.2036 - accuracy: 0.9595 - val_loss: 4.1979 - val_accuracy: 0.5497\n", | |
"Epoch 30/30\n", | |
"492/492 [==============================] - 119s 242ms/step - loss: 0.2072 - accuracy: 0.9607 - val_loss: 4.1437 - val_accuracy: 0.5562\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "bHq3TPWWifd_", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment