Skip to content

Instantly share code, notes, and snippets.

@tevdoradze
Created December 1, 2019 12:58
Show Gist options
  • Save tevdoradze/9c7e940381aefb7c00b2ab82dd0307a2 to your computer and use it in GitHub Desktop.
Save tevdoradze/9c7e940381aefb7c00b2ab82dd0307a2 to your computer and use it in GitHub Desktop.
transfer_learning.ipynb
Display the source blob
Display the rendered blob
Raw
{
"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