Skip to content

Instantly share code, notes, and snippets.

@moneebullah25
Last active June 11, 2023 07:01
Show Gist options
  • Select an option

  • Save moneebullah25/2a71ab793cdaa0af41b0d1e6b2a95a41 to your computer and use it in GitHub Desktop.

Select an option

Save moneebullah25/2a71ab793cdaa0af41b0d1e6b2a95a41 to your computer and use it in GitHub Desktop.
Fine tuning VGG16, VGG19, ResNet-50, ResNet101, InceptionV3 on Custom Dizzy Driver Dataset
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"gpuType": "T4"
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "code",
"source": [
"!wget --load-cookies /tmp/cookies.txt \"https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\\1\\n/p')&id=1Xg6IvKx5rbeE3eOX1UVIIIqJh_XU9Mpe\" -O dizzy-driver-dataset.zip && rm -rf /tmp/cookies.txt"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "h048uID3s6Be",
"outputId": "668f7f6f-e181-46d4-cbdf-b57ffd227249"
},
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"--2023-06-07 07:17:35-- https://docs.google.com/uc?export=download&confirm=&id=1Xg6IvKx5rbeE3eOX1UVIIIqJh_XU9Mpe\n",
"Resolving docs.google.com (docs.google.com)... 108.177.120.139, 108.177.120.113, 108.177.120.100, ...\n",
"Connecting to docs.google.com (docs.google.com)|108.177.120.139|:443... connected.\n",
"HTTP request sent, awaiting response... 303 See Other\n",
"Location: https://doc-0s-1k-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/579i4c0g5rfiadr9ieafao9jfpfik5aq/1686122250000/08326947712027163536/*/1Xg6IvKx5rbeE3eOX1UVIIIqJh_XU9Mpe?e=download&uuid=e1ceb111-0675-4159-917c-a7de3e150de1 [following]\n",
"Warning: wildcards not supported in HTTP.\n",
"--2023-06-07 07:17:35-- https://doc-0s-1k-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/579i4c0g5rfiadr9ieafao9jfpfik5aq/1686122250000/08326947712027163536/*/1Xg6IvKx5rbeE3eOX1UVIIIqJh_XU9Mpe?e=download&uuid=e1ceb111-0675-4159-917c-a7de3e150de1\n",
"Resolving doc-0s-1k-docs.googleusercontent.com (doc-0s-1k-docs.googleusercontent.com)... 74.125.132.132, 2607:f8b0:4001:c00::84\n",
"Connecting to doc-0s-1k-docs.googleusercontent.com (doc-0s-1k-docs.googleusercontent.com)|74.125.132.132|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 39030172 (37M) [application/zip]\n",
"Saving to: ‘dizzy-driver-dataset.zip’\n",
"\n",
"dizzy-driver-datase 100%[===================>] 37.22M 114MB/s in 0.3s \n",
"\n",
"2023-06-07 07:17:36 (114 MB/s) - ‘dizzy-driver-dataset.zip’ saved [39030172/39030172]\n",
"\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"!unzip dizzy-driver-dataset.zip"
],
"metadata": {
"id": "TPP4gymnr7kr"
},
"execution_count": 10,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"#VGG16"
],
"metadata": {
"id": "-_VD5P92WMqH"
}
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"id": "a1-uWI_jlVrD"
},
"outputs": [],
"source": [
"import keras \n",
"from keras.datasets import mnist\n",
"from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D\n",
"from keras.layers import Dense, Flatten\n",
"from keras import optimizers\n",
"from keras.models import Sequential\n",
"from keras.layers import Input, Lambda, Dense, Flatten, Dropout, UpSampling2D, LeakyReLU, MaxPooling2D, BatchNormalization\n",
"from keras.models import Model\n",
"from keras.applications.vgg16 import VGG16\n",
"from keras.applications.vgg16 import preprocess_input\n",
"from keras.preprocessing import image\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"from keras.models import Sequential\n",
"import numpy as np\n",
"from glob import glob\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"source": [
"import pandas as pd\n",
"import os\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"\n",
"def append_ext(fn):\n",
" return fn + \".jpg\"\n",
"\n",
"IMAGE_SIZE = [120, 90]\n",
"traindf = pd.read_csv(\"train/train.csv\", dtype=str)\n",
"testdf = pd.read_csv(\"test/test.csv\", dtype=str)\n",
"traindf[\"img\"] = traindf[\"img\"].apply(append_ext)\n",
"testdf[\"img\"] = testdf[\"img\"].apply(append_ext)\n",
"\n",
"datagen = ImageDataGenerator(rescale=1.0 / 255.0, validation_split=0.10)\n",
"\n",
"train_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"training\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"valid_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"validation\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"test_datagen = ImageDataGenerator(rescale=1.0 / 255.0)\n",
"\n",
"test_generator = test_datagen.flow_from_dataframe(\n",
" dataframe=testdf,\n",
" directory=\"test/test_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" batch_size=32,\n",
" seed=42,\n",
" shuffle=False,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "kFxdr4g_qx-s",
"outputId": "45cc8a52-77a2-4b31-fbd5-01e4a8886492"
},
"execution_count": 33,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Found 646 validated image filenames belonging to 10 classes.\n",
"Found 71 validated image filenames belonging to 10 classes.\n",
"Found 201 validated image filenames belonging to 10 classes.\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size\n",
"STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size\n",
"STEP_SIZE_TEST=test_generator.n//test_generator.batch_size"
],
"metadata": {
"id": "zg5AIsJpruRG"
},
"execution_count": 34,
"outputs": []
},
{
"cell_type": "code",
"source": [
"vgg = VGG16(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)\n",
"#here [3] denotes for RGB images(3 channels)\n",
"\n",
"#don't train existing weights\n",
"for layer in vgg.layers:\n",
" layer.trainable = False\n",
"\n",
"x = Dropout(0.2)(vgg.output)\n",
"x = UpSampling2D()(x)\n",
"x = Conv2D(64, 4, padding = 'same', activation = LeakyReLU())(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = Dropout(0.2)(x)\n",
"x = UpSampling2D()(x)\n",
"x = Conv2D(32, 3, padding = 'same', activation = LeakyReLU())(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = Dropout(0.2)(x)\n",
"x = UpSampling2D()(x)\n",
"x = Conv2D(16, 3, padding = 'same', activation = LeakyReLU())(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = Dropout(0.2)(x)\n",
"x = Flatten()(x)\n",
"x = Dropout(0.2)(x) # Dropout layer to reduce overfitting\n",
"x = Dense(512, activation='relu')(x)\n",
"x = Dropout(0.2)(x) # Dropout layer to reduce overfitting\n",
"x = Dense(256, activation='relu')(x)\n",
"x = Dropout(0.2)(x) # Dropout layer to reduce overfitting\n",
"prediction = Dense(10, activation='softmax')(x)\n",
"model = Model(inputs=vgg.input, outputs=prediction)\n",
"model.compile(loss='categorical_crossentropy',\n",
" optimizer=optimizers.Adam(),\n",
" metrics=['accuracy'])\n",
"model.summary()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "9Zig-Lh5lZlg",
"outputId": "3693d640-d8c8-4525-96e2-57e4e4fddc71"
},
"execution_count": 35,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Model: \"model_5\"\n",
"_________________________________________________________________\n",
" Layer (type) Output Shape Param # \n",
"=================================================================\n",
" input_7 (InputLayer) [(None, 120, 90, 3)] 0 \n",
" \n",
" block1_conv1 (Conv2D) (None, 120, 90, 64) 1792 \n",
" \n",
" block1_conv2 (Conv2D) (None, 120, 90, 64) 36928 \n",
" \n",
" block1_pool (MaxPooling2D) (None, 60, 45, 64) 0 \n",
" \n",
" block2_conv1 (Conv2D) (None, 60, 45, 128) 73856 \n",
" \n",
" block2_conv2 (Conv2D) (None, 60, 45, 128) 147584 \n",
" \n",
" block2_pool (MaxPooling2D) (None, 30, 22, 128) 0 \n",
" \n",
" block3_conv1 (Conv2D) (None, 30, 22, 256) 295168 \n",
" \n",
" block3_conv2 (Conv2D) (None, 30, 22, 256) 590080 \n",
" \n",
" block3_conv3 (Conv2D) (None, 30, 22, 256) 590080 \n",
" \n",
" block3_pool (MaxPooling2D) (None, 15, 11, 256) 0 \n",
" \n",
" block4_conv1 (Conv2D) (None, 15, 11, 512) 1180160 \n",
" \n",
" block4_conv2 (Conv2D) (None, 15, 11, 512) 2359808 \n",
" \n",
" block4_conv3 (Conv2D) (None, 15, 11, 512) 2359808 \n",
" \n",
" block4_pool (MaxPooling2D) (None, 7, 5, 512) 0 \n",
" \n",
" block5_conv1 (Conv2D) (None, 7, 5, 512) 2359808 \n",
" \n",
" block5_conv2 (Conv2D) (None, 7, 5, 512) 2359808 \n",
" \n",
" block5_conv3 (Conv2D) (None, 7, 5, 512) 2359808 \n",
" \n",
" block5_pool (MaxPooling2D) (None, 3, 2, 512) 0 \n",
" \n",
" dropout_36 (Dropout) (None, 3, 2, 512) 0 \n",
" \n",
" up_sampling2d_16 (UpSamplin (None, 6, 4, 512) 0 \n",
" g2D) \n",
" \n",
" conv2d_16 (Conv2D) (None, 6, 4, 64) 524352 \n",
" \n",
" batch_normalization_19 (Bat (None, 6, 4, 64) 256 \n",
" chNormalization) \n",
" \n",
" batch_normalization_20 (Bat (None, 6, 4, 64) 256 \n",
" chNormalization) \n",
" \n",
" batch_normalization_21 (Bat (None, 6, 4, 64) 256 \n",
" chNormalization) \n",
" \n",
" dropout_37 (Dropout) (None, 6, 4, 64) 0 \n",
" \n",
" up_sampling2d_17 (UpSamplin (None, 12, 8, 64) 0 \n",
" g2D) \n",
" \n",
" conv2d_17 (Conv2D) (None, 12, 8, 32) 18464 \n",
" \n",
" batch_normalization_22 (Bat (None, 12, 8, 32) 128 \n",
" chNormalization) \n",
" \n",
" batch_normalization_23 (Bat (None, 12, 8, 32) 128 \n",
" chNormalization) \n",
" \n",
" batch_normalization_24 (Bat (None, 12, 8, 32) 128 \n",
" chNormalization) \n",
" \n",
" dropout_38 (Dropout) (None, 12, 8, 32) 0 \n",
" \n",
" up_sampling2d_18 (UpSamplin (None, 24, 16, 32) 0 \n",
" g2D) \n",
" \n",
" conv2d_18 (Conv2D) (None, 24, 16, 16) 4624 \n",
" \n",
" batch_normalization_25 (Bat (None, 24, 16, 16) 64 \n",
" chNormalization) \n",
" \n",
" batch_normalization_26 (Bat (None, 24, 16, 16) 64 \n",
" chNormalization) \n",
" \n",
" batch_normalization_27 (Bat (None, 24, 16, 16) 64 \n",
" chNormalization) \n",
" \n",
" dropout_39 (Dropout) (None, 24, 16, 16) 0 \n",
" \n",
" flatten_5 (Flatten) (None, 6144) 0 \n",
" \n",
" dropout_40 (Dropout) (None, 6144) 0 \n",
" \n",
" dense_15 (Dense) (None, 512) 3146240 \n",
" \n",
" dropout_41 (Dropout) (None, 512) 0 \n",
" \n",
" dense_16 (Dense) (None, 256) 131328 \n",
" \n",
" dropout_42 (Dropout) (None, 256) 0 \n",
" \n",
" dense_17 (Dense) (None, 10) 2570 \n",
" \n",
"=================================================================\n",
"Total params: 18,543,610\n",
"Trainable params: 3,828,250\n",
"Non-trainable params: 14,715,360\n",
"_________________________________________________________________\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from datetime import datetime\n",
"from keras.callbacks import ModelCheckpoint, LearningRateScheduler\n",
"from keras.callbacks import ReduceLROnPlateau\n",
"lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1),\n",
" cooldown=0,\n",
" patience=5,\n",
" min_lr=0.5e-6)\n",
"checkpoint = ModelCheckpoint(filepath='mymodel.h5', \n",
" verbose=1, save_best_only=True)\n",
"callbacks = [checkpoint]\n",
"start = datetime.now()\n",
"history = model.fit(train_generator, \n",
" steps_per_epoch=STEP_SIZE_TRAIN, \n",
" epochs=15,\n",
" validation_data=valid_generator, \n",
" validation_steps=STEP_SIZE_VALID)\n",
"\n",
"duration = datetime.now() - start\n",
"print(\"Training completed in time: \", duration)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "QWtEbfyIlZjJ",
"outputId": "33e5e924-8263-45e5-c82f-1739c062b9f8"
},
"execution_count": 42,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/15\n",
"20/20 [==============================] - 4s 196ms/step - loss: 0.4112 - accuracy: 0.8730 - val_loss: 26.4538 - val_accuracy: 0.0000e+00\n",
"Epoch 2/15\n",
"20/20 [==============================] - 4s 197ms/step - loss: 0.5271 - accuracy: 0.8453 - val_loss: 18.3013 - val_accuracy: 0.0000e+00\n",
"Epoch 3/15\n",
"20/20 [==============================] - 4s 197ms/step - loss: 0.3338 - accuracy: 0.8909 - val_loss: 20.5227 - val_accuracy: 0.0000e+00\n",
"Epoch 4/15\n",
"20/20 [==============================] - 4s 186ms/step - loss: 0.3642 - accuracy: 0.8893 - val_loss: 17.5757 - val_accuracy: 0.0000e+00\n",
"Epoch 5/15\n",
"20/20 [==============================] - 5s 244ms/step - loss: 0.3292 - accuracy: 0.8893 - val_loss: 19.3813 - val_accuracy: 0.0000e+00\n",
"Epoch 6/15\n",
"20/20 [==============================] - 4s 183ms/step - loss: 0.3871 - accuracy: 0.8909 - val_loss: 15.9243 - val_accuracy: 0.0000e+00\n",
"Epoch 7/15\n",
"20/20 [==============================] - 4s 195ms/step - loss: 0.3127 - accuracy: 0.9072 - val_loss: 20.9682 - val_accuracy: 0.0000e+00\n",
"Epoch 8/15\n",
"20/20 [==============================] - 5s 247ms/step - loss: 0.2820 - accuracy: 0.9137 - val_loss: 18.1967 - val_accuracy: 0.0000e+00\n",
"Epoch 9/15\n",
"20/20 [==============================] - 4s 215ms/step - loss: 0.3539 - accuracy: 0.8958 - val_loss: 18.4733 - val_accuracy: 0.0000e+00\n",
"Epoch 10/15\n",
"20/20 [==============================] - 6s 258ms/step - loss: 0.3256 - accuracy: 0.9104 - val_loss: 17.7500 - val_accuracy: 0.0000e+00\n",
"Epoch 11/15\n",
"20/20 [==============================] - 5s 252ms/step - loss: 0.1918 - accuracy: 0.9365 - val_loss: 20.3532 - val_accuracy: 0.0000e+00\n",
"Epoch 12/15\n",
"20/20 [==============================] - 5s 235ms/step - loss: 0.3684 - accuracy: 0.9104 - val_loss: 22.3196 - val_accuracy: 0.0000e+00\n",
"Epoch 13/15\n",
"20/20 [==============================] - 4s 184ms/step - loss: 0.3432 - accuracy: 0.8893 - val_loss: 21.4212 - val_accuracy: 0.0000e+00\n",
"Epoch 14/15\n",
"20/20 [==============================] - 6s 295ms/step - loss: 0.3430 - accuracy: 0.8974 - val_loss: 17.6211 - val_accuracy: 0.0000e+00\n",
"Epoch 15/15\n",
"20/20 [==============================] - 5s 231ms/step - loss: 0.2729 - accuracy: 0.9186 - val_loss: 15.6389 - val_accuracy: 0.0000e+00\n",
"Training completed in time: 0:01:23.604076\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# list all data in history\n",
"print(history.history.keys())\n",
"# summarize history for accuracy\n",
"plt.plot(history.history['accuracy'])\n",
"plt.plot(history.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()\n",
"# summarize history for loss\n",
"plt.plot(history.history['loss'])\n",
"plt.plot(history.history['val_loss'])\n",
"plt.title('model loss')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 944
},
"id": "HvwcK1Dhx1YX",
"outputId": "6f062b5a-de39-402a-fd71-6a98785cbbf8"
},
"execution_count": 43,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEGklEQVR4nO3deXgUZb728bvTSXcSspOVEAiyBJAAQgDZXKOMC+MKyCib26uiIhk8gAqojEQdcVBwROeM43jGBUXxMOrowQg4MsgqKrLvCGQj+5501/tHSEubsCSEdFL5fq6rL9NPP1X9qwJSt089VWUxDMMQAACASXh5ugAAAIDGRLgBAACmQrgBAACmQrgBAACmQrgBAACmQrgBAACmQrgBAACmQrgBAACmQrgBAACmQrgB0GgOHDggi8WiN998s97Lrlq1ShaLRatWrWr0ugC0LoQbAABgKoQbAABgKoQbADiPiouLPV0C0OoQbgATefLJJ2WxWLRr1y7dcccdCg4OVkREhGbNmiXDMHT48GHdcMMNCgoKUnR0tObPn19rHZmZmbrrrrsUFRUlX19f9enTR3//+99r9cvLy9PEiRMVHByskJAQTZgwQXl5eXXWtWPHDt16660KCwuTr6+vkpKStHz58gZt48GDB/XAAw8oISFBfn5+atu2rUaNGqUDBw7UWePUqVMVHx8vu92u9u3ba/z48crOznb1KSsr05NPPqlu3brJ19dXMTExuvnmm7V3715Jp54LVNf8ookTJyogIEB79+7Vtddeq8DAQN1+++2SpH//+98aNWqUOnToILvdrri4OE2dOlWlpaV17q/Ro0crIiJCfn5+SkhI0OOPPy5JWrlypSwWi5YtW1ZruXfeeUcWi0Vr166t724FTMXb0wUAaHxjxoxRjx499Oyzz+rTTz/VH/7wB4WFhem1117TFVdcoeeee05vv/22pk2bpgEDBuiSSy6RJJWWluqyyy7Tnj179OCDD6pTp0764IMPNHHiROXl5WnKlCmSJMMwdMMNN+ibb77Rfffdpx49emjZsmWaMGFCrVp++uknDR06VLGxsZoxY4batGmj999/XzfeeKM+/PBD3XTTTfXatg0bNug///mPbrvtNrVv314HDhzQq6++qssuu0zbtm2Tv7+/JKmoqEjDhw/X9u3bdeedd6pfv37Kzs7W8uXL9fPPPys8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F3T48GF17NhRl19+uS6//HJ16tRJ6enpmj9//lmvp6KiQps2bVJycvIvBXl5KTk5WWvXrj3lck8//bQiIyN11113nfE7ysvLVVBQ4PYCAADm1aD73MTGxuqHH37Q22+/re+//15+fn6aNGmSxo4dKx8fn7NeT3Z2thwOh6Kiotzao6KitGPHjjqX+eabb/TXv/5VW7ZsOavvSE1N1VNPPXXWNQEAgJatQeFGktq0aaNhw4apQ4cOqqiokCT961//kiT99re/bZzqfqWwsFDjxo3TX/7yF4WHh5/VMjNnzlRKSorrfUFBgeLi4s5LfQAAwPMaFG727dunm266ST/++KMsFosMw5DFYnF97nA4zmo94eHhslqttSYnZ2RkKDo6ulb/vXv36sCBAxo5cqSrzel0Vm+It7d27typzp07uy1jt9tlt9vPetsAAEDL1qA5N1OmTFGnTp2UmZkpf39/bd26VatXr1ZSUpJWrVp11uux2Wzq37+/0tLSXG1Op1NpaWkaPHhwrf7du3fXjz/+qC1btrhev/3tb3X55Zdry5YtjMgAAICGjdysXbtWX331lcLDw+Xl5SWr1aphw4YpNTVVDz/8sL777ruzXldKSoomTJigpKQkDRw4UAsWLFBxcbEmTZokSRo/frxiY2OVmpoqX19f9erVy235kJAQSarVDgAAWqcGhRuHw6HAwEBJ1aeWjh49qoSEBHXs2FE7d+6s17rGjBmjrKwszZ49W+np6erbt68+//xz1yTjQ4cOycurQQNMAACgFWrQgzOHDx+u3//+97rxxhv1u9/9Trm5uXriiSf0+uuva9OmTdq6dev5qLVR8OBMAABanvocvxs0cvPEE0+ouLhYUvU9Z66//noNHz5cbdu21ZIlSxqySgAAgEbRoJGbuuTk5Cg0NNTtqqnmiJEbAABanvM+clOXsLCwxloVAABAgzFTFwAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAAmArhBgAA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Nm1ScnKyq83Ly0vJyclau3atByvznPz8fElSWFiYhytpWpMnT9Z1113n9nehtVi+fLmSkpI0atQoRUZG6qKLLtJf/vIXT5fVZIYMGaK0tDTt2rVLkvT999/rm2++0TXXXOPhyjxj//79Sk9Pd/u3EBwcrEGDBrXq34sWi0UhISGeLqVJOJ1OjRs3To8++qguvPDCJv/+VvfgzMaWnZ0th8OhqKgot/aoqCjt2LHDQ1V5jtPp1COPPKKhQ4eqV69eni6nybz33nvavHmzNmzY4OlSPGLfvn169dVXlZKSoscee0wbNmzQww8/LJvNpgkTJni6vPNuxowZKigoUPfu3WW1WuVwOPTMM8/o9ttv93RpHpGeni5Jdf5erPmsNSkrK9P06dM1duzYVvMwzeeee07e3t56+OGHPfL9hBs0qsmTJ2vr1q365ptvPF1Kkzl8+LCmTJmiFStWyNfX19PleITT6VRSUpLmzZsnSbrooou0detWLV68uFWEm/fff19vv/223nnnHV144YXasmWLHnnkEbVr165VbD9OrbKyUqNHj5ZhGHr11Vc9XU6T2LRpk1566SVt3rxZFovFIzVwWuochYeHy2q1KiMjw609IyND0dHRHqrKMx588EF98sknWrlypdq3b+/pcprMpk2blJmZqX79+snb21ve3t5avXq1Xn75ZXl7e8vhcHi6xPMuJiZGPXv2dGvr0aOHDh065KGKmtajjz6qGTNm6LbbblNiYqLGjRunqVOnKjU11dOleUTN777W/nuxJtgcPHhQK1asaDWjNv/+97+VmZmpDh06uH4nHjx4UL///e8VHx/fJDUQbs6RzWZT//79lZaW5mpzOp1KS0vT4MGDPVhZ0zEMQw8++KCWLVumr776Sp06dfJ0SU3qyiuv1I8//qgtW7a4XklJSbr99tu1ZcsWWa1WT5d43g0dOrTW5f+7du1Sx44dPVRR0yopKZGXl/uvU6vVKqfT6aGKPKtTp06Kjo52+71YUFCgdevWtZrfizXBZvfu3fryyy/Vtm1bT5fUZMaNG6cffvjB7Xdiu3bt9Oijj+qLL75okho4LdUIUlJSNGHCBCUlJWngwIFasGCBiouLNWnSJE+X1iQmT56sd955R//7v/+rwMBA1zn14OBg+fn5ebi68y8wMLDW/KI2bdqobdu2rWbe0dSpUzVkyBDNmzdPo0eP1vr16/X666/r9ddf93RpTWLkyJF65pln1KFDB1144YX67rvv9OKLL+rOO+/0dGnnTVFRkfbs2eN6v3//fm3ZskVhYWHq0KGDHnnkEf3hD39Q165d1alTJ82aNUvt2rXTjTfe6LmiG9Hptj8mJka33nqrNm/erE8++UQOh8P1ezEsLEw2m81TZTeaM/35/zrM+fj4KDo6WgkJCU1TYJNdl2VyCxcuNDp06GDYbDZj4MCBxrfffuvpkpqMpDpff/vb3zxdmse0tkvBDcMw/vnPfxq9evUy7Ha70b17d+P111/3dElNpqCgwJgyZYrRoUMHw9fX17jggguMxx9/3CgvL/d0aefNypUr6/x3P2HCBMMwqi8HnzVrlhEVFWXY7XbjyiuvNHbu3OnZohvR6bZ///79p/y9uHLlSk+X3ijO9Of/a019KbjFMEx8C00AANDqMOcGAACYCuEGAACYCuEGAACYCuEGAACYCuEGAACYCuEGAACYCuEGAACYCuEGQKu3atUqWSwW5eXleboUAI2AcAMAAEyFcAMAAEyFcAPA45xOp1JTU9WpUyf5+fmpT58+Wrp0qaRfThl9+umn6t27t3x9fXXxxRdr69atbuv48MMPdeGFF8putys+Pl7z5893+7y8vFzTp09XXFyc7Ha7unTpor/+9a9ufTZt2qSkpCT5+/tryJAhtZ50DqBlINwA8LjU1FS99dZbWrx4sX766SdNnTpVd9xxh1avXu3q8+ijj2r+/PnasGGDIiIiNHLkSFVWVkqqDiWjR4/Wbbfdph9//FFPPvmkZs2apTfffNO1/Pjx4/Xuu+/q5Zdf1vbt2/Xaa68pICDArY7HH39c8+fP18aNG+Xt7W3qp3oDZsaDMwF4VHl5ucLCwvTll19q8ODBrva7775bJSUluvfee3X55Zfrvffe05gxYyRJOTk5at++vd58802NHj1at99+u7KysvR///d/ruX/67/+S59++ql++ukn7dq1SwkJCVqxYoWSk5Nr1bBq1Spdfvnl+vLLL3XllVdKkj777DNdd911Ki0tla+v73neCwAaEyM3ADxqz549Kikp0VVXXaWAgADX66233tLevXtd/U4OPmFhYUpISND27dslSdu3b9fQoUPd1jt06FDt3r1bDodDW7ZskdVq1aWXXnraWnr37u36OSYmRpKUmZl5ztsIoGl5e7oAAK1bUVGRJOnTTz9VbGys22d2u90t4DSUn5/fWfXz8fFx/WyxWCRVzwcC0LIwcgPAo3r27Cm73a5Dhw6pS5cubq+4uDhXv2+//db1c25urnbt2qUePXpIknr06KE1a9a4rXfNmjXq1q2brFarEhMT5XQ63ebwADAvRm4AeFRgYKCmTZumqVOnyul0atiwYcrPz9eaNWsUFBSkjh07SpKefvpptW3bVlFRUXr88ccVHh6uG2+8UZL0+9//XgMGDNDcuXM1ZswYrV27VosWLdKf//xnSVJ8fLwmTJigO++8Uy+//LL69OmjgwcPKjMzU6NHj/bUpgM4Twg3ADxu7ty5ioiIUGpqqvbt26eQkBD169dPjz32mOu00LPPPqspU6Zo9+7d6tu3r/75z3/KZrNJkvr166f3339fs2fP1ty5cxUTE6Onn35aEydOdH3Hq6++qscee0wPPPCAjh8/rg4dOuixxx7zxOYCOM+4WgpAs1ZzJVNubq5CQkI8XQ6AFoA5NwAAwFQINwAAwFQ4LQUAAEyFkRsAAGAqhBsAAGAqhBsAAGAqhBsAAGAqhBsAAGAqhBsAAGAqhBsAAGAqhBsAAGAqhBsAAGAq/x+Hlrk4lFyZWQAAAABJRU5ErkJggg==\n"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTYUlEQVR4nO3dd3xT9f7H8VeSbkpbyyqVMhREQMQBIuJA2SCKoigucHH1ByoiXvf2gnpFcSDqdaDXvRjKFQWEIgiIICKKZcgSKEva0gIdyfn98W3TlllKkpPTvp+PRx49OTlJPg0leef7/Z7v12VZloWIiIiIA7ntLkBERESkshRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGREJKysXbsWl8vF+PHjj/i+s2bNwuVyMWvWrEMeN378eFwuF2vXrq1UjSISPhRkRERExLEUZERERMSxFGRERETEsRRkRKScRx99FJfLxYoVK7jmmmtITEykTp06PPTQQ1iWxYYNG7j44otJSEggJSWF0aNH7/cYW7du5cYbb6RevXrExMTQpk0b3nnnnf2Oy8rKYtCgQSQmJpKUlMTAgQPJyso6YF1//PEHl112GcnJycTExNC2bVsmT54c0N/9lVdeoVWrVkRHR5OamsqQIUP2q2flypX069ePlJQUYmJiaNCgAVdeeSXZ2dn+Y6ZNm8bZZ59NUlIS8fHxNG/enPvvvz+gtYqIEWF3ASISnq644gpatGjBU089xZQpU3jyySdJTk7mtdde44ILLuDpp5/m/fffZ8SIEbRr145zzz0XgD179tCpUydWrVrF0KFDadKkCZ9++imDBg0iKyuLO+64AwDLsrj44ouZM2cOt9xyCy1atGDChAkMHDhwv1p+++03OnbsyLHHHsu9995LjRo1+OSTT+jbty+ff/45l1xyyVH/vo8++iiPPfYYXbp04dZbbyUjI4Nx48axcOFC5s6dS2RkJAUFBXTv3p38/Hxuu+02UlJS2LhxI1999RVZWVkkJiby22+/ceGFF3LyySfz+OOPEx0dzapVq5g7d+5R1ygiB2CJiJTxyCOPWIA1ePBg/76ioiKrQYMGlsvlsp566in//p07d1qxsbHWwIED/fvGjBljAdZ7773n31dQUGB16NDBio+Pt3JycizLsqyJEydagPXMM8+Ue55zzjnHAqy3337bv79z585W69atrb179/r3+Xw+66yzzrKaNWvm3zdz5kwLsGbOnHnI3/Htt9+2AGvNmjWWZVnW1q1braioKKtbt26W1+v1H/fyyy9bgPXWW29ZlmVZP//8swVYn3766UEf+/nnn7cAa9u2bYesQUQCQ11LInJAN910k3/b4/HQtm1bLMvixhtv9O9PSkqiefPm/Pnnn/59//vf/0hJSWHAgAH+fZGRkdx+++3k5uaSnp7uPy4iIoJbb7213PPcdttt5er4+++/+e677+jfvz+7du1i+/btbN++nR07dtC9e3dWrlzJxo0bj+p3nT59OgUFBQwbNgy3u/Rt8eabbyYhIYEpU6YAkJiYCMA333zD7t27D/hYSUlJAEyaNAmfz3dUdYnI4SnIiMgBNWzYsNz1xMREYmJiqF279n77d+7c6b++bt06mjVrVi4QALRo0cJ/e8nP+vXrEx8fX+645s2bl7u+atUqLMvioYceok6dOuUujzzyCGDG5ByNkpr2fe6oqCiOO+44/+1NmjRh+PDhvPHGG9SuXZvu3bszduzYcuNjrrjiCjp27MhNN91EvXr1uPLKK/nkk08UakSCRGNkROSAPB5PhfaBGe8SLCUBYMSIEXTv3v2AxzRt2jRoz7+v0aNHM2jQICZNmsS3337L7bffzqhRo5g/fz4NGjQgNjaW2bNnM3PmTKZMmcLUqVP5+OOPueCCC/j2228P+hqKSOWoRUZEAqpRo0asXLlyvxaIP/74w397yc/NmzeTm5tb7riMjIxy14877jjAdE916dLlgJeaNWsedc0Heu6CggLWrFnjv71E69atefDBB5k9ezbff/89Gzdu5NVXX/Xf7na76dy5M8899xy///47//rXv/juu++YOXPmUdUpIvtTkBGRgOrVqxeZmZl8/PHH/n1FRUW89NJLxMfHc9555/mPKyoqYty4cf7jvF4vL730UrnHq1u3Lp06deK1115j8+bN+z3ftm3bjrrmLl26EBUVxYsvvliudenNN98kOzub3r17A5CTk0NRUVG5+7Zu3Rq3201+fj5gxvTs65RTTgHwHyMigaOuJREJqMGDB/Paa68xaNAgFi1aROPGjfnss8+YO3cuY8aM8bee9OnTh44dO3Lvvfeydu1aWrZsyRdffFFuvEmJsWPHcvbZZ9O6dWtuvvlmjjvuOLZs2cK8efP466+/+OWXX46q5jp16nDffffx2GOP0aNHDy666CIyMjJ45ZVXaNeuHddccw0A3333HUOHDuXyyy/nhBNOoKioiP/+9794PB769esHwOOPP87s2bPp3bs3jRo1YuvWrbzyyis0aNCAs88++6jqFJH9KciISEDFxsYya9Ys7r33Xt555x1ycnJo3rw5b7/9NoMGDfIf53a7mTx5MsOGDeO9997D5XJx0UUXMXr0aE499dRyj9myZUt++uknHnvsMcaPH8+OHTuoW7cup556Kg8//HBA6n700UepU6cOL7/8MnfeeSfJyckMHjyYkSNHEhkZCUCbNm3o3r07X375JRs3biQuLo42bdrw9ddfc+aZZwJw0UUXsXbtWt566y22b99O7dq1Oe+883jsscf8Zz2JSOC4rGCO0hMREREJIo2REREREcdSkBERERHHUpARERERx1KQEREREcdSkBERERHHUpARERERx6ry88j4fD42bdpEzZo1cblcdpcjIiIiFWBZFrt27SI1NXW/RWjLqvJBZtOmTaSlpdldhoiIiFTChg0baNCgwUFvr/JBpmQ69A0bNpCQkGBzNSIiIlIROTk5pKWlHXZR2CofZEq6kxISEhRkREREHOZww0I02FdEREQcS0FGREREHEtBRkRERByryo+RqSiv10thYaHdZThSVFTUIU+NExERCZZqH2QsyyIzM5OsrCy7S3Est9tNkyZNiIqKsrsUERGpZqp9kCkJMXXr1iUuLk6T5h2hkgkHN2/eTMOGDfX6iYhISFXrIOP1ev0hplatWnaX41h16tRh06ZNFBUVERkZaXc5IiJSjVTrgQ0lY2Li4uJsrsTZSrqUvF6vzZWIiEh1U62DTAl1hxwdvX4iImIXBRkRERFxLAUZoXHjxowZM8buMkRERI5YtR7s62SdOnXilFNOCUgAWbhwITVq1Dj6okREREJMQaayLAsK94AnCjzh9zJaloXX6yUi4vC11alTJwQViYiIBJ66lipr5xrYngF7d4b8qQcNGkR6ejovvPACLpcLl8vF+PHjcblcfP3115x++ulER0czZ84cVq9ezcUXX0y9evWIj4+nXbt2TJ8+vdzj7du15HK5eOONN7jkkkuIi4ujWbNmTJ48OcS/pYiIyOEpyJRhWRa7C4oqdrGi2V3oY3fO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oopERETEScJ+jMysWbOoW7cuzZs359Zbb2XHjh2HPD4/P5+cnJxyFxEREamawjrI9OjRg3fffZcZM2bw9NNPk56eTs+ePfF6vQe9z6hRo0hMTPRf0tLSQlixiIiIhFLYLFHgcrmYMGECffv2Pegxf/75J8cffzzTp0+nc+fOBzwmPz+f/Px8//WcnBzS0tK0RIGIiIiDVMklCo477jhq167NqlWrDnpMdHQ0CQkJ5S4iIiJSNTkqyPz111/s2LGD+vXr212KiIiIhAFbz1rKzc0t17qyZs0alixZQnJyMsnJyTz22GP069ePlJQUVq9ezT//+U+aNm1K9+7dbaxaREREwoWtQeann37i/PPP918fPnw4AAMHDmTcuHEsXbqUd955h6ysLFJTU+nWrRtPPPEE0dHRdpUsIiIiYSRsBvsGS0UHC4mIiEj4qJKDfUVERETKUpARERERx1KQEREREcdSkBERERHHUpARERERx6pUkHnnnXeYMmWK//o///lPkpKSOOuss1i3bl3AihMRERE5lEoFmZEjRxIbGwvAvHnzGDt2LM888wy1a9fmzjvvDGiBIiIiIgdTqQnxNmzYQNOmTQGYOHEi/fr1Y/DgwXTs2JFOnToFsj4RERGRg6pUi0x8fDw7duwA4Ntvv6Vr164AxMTEsGfPnsBVJyIiInIIlWqR6dq1KzfddBOnnnoqK1asoFevXgD89ttvNG7cOJD1iYiIiBxUpVpkxo4dS4cOHdi2bRuff/45tWrVAmDRokUMGDAgoAWKiIiIHIzWWhIREZGwE9S1lqZOncqcOXP818eOHcspp5zCVVddxc6dOyvzkCIiIiJHrFJB5u677yYnJweAX3/9lbvuuotevXqxZs0ahg8fHtACRURERA6mUoN916xZQ8uWLQH4/PPPufDCCxk5ciSLFy/2D/wVERERCbZKtchERUWxe/duAKZPn063bt0ASE5O9rfUiIiIiARbpVpkzj77bIYPH07Hjh358ccf+fjjjwFYsWIFDRo0CGiBIiIiIgdTqRaZl19+mYiICD777DPGjRvHscceC8DXX39Njx49AlqgiIiIyMHo9GsREREJOxX9/K5U1xKA1+tl4sSJLF++HIBWrVpx0UUX4fF4KvuQIiIiIkekUkFm1apV9OrVi40bN9K8eXMARo0aRVpaGlOmTOH4448PaJEiIiIiB1KpMTK33347xx9/PBs2bGDx4sUsXryY9evX06RJE26//fZA1ygiIiJyQJVqkUlPT2f+/PkkJyf799WqVYunnnqKjh07Bqw4ERERkUOpVItMdHQ0u3bt2m9/bm4uUVFRR12UiIiISEVUKshceOGFDB48mAULFmBZFpZlMX/+fG655RYuuuiiQNcoIiIickCVCjIvvvgixx9/PB06dCAmJoaYmBjOOussmjZtypgxYwJcooiIiMiBVWqMTFJSEpMmTWLVqlX+069btGhB06ZNA1qciIiIyKFUOMgcblXrmTNn+refe+65ylckIiIiUkEVDjI///xzhY5zuVyVLkZERETkSFQ4yJRtcREREREJB5Ua7CsiIiISDhRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLFsDTKzZ8+mT58+pKam4nK5mDhxYrnbLcvi4Ycfpn79+sTGxtKlSxdWrlxpT7EiIiISdmwNMnl5ebRp04axY8ce8PZnnnmGF198kVdffZUFCxZQo0YNunfvzt69e0NcqYiIiISjCDufvGfPnvTs2fOAt1mWxZgxY3jwwQe5+OKLAXj33XepV68eEydO5MorrwxlqSIiIhKGwnaMzJo1a8jMzKRLly7+fYmJibRv35558+Yd9H75+fnk5OSUu4iIiEjVFLZBJjMzE4B69eqV21+vXj3/bQcyatQoEhMT/Ze0tLSg1ikiIiL2CdsgU1n33Xcf2dnZ/suGDRvsLklERESCJGyDTEpKCgBbtmwpt3/Lli3+2w4kOjqahISEchcRERGpmsI2yDRp0oSUlBRmzJjh35eTk8OCBQvo0KGDjZWJiIhIuLD1rKXc3FxWrVrlv75mzRqWLFlCcnIyDRs2ZNiwYTz55JM0a9aMJk2a8NBDD5Gamkrfvn3tK1pERETChq1B5qeffuL888/3Xx8+fDgAAwcOZPz48fzzn/8kLy+PwYMHk5WVxdlnn83UqVOJiYmxq2QREREJIy7Lsiy7iwimnJwcEhMTyc7O1ngZERERh6jo53fYjpERERERORwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcSwFGREREXGssA4yjz76KC6Xq9zlxBNPtLssERERCRMRdhdwOK1atWL69On+6xERYV+yiIiIhEjYp4KIiAhSUlLsLkNERETCUFh3LQGsXLmS1NRUjjvuOK6++mrWr19/yOPz8/PJyckpdxEREZGqKayDTPv27Rk/fjxTp05l3LhxrFmzhnPOOYddu3Yd9D6jRo0iMTHRf0lLSwthxSIiIhJKLsuyLLuLqKisrCwaNWrEc889x4033njAY/Lz88nPz/dfz8nJIS0tjezsbBISEkJVqoiIiByFnJwcEhMTD/v5HfZjZMpKSkrihBNOYNWqVQc9Jjo6mujo6BBWJSIiInYJ666lfeXm5rJ69Wrq169vdykiIiISBsI6yIwYMYL09HTWrl3LDz/8wCWXXILH42HAgAF2lyYiIiJhIKy7lv766y8GDBjAjh07qFOnDmeffTbz58+nTp06dpcmIiIiYSCsg8xHH31kdwkiIiISxsK6a0lERETkUBRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsRRkRERExLEUZERERMSxFGRERETEsSLsLkAOzLIs8ot85OUXsbvAy+4CL3kFRezOL/5ZUMSeAh81oj0cExdFco0okuIiSa4RRWykB5fLZfevICIiEnQKMgFQUORjT0FpwMgrDhtmn5fd+UX+n7sLy1wvPrb0vl7y8ov8131W5eqJjnBzTFwUx9SIIrlGJElxUSQXXz+mOOyU7ovkmLgo4qIUfkRExHkUZCrpia9+57NFf7G7oIhCbyUTRwXFRnqoEe0hLiqCuCgPcVEeakRHEB3hIS+/iJ27C8wlr5ACr4/8Ih+ZOXvJzNlb4eeIinCTHFfaquMPPf4AVByMyhxzsPDj81l4LQuvz8JnWRT5LLOveL/PR/HPsvvK3McHRT4fPsvC68P/OOWOLd4H4Ha5iPC4zE+3G7cbItxuPG4XHreLCLdrn2Nc/tvKHVP22OL9lQl3lmVR6LUo9Poo9Poo8Poo9FoUlVwvOsRtXovCIl+Z282xRWW2S24v8Fp4fT4iPW6iItxER3iIjijZLrl4iI50E+VxF/8sfz06wuM/3v/T41ao3YfPZ/n/b+UXeSko8pmL10eR1/L/HbldJT/xb5fd73G5cLnB49r/eL3mh1fo9ZG9p5Cs3YVk7yko/lmI12f5X0938evsdoHb/xqb17fkdXe5zL9Bye1uF6X3L/tvWHJ/lwu3u/Tf1H9//2PY+7q4XS6iItxEVPI9y+kUZCqp5D9UWVERbmpElQkc0RHlrpeEkRpRHmKjIspdj4suE1KiIoiLNj9jIz24K/i/xLIsdhd4+TuvONjsLmRnXgF/5xWQtbuAv4vDzs7dBaXHFIefgkqGn0i3q1w48Va2GSlMlbzBlXwIlYafkjcNisNJcSDx+YIebENh3zC0b9gp2RflcePxFAe/sh8ibvPhUXafx+Pa7wPcU+aDpmyAdO/zeGX3lf4bmPv4LIv8Qp8/aBQUlf4sKBs8vD7/cSXHHPy28mElFP+mJeGn3O9c5u+v7Aexu8xrG+l2UyPaQ3xMJPHRHuKjI6gRHUHN6AjiY8x2fHQENWMiqBFl9sUX74uPMV+IQm1voZes3YVkFYeRkmBSElKy9hSSvd/theTmF4W8VidxuSDKU/5LSVRE6RedqH32RUW4iS57fMnF49nvmJIvQKXHlH1sN3UTYkiIibTn97YsK+zfdceOHcu///1vMjMzadOmDS+99BJnnHFGhe6bk5NDYmIi2dnZJCQkBKymzOy95BUUFYcPE0IiPc4bO102/GTtLiwOOyUhx4Shv8ts78wzgaigyFfp59w3FJR9s3bv80EXse+H2j4fjlDaulNU0sJTpqWnyFvaKuQ90CVE4avkP36kx0WEp3Q70uM2lwg3UWWv73N7VET520qOdbtdFHkt8ou8ZT7EveU+zPMPsS+/zD6pmPIfFh48bvD68Lca+kpaEB0S8CM9Ln/48Qeew4SfkqBUI9p82crNLyoTQkpbSrJ2FxwwmOQf5d9bQkwEScWtw4mxkf5A6yvzmlv+VuEy/zYW5f59LKu0xbekVbjcMb7iY8o8dtn7Sqkn+p7EtWc2CuhjVvTzO+xbZD7++GOGDx/Oq6++Svv27RkzZgzdu3cnIyODunXr2lZXSmKMbc8dSC6XixrFb0hpyRW7j2VZ7Ck04aekWb00bBR36xRv79usXtHWpVAqecMr+cA5UNgp8h74GMuCyJKQ4XaXbpcJK5Xtogoly7L2aanYPxSZFgtvaetHobm9JCSWdAX6yrxGZbsEvd59uxFLuyF9B3htS+/LQbshS7oUost8S/R/89znW6b5Vukp/4217P32ua20BcpT7rhIT+X+Pfftci37wXqg7lWv/4P0wPtLHqPQ6yMv30tufhF5+UXk5hexa2/pdm5+Ebl7i8grMD93FR+3u8ALQKHXMl9Sdhce5jcILI/bRVJsJIlxkSTFmrF8JdcTY0v37Xt7QmwknjB4H7GKQ4/XZ2Fhb6rx+qwyLZClLYvlWxvLf5kpe8y++/LL3de73+MVFO37XuElLjL0LXslwr5Fpn379rRr146XX34ZAJ/PR1paGrfddhv33nvvYe8frBYZEREn8/osf7jJyzcBp+x2XvH13OJjSoLSrjKhKLf45IT4mAiSYqP2CSHFQaRkO7a0BSUpLpL46IiwD/hiryrRIlNQUMCiRYu47777/PvcbjddunRh3rx5B7xPfn4++fn5/us5OTlBr1NExGk8bhcJMZG2jWsQCZSwHtSxfft2vF4v9erVK7e/Xr16ZGZmHvA+o0aNIjEx0X9JS0sLRakiIiJig7AOMpVx3333kZ2d7b9s2LDB7pJEREQkSMK6a6l27dp4PB62bNlSbv+WLVtISUk54H2io6OJjo4ORXkiIiJis7BukYmKiuL0009nxowZ/n0+n48ZM2bQoUMHGysTERGRcBDWLTIAw4cPZ+DAgbRt25YzzjiDMWPGkJeXx/XXX293aSIiImKzsA8yV1xxBdu2bePhhx8mMzOTU045halTp+43AFhERESqn7CfR+ZoaR4ZERER56no53dYj5ERERERORQFGREREXEsBRkRERFxLAUZERERcSwFGREREXEsBRkRERFxLAUZERERcaywnxDvaJVMk5OTk2NzJSIiIlJRJZ/bh5vursoHmV27dgGQlpZmcyUiIiJypHbt2kViYuJBb6/yM/v6fD42bdpEzZo1cblcAXvcnJwc0tLS2LBhQ7WdMbi6vwbV/fcHvQbV/fcHvQb6/YP3+1uWxa5du0hNTcXtPvhImCrfIuN2u2nQoEHQHj8hIaFa/vGWVd1fg+r++4Neg+r++4NeA/3+wfn9D9USU0KDfUVERMSxFGRERETEsRRkKik6OppHHnmE6Ohou0uxTXV/Dar77w96Dar77w96DfT72//7V/nBviIiIlJ1qUVGREREHEtBRkRERBxLQUZEREQcS0FGREREHEtBppLGjh1L48aNiYmJoX379vz44492lxQSo0aNol27dtSsWZO6devSt29fMjIy7C7LVk899RQul4thw4bZXUrIbNy4kWuuuYZatWoRGxtL69at+emnn+wuK2S8Xi8PPfQQTZo0ITY2luOPP54nnnjisGvCONXs2bPp06cPqampuFwuJk6cWO52y7J4+OGHqV+/PrGxsXTp0oWVK1faU2yQHOo1KCws5J577qF169bUqFGD1NRUrrvuOjZt2mRfwQF2uL+Bsm655RZcLhdjxowJSW0KMpXw8ccfM3z4cB555BEWL15MmzZt6N69O1u3brW7tKBLT09nyJAhzJ8/n2nTplFYWEi3bt3Iy8uzuzRbLFy4kNdee42TTz7Z7lJCZufOnXTs2JHIyEi+/vprfv/9d0aPHs0xxxxjd2kh8/TTTzNu3Dhefvllli9fztNPP80zzzzDSy+9ZHdpQZGXl0ebNm0YO3bsAW9/5plnePHFF3n11VdZsGABNWrUoHv37uzduzfElQbPoV6D3bt3s3jxYh566CEWL17MF198QUZGBhdddJENlQbH4f4GSkyYMIH58+eTmpoaosoAS47YGWecYQ0ZMsR/3ev1WqmpqdaoUaNsrMoeW7dutQArPT3d7lJCbteuXVazZs2sadOmWeedd551xx132F1SSNxzzz3W2WefbXcZturdu7d1ww03lNt36aWXWldffbVNFYUOYE2YMMF/3efzWSkpKda///1v/76srCwrOjra+vDDD22oMPj2fQ0O5Mcff7QAa926daEpKoQO9vv/9ddf1rHHHmstW7bMatSokfX888+HpB61yByhgoICFi1aRJcuXfz73G43Xbp0Yd68eTZWZo/s7GwAkpOTba4k9IYMGULv3r3L/S1UB5MnT6Zt27Zcfvnl1K1bl1NPPZX//Oc/dpcVUmeddRYzZsxgxYoVAPzyyy/MmTOHnj172lxZ6K1Zs4bMzMxy/w8SExNp3759tXxPLJGdnY3L5SIpKcnuUkLC5/Nx7bXXcvfdd9OqVauQPneVXzQy0LZv347X66VevXrl9terV48//vjDpqrs4fP5GDZsGB07duSkk06yu5yQ+uijj1i8eDELFy60u5SQ+/PPPxk3bhzDhw/n/vvvZ+HChdx+++1ERUUxcOBAu8sLiXvvvZecnBxOPPFEPB4PXq+Xf/3rX1x99dV2lxZymZmZAAd8Tyy5rbrZu3cv99xzDwMGDKg2C0k+/fTTREREcPvtt4f8uRVkpNKGDBnCsmXLmDNnjt2lhNSGDRu44447mDZtGjExMXaXE3I+n4+2bdsycuRIAE499VSWLVvGq6++Wm2CzCeffML777/PBx98QKtWrViyZAnDhg0jNTW12rwGcmCFhYX0798fy7IYN26c3eWExKJFi3jhhRdYvHgxLpcr5M+vrqUjVLt2bTweD1u2bCm3f8uWLaSkpNhUVegNHTqUr776ipkzZ9KgQQO7ywmpRYsWsXXrVk477TQiIiKIiIggPT2dF198kYiICLxer90lBlX9+vVp2bJluX0tWrRg/fr1NlUUenfffTf33nsvV155Ja1bt+baa6/lzjvvZNSoUXaXFnIl73vV/T0RSkPMunXrmDZtWrVpjfn+++/ZunUrDRs29L8nrlu3jrvuuovGjRsH/fkVZI5QVFQUp59+OjNmzPDv8/l8zJgxgw4dOthYWWhYlsXQoUOZMGEC3333HU2aNLG7pJDr3Lkzv/76K0uWLPFf2rZty9VXX82SJUvweDx2lxhUHTt23O+U+xUrVtCoUSObKgq93bt343aXf/v0eDz4fD6bKrJPkyZNSElJKfeemJOTw4IFC6rFe2KJkhCzcuVKpk+fTq1atewuKWSuvfZali5dWu49MTU1lbvvvptvvvkm6M+vrqVKGD58OAMHDqRt27acccYZjBkzhry8PK6//nq7Swu6IUOG8MEHHzBp0iRq1qzp7wNPTEwkNjbW5upCo2bNmvuNCapRowa1atWqFmOF7rzzTs466yxGjhxJ//79+fHHH3n99dd5/fXX7S4tZPr06cO//vUvGjZsSKtWrfj555957rnnuOGGG+wuLShyc3NZtWqV//qaNWtYsmQJycnJNGzYkGHDhvHkk0/SrFkzmjRpwkMPPURqaip9+/a1r+gAO9RrUL9+fS677DIWL17MV199hdfr9b83JicnExUVZVfZAXO4v4F9g1tkZCQpKSk0b948+MWF5NyoKuill16yGjZsaEVFRVlnnHGGNX/+fLtLCgnggJe3337b7tJsVZ1Ov7Ysy/ryyy+tk046yYqOjrZOPPFE6/XXX7e7pJDKycmx7rjjDqthw4ZWTEyMddxxx1kPPPCAlZ+fb3dpQTFz5swD/r8fOHCgZVnmFOyHHnrIqlevnhUdHW117tzZysjIsLfoADvUa7BmzZqDvjfOnDnT7tID4nB/A/sK5enXLsuqolNRioiISJWnMTIiIiLiWAoyIiIi4lgKMiIiIuJYCjIiIiLiWAoyIiIi4lgKMiIiIuJYCjIiIiLiWAoyIlLtzJo1C5fLRVZWlt2liMhRUpARERERx1KQEREREcdSkBGRkPP5fIwaNYomTZoQGxtLmzZt+Oyzz4DSbp8pU6Zw8sknExMTw5lnnsmyZcvKPcbnn39Oq1atiI6OpnHjxowePbrc7fn5+dxzzz2kpaURHR1N06ZNefPNN8sds2jRItq2bUtcXBxnnXXWfqt6i0j4U5ARkZAbNWoU7777Lq+++iq//fYbd955J9dccw3p6en+Y+6++25Gjx7NwoULqVOnDn369KGwsBAwAaR///5ceeWV/Prrrzz66KM89NBDjB8/3n//6667jg8//JAXX3yR5cuX89prrxEfH1+ujgceeIDRo0fz008/ERERUWVXrxapyrRopIiEVH5+PsnJyUyfPp0OHTr49990003s3r2bwYMHc/755/PRRx9xxRVXAPD333/ToEEDxo8fT//+/bn66qvZtm0b3377rf/+//znP5kyZQq//fYbK1asoHnz5kybNo0uXbrsV8OsWbM4//zzmT59Op07dwbgf//7H71792bPnj3ExMQE+VUQkUBRi4yIhNSqVavYvXs3Xbt2JT4+3n959913Wb16tf+4siEnOTmZ5s2bs3z5cgCWL19Ox44dyz1ux44dWblyJV6vlyVLluDxeDjvvPMOWcvJJ5/s365fvz4AW7duPerfUURCJ8LuAkSkesnNzQVgypQpHHvsseVui46OLhdmKis2NrZCx0VGRvq3XS4XYMbviIhzqEVGREKqZcuWREdHs379epo2bVrukpaW5j9u/vz5/u2dO3eyYsUKWrRoAUCLFi2YO3duucedO3cuJ5xwAh6Ph9atW+Pz+cqNuRGRqkktMiISUjVr1mTEiBHceeed+Hw+zj77bLKzs5k7dy4JCQk0atQIgMcff5xatWpRr149HnjgAWrXrk3fvn0BuOuuu2jXrh1PPPEEV1xxBfPmzePll1/mlVdeAaBx48YMHDiQG264gRdffJE2bdqwbt06tm7dSv/+/e361UUkCBRkRCTknnjiCerUqcOoUaP4888/SUpK4rTTTuP+++/3d+089dRT3HHHHaxcuZJTTjmFL7/8kqioKABOO+00PvnkEx5++GGeeOIJ6tevz+OPP86gQYP8zzFu3Djuv/9+/u///o8dO3bQsGFD7r//fjt+XREJIp21JCJhpeSMop07d5KUlGR3OSIS5jRGRkRERBxLQUZEREQcS11LIiIi4lhqkRERERHHUpARERERx1KQEREREcdSkBERERHHUpARERERx1KQEREREcdSkBERERHHUpARERERx1KQEREREcf6f0Ne7DT/pWabAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"model.evaluate(test_generator)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "dUDQ-C-N0Ml_",
"outputId": "5bf49b1f-9402-45d7-d576-f4125789824c"
},
"execution_count": 44,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"7/7 [==============================] - 1s 145ms/step - loss: 2.8891 - accuracy: 0.6468\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[2.8890671730041504, 0.646766185760498]"
]
},
"metadata": {},
"execution_count": 44
}
]
},
{
"cell_type": "markdown",
"source": [
"#VGG19"
],
"metadata": {
"id": "btV6aXC5WRom"
}
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"id": "L9wY5gdHWchQ"
},
"outputs": [],
"source": [
"import keras \n",
"from keras.datasets import mnist\n",
"from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D\n",
"from keras.layers import Dense, Flatten\n",
"from keras import optimizers\n",
"from keras.models import Sequential\n",
"from keras.layers import Input, Lambda, Dense, Flatten, Dropout\n",
"from keras.models import Model\n",
"from keras.applications.vgg19 import VGG19\n",
"from keras.preprocessing import image\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"from keras.models import Sequential\n",
"import numpy as np\n",
"from glob import glob\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"source": [
"import pandas as pd\n",
"import os\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"\n",
"\n",
"def append_ext(fn):\n",
" return fn + \".jpg\"\n",
"\n",
"\n",
"traindf = pd.read_csv(\"train/train.csv\", dtype=str)\n",
"testdf = pd.read_csv(\"test/test.csv\", dtype=str)\n",
"traindf[\"img\"] = traindf[\"img\"].apply(append_ext)\n",
"testdf[\"img\"] = testdf[\"img\"].apply(append_ext)\n",
"\n",
"datagen = ImageDataGenerator(rescale=1.0 / 255.0, validation_split=0.10)\n",
"\n",
"train_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"training\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"valid_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"validation\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"test_datagen = ImageDataGenerator(rescale=1.0 / 255.0)\n",
"\n",
"test_generator = test_datagen.flow_from_dataframe(\n",
" dataframe=testdf,\n",
" directory=\"test/test_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" batch_size=32,\n",
" seed=42,\n",
" shuffle=False,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e482e882-76d2-41f8-be8a-428d0fe63584",
"id": "k7SedQcgWchR"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Found 646 validated image filenames belonging to 10 classes.\n",
"Found 71 validated image filenames belonging to 10 classes.\n",
"Found 201 validated image filenames belonging to 10 classes.\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size\n",
"STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size\n",
"STEP_SIZE_TEST=test_generator.n//test_generator.batch_size"
],
"metadata": {
"id": "LSO7fE1OWchS"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"IMAGE_SIZE = [120, 90]\n",
"vgg = VGG19(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)\n",
"#here [3] denotes for RGB images(3 channels)\n",
"\n",
"#don't train existing weights\n",
"for layer in vgg.layers:\n",
" layer.trainable = False\n",
" \n",
"x = Dropout(0.2)(vgg.output)\n",
"x = UpSampling2D()(x)\n",
"x = Conv2D(64, 4, padding = 'same', activation = LeakyReLU())(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = Dropout(0.2)(x)\n",
"x = UpSampling2D()(x)\n",
"x = Conv2D(32, 3, padding = 'same', activation = LeakyReLU())(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = Dropout(0.2)(x)\n",
"x = UpSampling2D()(x)\n",
"x = Conv2D(16, 3, padding = 'same', activation = LeakyReLU())(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = BatchNormalization(synchronized=True)(x)\n",
"x = Dropout(0.2)(x)\n",
"x = Flatten()(x)\n",
"x = Dropout(0.2)(x) # Dropout layer to reduce overfitting\n",
"x = Dense(512, activation='relu')(x)\n",
"x = Dropout(0.2)(x) # Dropout layer to reduce overfitting\n",
"x = Dense(256, activation='relu')(x)\n",
"x = Dropout(0.2)(x) # Dropout layer to reduce overfitting\n",
"prediction = Dense(10, activation='softmax')(x)\n",
"model = Model(inputs=vgg.input, outputs=prediction)\n",
"model.compile(loss='categorical_crossentropy',\n",
" optimizer=optimizers.Adam(),\n",
" metrics=['accuracy'])\n",
"model.summary()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "b5790033-72df-4099-9cb2-aa30451f1d5a",
"id": "29lC7ChCWchR"
},
"execution_count": 49,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Model: \"model_8\"\n",
"_________________________________________________________________\n",
" Layer (type) Output Shape Param # \n",
"=================================================================\n",
" input_10 (InputLayer) [(None, 120, 90, 3)] 0 \n",
" \n",
" block1_conv1 (Conv2D) (None, 120, 90, 64) 1792 \n",
" \n",
" block1_conv2 (Conv2D) (None, 120, 90, 64) 36928 \n",
" \n",
" block1_pool (MaxPooling2D) (None, 60, 45, 64) 0 \n",
" \n",
" block2_conv1 (Conv2D) (None, 60, 45, 128) 73856 \n",
" \n",
" block2_conv2 (Conv2D) (None, 60, 45, 128) 147584 \n",
" \n",
" block2_pool (MaxPooling2D) (None, 30, 22, 128) 0 \n",
" \n",
" block3_conv1 (Conv2D) (None, 30, 22, 256) 295168 \n",
" \n",
" block3_conv2 (Conv2D) (None, 30, 22, 256) 590080 \n",
" \n",
" block3_conv3 (Conv2D) (None, 30, 22, 256) 590080 \n",
" \n",
" block3_conv4 (Conv2D) (None, 30, 22, 256) 590080 \n",
" \n",
" block3_pool (MaxPooling2D) (None, 15, 11, 256) 0 \n",
" \n",
" block4_conv1 (Conv2D) (None, 15, 11, 512) 1180160 \n",
" \n",
" block4_conv2 (Conv2D) (None, 15, 11, 512) 2359808 \n",
" \n",
" block4_conv3 (Conv2D) (None, 15, 11, 512) 2359808 \n",
" \n",
" block4_conv4 (Conv2D) (None, 15, 11, 512) 2359808 \n",
" \n",
" block4_pool (MaxPooling2D) (None, 7, 5, 512) 0 \n",
" \n",
" block5_conv1 (Conv2D) (None, 7, 5, 512) 2359808 \n",
" \n",
" block5_conv2 (Conv2D) (None, 7, 5, 512) 2359808 \n",
" \n",
" block5_conv3 (Conv2D) (None, 7, 5, 512) 2359808 \n",
" \n",
" block5_conv4 (Conv2D) (None, 7, 5, 512) 2359808 \n",
" \n",
" block5_pool (MaxPooling2D) (None, 3, 2, 512) 0 \n",
" \n",
" dropout_57 (Dropout) (None, 3, 2, 512) 0 \n",
" \n",
" up_sampling2d_25 (UpSamplin (None, 6, 4, 512) 0 \n",
" g2D) \n",
" \n",
" conv2d_25 (Conv2D) (None, 6, 4, 64) 524352 \n",
" \n",
" batch_normalization_46 (Bat (None, 6, 4, 64) 256 \n",
" chNormalization) \n",
" \n",
" batch_normalization_47 (Bat (None, 6, 4, 64) 256 \n",
" chNormalization) \n",
" \n",
" batch_normalization_48 (Bat (None, 6, 4, 64) 256 \n",
" chNormalization) \n",
" \n",
" dropout_58 (Dropout) (None, 6, 4, 64) 0 \n",
" \n",
" up_sampling2d_26 (UpSamplin (None, 12, 8, 64) 0 \n",
" g2D) \n",
" \n",
" conv2d_26 (Conv2D) (None, 12, 8, 32) 18464 \n",
" \n",
" batch_normalization_49 (Bat (None, 12, 8, 32) 128 \n",
" chNormalization) \n",
" \n",
" batch_normalization_50 (Bat (None, 12, 8, 32) 128 \n",
" chNormalization) \n",
" \n",
" batch_normalization_51 (Bat (None, 12, 8, 32) 128 \n",
" chNormalization) \n",
" \n",
" dropout_59 (Dropout) (None, 12, 8, 32) 0 \n",
" \n",
" up_sampling2d_27 (UpSamplin (None, 24, 16, 32) 0 \n",
" g2D) \n",
" \n",
" conv2d_27 (Conv2D) (None, 24, 16, 16) 4624 \n",
" \n",
" batch_normalization_52 (Bat (None, 24, 16, 16) 64 \n",
" chNormalization) \n",
" \n",
" batch_normalization_53 (Bat (None, 24, 16, 16) 64 \n",
" chNormalization) \n",
" \n",
" batch_normalization_54 (Bat (None, 24, 16, 16) 64 \n",
" chNormalization) \n",
" \n",
" dropout_60 (Dropout) (None, 24, 16, 16) 0 \n",
" \n",
" flatten_8 (Flatten) (None, 6144) 0 \n",
" \n",
" dropout_61 (Dropout) (None, 6144) 0 \n",
" \n",
" dense_24 (Dense) (None, 512) 3146240 \n",
" \n",
" dropout_62 (Dropout) (None, 512) 0 \n",
" \n",
" dense_25 (Dense) (None, 256) 131328 \n",
" \n",
" dropout_63 (Dropout) (None, 256) 0 \n",
" \n",
" dense_26 (Dense) (None, 10) 2570 \n",
" \n",
"=================================================================\n",
"Total params: 23,853,306\n",
"Trainable params: 3,828,250\n",
"Non-trainable params: 20,025,056\n",
"_________________________________________________________________\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from datetime import datetime\n",
"from keras.callbacks import ModelCheckpoint, LearningRateScheduler\n",
"from keras.callbacks import ReduceLROnPlateau\n",
"lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1),\n",
" cooldown=0,\n",
" patience=5,\n",
" min_lr=0.5e-6)\n",
"checkpoint = ModelCheckpoint(filepath='mymodel.h5', \n",
" verbose=1, save_best_only=True)\n",
"callbacks = [checkpoint, lr_reducer]\n",
"start = datetime.now()\n",
"history = model.fit(train_generator, \n",
" steps_per_epoch=STEP_SIZE_TRAIN, \n",
" epochs=15,\n",
" validation_data=valid_generator, \n",
" validation_steps=STEP_SIZE_VALID)\n",
"\n",
"duration = datetime.now() - start\n",
"print(\"Training completed in time: \", duration)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "efa3700c-2e4b-4447-ddf5-2f891a243404",
"id": "8v_HjkQCWchS"
},
"execution_count": 50,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/15\n",
"20/20 [==============================] - 9s 290ms/step - loss: 2.8833 - accuracy: 0.1417 - val_loss: 9.0324 - val_accuracy: 0.0000e+00\n",
"Epoch 2/15\n",
"20/20 [==============================] - 5s 216ms/step - loss: 2.2380 - accuracy: 0.2394 - val_loss: 13.0770 - val_accuracy: 0.0000e+00\n",
"Epoch 3/15\n",
"20/20 [==============================] - 5s 278ms/step - loss: 1.8971 - accuracy: 0.3583 - val_loss: 6.4632 - val_accuracy: 0.0000e+00\n",
"Epoch 4/15\n",
"20/20 [==============================] - 4s 200ms/step - loss: 1.6592 - accuracy: 0.4300 - val_loss: 8.8580 - val_accuracy: 0.0000e+00\n",
"Epoch 5/15\n",
"20/20 [==============================] - 5s 238ms/step - loss: 1.5036 - accuracy: 0.5098 - val_loss: 6.4527 - val_accuracy: 0.0000e+00\n",
"Epoch 6/15\n",
"20/20 [==============================] - 4s 198ms/step - loss: 1.3978 - accuracy: 0.4886 - val_loss: 12.2493 - val_accuracy: 0.0000e+00\n",
"Epoch 7/15\n",
"20/20 [==============================] - 4s 192ms/step - loss: 1.1404 - accuracy: 0.5847 - val_loss: 10.4648 - val_accuracy: 0.0000e+00\n",
"Epoch 8/15\n",
"20/20 [==============================] - 4s 198ms/step - loss: 1.0030 - accuracy: 0.6580 - val_loss: 8.7465 - val_accuracy: 0.0000e+00\n",
"Epoch 9/15\n",
"20/20 [==============================] - 4s 188ms/step - loss: 0.9164 - accuracy: 0.6906 - val_loss: 8.7621 - val_accuracy: 0.0000e+00\n",
"Epoch 10/15\n",
"20/20 [==============================] - 5s 240ms/step - loss: 0.8577 - accuracy: 0.7036 - val_loss: 11.5887 - val_accuracy: 0.0000e+00\n",
"Epoch 11/15\n",
"20/20 [==============================] - 4s 199ms/step - loss: 0.8916 - accuracy: 0.6906 - val_loss: 7.0531 - val_accuracy: 0.0000e+00\n",
"Epoch 12/15\n",
"20/20 [==============================] - 4s 194ms/step - loss: 0.7821 - accuracy: 0.7215 - val_loss: 12.8196 - val_accuracy: 0.0000e+00\n",
"Epoch 13/15\n",
"20/20 [==============================] - 5s 225ms/step - loss: 0.7138 - accuracy: 0.7655 - val_loss: 13.0894 - val_accuracy: 0.0000e+00\n",
"Epoch 14/15\n",
"20/20 [==============================] - 4s 192ms/step - loss: 0.5326 - accuracy: 0.8306 - val_loss: 7.8650 - val_accuracy: 0.0000e+00\n",
"Epoch 15/15\n",
"20/20 [==============================] - 4s 193ms/step - loss: 0.5369 - accuracy: 0.8143 - val_loss: 9.2648 - val_accuracy: 0.0000e+00\n",
"Training completed in time: 0:01:18.608565\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# list all data in history\n",
"print(history.history.keys())\n",
"# summarize history for accuracy\n",
"plt.plot(history.history['accuracy'])\n",
"plt.plot(history.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()\n",
"# summarize history for loss\n",
"plt.plot(history.history['loss'])\n",
"plt.plot(history.history['val_loss'])\n",
"plt.title('model loss')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 944
},
"outputId": "19cb6d10-6224-4501-b02c-27776618cac4",
"id": "z_nhcMX2WchS"
},
"execution_count": 51,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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l/DPlXSYyqT4MjQAthYKsUsiIiLSeww3NeTn6Jv48p/rAICF/f3Q3Fn8fayIiIgMAcNNDTidmIkp284BAN553hsvt3ISuSIiIiLDwXCjYynZhRi97gSKSzUIbuaACcGNxS6JiIjIoDDc6FBhiRr/+z4aqTlF8LG3wGcD/WBkxK0ViIiIahPDjY4IgoBp22JwOjETSlMZvgoLgKWJTOyyiIiIDA7DjY5sib6Jn0/ehJEEWPF6W3jYmotdEhERkUEyFrsAffGSrxN2X0hBUENbdPZRiV0OERGRwWK40RELhTFWDfWHhENsiIiIRMVwo0McPExERCQ+jrkhIiIivcJwQ0RERHqF4YaIiIj0CsMNERER6RWGGyIiItIrDDdERESkVxhuiIiISK8w3BAREZFeYbghIiIivcJwQ0RERHqF4YaIiIj0CsMNERER6RWGGyIiItIrDDdERESkVxhuiIiISK8w3BAREZFeYbghIiIivcJwQ0RERHqF4YaIiIj0CsMNERER6RWGGyIiItIrDDdERESkVxhuiIiISK8w3BAREZFeYbghIiIivcJwQ0RERHqF4YaIiIj0CsMNERER6RWGGyIiItIrDDdERESkVxhuiIiISK8w3BAREZFeYbghIiIivcJwQ0RERHqF4YaIiIj0CsMNERER6RWGGyIiItIrDDdERESkVxhuiIiISK8w3BAREZFeYbghIiIivcJwQ0RERHqF4YaIiIj0CsMNERER6RWGGyIiItIrDDdERESkVxhuiIiISK8w3BAREZFeYbghIiIivcJwQ0RERHqlToSbFStWwNPTEyYmJggKCsKxY8ceef7mzZvRtGlTmJiYwNfXF7///nstVUpERER1nejhZuPGjQgPD8esWbNw8uRJ+Pn5ISQkBKmpqZWef/jwYQwePBhvvPEGTp06hd69e6N3796IiYmp5cqJiIioLpIIgiCIWUBQUBACAwOxfPlyAIBGo4GbmxveeecdTJ48ucL5AwcORF5eHn777Tftsfbt26N169ZYtWrVY58vOzsbSqUSWVlZsLKy0t2NCAJQkq+7xyMiIqrPZGaARKKzh6vK57exzp61GoqLixEdHY0pU6ZojxkZGSE4OBhRUVGVXhMVFYXw8PByx0JCQrB9+/ZKzy8qKkJRUZH2++zs7KcvvDIl+cBc55p5bCIiovpm6i1Abi7KU4va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\n"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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TmR+/fXXZt1Op9O1OhgiIiKilmh2IlN7xIWIiIhIDVihSERERJrFRIaIiIg0S/WJTGZmJu666y5ERkYiMDAQqamp2LVrl9JhERERkQqoel/1goICDB8+HFdddRVWr16N6OhoHD16FO3a+ei+JURERFSHqhOZBQsWICkpCcuXL3dclpKSomBEREREpCaqnlpauXIlBg4ciNtuuw0xMTEYMGAA3nnnHaXDIiIiIpVQdSJz4sQJLFu2DF27dsUPP/yABx98ENOnT8cHH3zQ6H0sFguKi4vrnIiIiMg7talFgbsZjUYMHDgQv/zyi+Oy6dOnY+fOndi6dWuD93nuuecwZ86cepezRQEREZF2NLdFgapHZOLj49GrV686l/Xs2RPp6emN3ufJJ59EUVGR45SRkeHuMImIiEghqi72HT58OI4cOVLnsrS0NHTo0KHR+5hMJphMJneHRkRERCqg6hGZRx55BNu2bcO8efNw7NgxfPzxx3j77bcxdepUpUMjIiIiFVB1IjNo0CCsWLECn3zyCfr06YO5c+di8eLFmDhxotKhERERkQqoutjXFZpbLERERETq4RXFvkREREQXw0SGiIiINIuJDBEREWkWExkiIiLSLCYyREREpFlMZIiIiEizmMgQERGRZjGRISIiIs1iIkNERESaxUSGiIiINIuJDBEREWkWExkiIiLSLCYyREREpFlMZIiIiEizmMgQERGRZjGRISIiIs1iIkNERESaxUSGiIiINIuJDBEREWkWExkiIiLSLCYyREREpFlMZIiIiEizmMgQERGRZjGRISIiIs1iIkNERESaxUSGiIiINIuJDBEREWkWExkiIiLSLCYyREREpFlMZIiIiEizmMgQERGRZjGRISIiIs1iIkNERESaxUSGiIiINIuJDBEREWkWExkiIiLSLCYyREREpFlMZIiIiEizmMgQERGRZjGRISIiIs1iIkNERESaxUSGiIiINIuJDBEREWmWphKZl156CTqdDjNmzFA6FCIiIlIBzSQyO3fuxFtvvYW+ffsqHQoRERGphCYSmdLSUkycOBHvvPMO2rVrp3Q4REREpBKaSGSmTp2KG2+8EaNGjWrythaLBcXFxXVORERE5J0MSgfQlE8//RR79uzBzp07m3X7+fPnY86cOW6OioiIiNRA1SMyGRkZePjhh/HRRx8hICCgWfd58skn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CgoKMHz4cPj7+2P16tX4/fffsWjRIrRr107p0DxmwYIFWLZsGV5//XUcOnQICxYswMKFC/Haa68pHZpblJWVoV+/fli6dGmD1y9cuBBLlizBm2++ie3btyM4OBijR49GZWWlhyN1n4v9DsrLy7Fnzx7Mnj0be/bswVdffYUjR45g7NixCkTqHk29B2QrVqzAtm3bmmwr4FIStdjgwYOlqVOnOn62Wq1SQkKCNH/+fAWjUkZubq4EQNq4caPSoXhcSUmJ1LVrV2nNmjXSyJEjpYcffljpkDxi1qxZ0ogRI5QOQ1E33nijdN9999W57JZbbpEmTpyoUESeA0BasWKF42ebzSbFxcVJ//znPx2XFRYWSiaTSfrkk08UiND9LvwdNGTHjh0SAOn06dOeCcqDGnv9Z86ckdq3by8dOHBA6tChg/TKK694JB6OyLRQVVUVdu/ejVGjRjku8/Pzw6hRo7B161YFI1NGUVERACAiIkLhSDxv6tSpuPHGG+u8F3zBypUrMXDgQNx2222IiYnBgAED8M477ygdlkcNGzYM69atQ1paGgBg37592Lx5M66//nqFI/O8kydPIicnp87/A7PZjCFDhvjkZ6KsqKgIOp0O4eHhSofiETabDXfffTcef/xx9O7d26PPrYleS2qSn58Pq9Var2llbGwsDh8+rFBUyrDZbJgxYwaGDx+OPn36KB2OR3366afYs2cPdu7cqXQoHnfixAksW7YMM2fOxFNPPYWdO3di+vTpMBqNmDRpktLhecQTTzyB4uJi9OjRA3q9HlarFS+++CImTpyodGgel5OTAwANfibK1/mayspKzJo1C3feeafPNJJcsGABDAYDpk+f7vHnZiJDrTZ16lQcOHAAmzdvVjoUj8rIyMDDDz+MNWvWICAgQOlwPM5ms2HgwIGYN28eAGDAgAE4cOAA3nzzTZ9JZD7//HN89NFH+Pjjj9G7d2/s3bsXM2bMQEJCgs/8Dqhh1dXVmDBhAiRJwrJly5QOxyN2796NV199FXv27IFOp/P483NqqYWioqKg1+tx9uzZOpefPXsWcXFxCkXledOmTcN3332H9evXIzExUelwPGr37t3Izc3FJZdcAoPBAIPBgI0bN2LJkiUwGAywWq1Kh+hW8fHx6NWrV53LevbsifT0dIUi8rzHH38cTzzxBO644w6kpqbi7rvvxiOP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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"model.evaluate(test_generator)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "3cb3988a-01e1-487a-82c8-2f8d7800b654",
"id": "OgtThJ0eWchS"
},
"execution_count": 52,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"7/7 [==============================] - 1s 203ms/step - loss: 2.2792 - accuracy: 0.5672\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[2.2791824340820312, 0.5671641826629639]"
]
},
"metadata": {},
"execution_count": 52
}
]
},
{
"cell_type": "markdown",
"source": [
"#ResNet-50"
],
"metadata": {
"id": "lHRHjK0tW1hm"
}
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"id": "rXpQXzJtZpe_"
},
"outputs": [],
"source": [
"import keras \n",
"from keras.datasets import mnist\n",
"from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D\n",
"from keras.layers import Dense, Flatten\n",
"from keras import optimizers\n",
"from keras.models import Sequential\n",
"from keras.layers import Input, Lambda, Dense, Flatten, Dropout\n",
"from keras.models import Model\n",
"from tensorflow.keras.applications.resnet50 import ResNet50\n",
"from keras.preprocessing import image\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"from keras.models import Sequential\n",
"import numpy as np\n",
"from glob import glob\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"source": [
"import pandas as pd\n",
"import os\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"\n",
"\n",
"def append_ext(fn):\n",
" return fn + \".jpg\"\n",
"\n",
"\n",
"traindf = pd.read_csv(\"train/train.csv\", dtype=str)\n",
"testdf = pd.read_csv(\"test/test.csv\", dtype=str)\n",
"traindf[\"img\"] = traindf[\"img\"].apply(append_ext)\n",
"testdf[\"img\"] = testdf[\"img\"].apply(append_ext)\n",
"\n",
"datagen = ImageDataGenerator(rescale=1.0 / 255.0, validation_split=0.10)\n",
"\n",
"train_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"training\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"valid_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"validation\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"test_datagen = ImageDataGenerator(rescale=1.0 / 255.0)\n",
"\n",
"test_generator = test_datagen.flow_from_dataframe(\n",
" dataframe=testdf,\n",
" directory=\"test/test_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" batch_size=32,\n",
" seed=42,\n",
" shuffle=False,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "lQQWIcMCZpfA",
"outputId": "a958ad7b-18f2-430c-b277-d76c79812912"
},
"execution_count": 54,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Found 646 validated image filenames belonging to 10 classes.\n",
"Found 71 validated image filenames belonging to 10 classes.\n",
"Found 201 validated image filenames belonging to 10 classes.\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size\n",
"STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size\n",
"STEP_SIZE_TEST=test_generator.n//test_generator.batch_size"
],
"metadata": {
"id": "IxqHWVtBZpfA"
},
"execution_count": 55,
"outputs": []
},
{
"cell_type": "code",
"source": [
"IMAGE_SIZE = [120, 90]\n",
"resnet = ResNet50(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)\n",
"#here [3] denotes for RGB images(3 channels)\n",
"\n",
"#don't train existing weights\n",
"for layer in resnet.layers[:15]:\n",
" layer.trainable = False\n",
" \n",
"x = Flatten()(resnet.output)\n",
"x = Dense(512, activation='relu')(x)\n",
"x = Dropout(0.5)(x) # Dropout layer to reduce overfitting\n",
"x = Dense(256, activation='relu')(x)\n",
"x = Dropout(0.5)(x) # Dropout layer to reduce overfitting\n",
"prediction = Dense(10, activation='softmax')(x)\n",
"model = Model(inputs=resnet.input, outputs=prediction)\n",
"model.compile(loss='categorical_crossentropy',\n",
" optimizer=optimizers.Adam(),\n",
" metrics=['accuracy'])\n",
"model.summary()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "p0lxQeEIZpfA",
"outputId": "6931a97e-6f8a-4266-862f-5397ccd9c872"
},
"execution_count": 56,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
"94765736/94765736 [==============================] - 0s 0us/step\n",
"Model: \"model_9\"\n",
"__________________________________________________________________________________________________\n",
" Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
" input_11 (InputLayer) [(None, 120, 90, 3) 0 [] \n",
" ] \n",
" \n",
" conv1_pad (ZeroPadding2D) (None, 126, 96, 3) 0 ['input_11[0][0]'] \n",
" \n",
" conv1_conv (Conv2D) (None, 60, 45, 64) 9472 ['conv1_pad[0][0]'] \n",
" \n",
" conv1_bn (BatchNormalization) (None, 60, 45, 64) 256 ['conv1_conv[0][0]'] \n",
" \n",
" conv1_relu (Activation) (None, 60, 45, 64) 0 ['conv1_bn[0][0]'] \n",
" \n",
" pool1_pad (ZeroPadding2D) (None, 62, 47, 64) 0 ['conv1_relu[0][0]'] \n",
" \n",
" pool1_pool (MaxPooling2D) (None, 30, 23, 64) 0 ['pool1_pad[0][0]'] \n",
" \n",
" conv2_block1_1_conv (Conv2D) (None, 30, 23, 64) 4160 ['pool1_pool[0][0]'] \n",
" \n",
" conv2_block1_1_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block1_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block1_1_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block1_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block1_2_conv (Conv2D) (None, 30, 23, 64) 36928 ['conv2_block1_1_relu[0][0]'] \n",
" \n",
" conv2_block1_2_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block1_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block1_2_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block1_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block1_0_conv (Conv2D) (None, 30, 23, 256) 16640 ['pool1_pool[0][0]'] \n",
" \n",
" conv2_block1_3_conv (Conv2D) (None, 30, 23, 256) 16640 ['conv2_block1_2_relu[0][0]'] \n",
" \n",
" conv2_block1_0_bn (BatchNormal (None, 30, 23, 256) 1024 ['conv2_block1_0_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block1_3_bn (BatchNormal (None, 30, 23, 256) 1024 ['conv2_block1_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block1_add (Add) (None, 30, 23, 256) 0 ['conv2_block1_0_bn[0][0]', \n",
" 'conv2_block1_3_bn[0][0]'] \n",
" \n",
" conv2_block1_out (Activation) (None, 30, 23, 256) 0 ['conv2_block1_add[0][0]'] \n",
" \n",
" conv2_block2_1_conv (Conv2D) (None, 30, 23, 64) 16448 ['conv2_block1_out[0][0]'] \n",
" \n",
" conv2_block2_1_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block2_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block2_1_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block2_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block2_2_conv (Conv2D) (None, 30, 23, 64) 36928 ['conv2_block2_1_relu[0][0]'] \n",
" \n",
" conv2_block2_2_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block2_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block2_2_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block2_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block2_3_conv (Conv2D) (None, 30, 23, 256) 16640 ['conv2_block2_2_relu[0][0]'] \n",
" \n",
" conv2_block2_3_bn (BatchNormal (None, 30, 23, 256) 1024 ['conv2_block2_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block2_add (Add) (None, 30, 23, 256) 0 ['conv2_block1_out[0][0]', \n",
" 'conv2_block2_3_bn[0][0]'] \n",
" \n",
" conv2_block2_out (Activation) (None, 30, 23, 256) 0 ['conv2_block2_add[0][0]'] \n",
" \n",
" conv2_block3_1_conv (Conv2D) (None, 30, 23, 64) 16448 ['conv2_block2_out[0][0]'] \n",
" \n",
" conv2_block3_1_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block3_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block3_1_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block3_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block3_2_conv (Conv2D) (None, 30, 23, 64) 36928 ['conv2_block3_1_relu[0][0]'] \n",
" \n",
" conv2_block3_2_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block3_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block3_2_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block3_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block3_3_conv (Conv2D) (None, 30, 23, 256) 16640 ['conv2_block3_2_relu[0][0]'] \n",
" \n",
" conv2_block3_3_bn (BatchNormal (None, 30, 23, 256) 1024 ['conv2_block3_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block3_add (Add) (None, 30, 23, 256) 0 ['conv2_block2_out[0][0]', \n",
" 'conv2_block3_3_bn[0][0]'] \n",
" \n",
" conv2_block3_out (Activation) (None, 30, 23, 256) 0 ['conv2_block3_add[0][0]'] \n",
" \n",
" conv3_block1_1_conv (Conv2D) (None, 15, 12, 128) 32896 ['conv2_block3_out[0][0]'] \n",
" \n",
" conv3_block1_1_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block1_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block1_1_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block1_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block1_2_conv (Conv2D) (None, 15, 12, 128) 147584 ['conv3_block1_1_relu[0][0]'] \n",
" \n",
" conv3_block1_2_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block1_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block1_2_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block1_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block1_0_conv (Conv2D) (None, 15, 12, 512) 131584 ['conv2_block3_out[0][0]'] \n",
" \n",
" conv3_block1_3_conv (Conv2D) (None, 15, 12, 512) 66048 ['conv3_block1_2_relu[0][0]'] \n",
" \n",
" conv3_block1_0_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block1_0_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block1_3_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block1_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block1_add (Add) (None, 15, 12, 512) 0 ['conv3_block1_0_bn[0][0]', \n",
" 'conv3_block1_3_bn[0][0]'] \n",
" \n",
" conv3_block1_out (Activation) (None, 15, 12, 512) 0 ['conv3_block1_add[0][0]'] \n",
" \n",
" conv3_block2_1_conv (Conv2D) (None, 15, 12, 128) 65664 ['conv3_block1_out[0][0]'] \n",
" \n",
" conv3_block2_1_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block2_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block2_1_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block2_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block2_2_conv (Conv2D) (None, 15, 12, 128) 147584 ['conv3_block2_1_relu[0][0]'] \n",
" \n",
" conv3_block2_2_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block2_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block2_2_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block2_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block2_3_conv (Conv2D) (None, 15, 12, 512) 66048 ['conv3_block2_2_relu[0][0]'] \n",
" \n",
" conv3_block2_3_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block2_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block2_add (Add) (None, 15, 12, 512) 0 ['conv3_block1_out[0][0]', \n",
" 'conv3_block2_3_bn[0][0]'] \n",
" \n",
" conv3_block2_out (Activation) (None, 15, 12, 512) 0 ['conv3_block2_add[0][0]'] \n",
" \n",
" conv3_block3_1_conv (Conv2D) (None, 15, 12, 128) 65664 ['conv3_block2_out[0][0]'] \n",
" \n",
" conv3_block3_1_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block3_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block3_1_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block3_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block3_2_conv (Conv2D) (None, 15, 12, 128) 147584 ['conv3_block3_1_relu[0][0]'] \n",
" \n",
" conv3_block3_2_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block3_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block3_2_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block3_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block3_3_conv (Conv2D) (None, 15, 12, 512) 66048 ['conv3_block3_2_relu[0][0]'] \n",
" \n",
" conv3_block3_3_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block3_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block3_add (Add) (None, 15, 12, 512) 0 ['conv3_block2_out[0][0]', \n",
" 'conv3_block3_3_bn[0][0]'] \n",
" \n",
" conv3_block3_out (Activation) (None, 15, 12, 512) 0 ['conv3_block3_add[0][0]'] \n",
" \n",
" conv3_block4_1_conv (Conv2D) (None, 15, 12, 128) 65664 ['conv3_block3_out[0][0]'] \n",
" \n",
" conv3_block4_1_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block4_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block4_1_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block4_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block4_2_conv (Conv2D) (None, 15, 12, 128) 147584 ['conv3_block4_1_relu[0][0]'] \n",
" \n",
" conv3_block4_2_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block4_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block4_2_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block4_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block4_3_conv (Conv2D) (None, 15, 12, 512) 66048 ['conv3_block4_2_relu[0][0]'] \n",
" \n",
" conv3_block4_3_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block4_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block4_add (Add) (None, 15, 12, 512) 0 ['conv3_block3_out[0][0]', \n",
" 'conv3_block4_3_bn[0][0]'] \n",
" \n",
" conv3_block4_out (Activation) (None, 15, 12, 512) 0 ['conv3_block4_add[0][0]'] \n",
" \n",
" conv4_block1_1_conv (Conv2D) (None, 8, 6, 256) 131328 ['conv3_block4_out[0][0]'] \n",
" \n",
" conv4_block1_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block1_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block1_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block1_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block1_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block1_1_relu[0][0]'] \n",
" \n",
" conv4_block1_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block1_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block1_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block1_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block1_0_conv (Conv2D) (None, 8, 6, 1024) 525312 ['conv3_block4_out[0][0]'] \n",
" \n",
" conv4_block1_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block1_2_relu[0][0]'] \n",
" \n",
" conv4_block1_0_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block1_0_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block1_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block1_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block1_add (Add) (None, 8, 6, 1024) 0 ['conv4_block1_0_bn[0][0]', \n",
" 'conv4_block1_3_bn[0][0]'] \n",
" \n",
" conv4_block1_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block1_add[0][0]'] \n",
" \n",
" conv4_block2_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block1_out[0][0]'] \n",
" \n",
" conv4_block2_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block2_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block2_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block2_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block2_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block2_1_relu[0][0]'] \n",
" \n",
" conv4_block2_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block2_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block2_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block2_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block2_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block2_2_relu[0][0]'] \n",
" \n",
" conv4_block2_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block2_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block2_add (Add) (None, 8, 6, 1024) 0 ['conv4_block1_out[0][0]', \n",
" 'conv4_block2_3_bn[0][0]'] \n",
" \n",
" conv4_block2_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block2_add[0][0]'] \n",
" \n",
" conv4_block3_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block2_out[0][0]'] \n",
" \n",
" conv4_block3_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block3_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block3_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block3_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block3_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block3_1_relu[0][0]'] \n",
" \n",
" conv4_block3_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block3_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block3_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block3_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block3_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block3_2_relu[0][0]'] \n",
" \n",
" conv4_block3_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block3_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block3_add (Add) (None, 8, 6, 1024) 0 ['conv4_block2_out[0][0]', \n",
" 'conv4_block3_3_bn[0][0]'] \n",
" \n",
" conv4_block3_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block3_add[0][0]'] \n",
" \n",
" conv4_block4_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block3_out[0][0]'] \n",
" \n",
" conv4_block4_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block4_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block4_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block4_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block4_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block4_1_relu[0][0]'] \n",
" \n",
" conv4_block4_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block4_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block4_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block4_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block4_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block4_2_relu[0][0]'] \n",
" \n",
" conv4_block4_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block4_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block4_add (Add) (None, 8, 6, 1024) 0 ['conv4_block3_out[0][0]', \n",
" 'conv4_block4_3_bn[0][0]'] \n",
" \n",
" conv4_block4_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block4_add[0][0]'] \n",
" \n",
" conv4_block5_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block4_out[0][0]'] \n",
" \n",
" conv4_block5_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block5_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block5_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block5_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block5_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block5_1_relu[0][0]'] \n",
" \n",
" conv4_block5_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block5_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block5_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block5_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block5_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block5_2_relu[0][0]'] \n",
" \n",
" conv4_block5_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block5_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block5_add (Add) (None, 8, 6, 1024) 0 ['conv4_block4_out[0][0]', \n",
" 'conv4_block5_3_bn[0][0]'] \n",
" \n",
" conv4_block5_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block5_add[0][0]'] \n",
" \n",
" conv4_block6_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block5_out[0][0]'] \n",
" \n",
" conv4_block6_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block6_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block6_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block6_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block6_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block6_1_relu[0][0]'] \n",
" \n",
" conv4_block6_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block6_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block6_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block6_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block6_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block6_2_relu[0][0]'] \n",
" \n",
" conv4_block6_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block6_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block6_add (Add) (None, 8, 6, 1024) 0 ['conv4_block5_out[0][0]', \n",
" 'conv4_block6_3_bn[0][0]'] \n",
" \n",
" conv4_block6_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block6_add[0][0]'] \n",
" \n",
" conv5_block1_1_conv (Conv2D) (None, 4, 3, 512) 524800 ['conv4_block6_out[0][0]'] \n",
" \n",
" conv5_block1_1_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block1_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block1_1_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block1_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block1_2_conv (Conv2D) (None, 4, 3, 512) 2359808 ['conv5_block1_1_relu[0][0]'] \n",
" \n",
" conv5_block1_2_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block1_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block1_2_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block1_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block1_0_conv (Conv2D) (None, 4, 3, 2048) 2099200 ['conv4_block6_out[0][0]'] \n",
" \n",
" conv5_block1_3_conv (Conv2D) (None, 4, 3, 2048) 1050624 ['conv5_block1_2_relu[0][0]'] \n",
" \n",
" conv5_block1_0_bn (BatchNormal (None, 4, 3, 2048) 8192 ['conv5_block1_0_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block1_3_bn (BatchNormal (None, 4, 3, 2048) 8192 ['conv5_block1_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block1_add (Add) (None, 4, 3, 2048) 0 ['conv5_block1_0_bn[0][0]', \n",
" 'conv5_block1_3_bn[0][0]'] \n",
" \n",
" conv5_block1_out (Activation) (None, 4, 3, 2048) 0 ['conv5_block1_add[0][0]'] \n",
" \n",
" conv5_block2_1_conv (Conv2D) (None, 4, 3, 512) 1049088 ['conv5_block1_out[0][0]'] \n",
" \n",
" conv5_block2_1_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block2_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block2_1_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block2_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block2_2_conv (Conv2D) (None, 4, 3, 512) 2359808 ['conv5_block2_1_relu[0][0]'] \n",
" \n",
" conv5_block2_2_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block2_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block2_2_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block2_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block2_3_conv (Conv2D) (None, 4, 3, 2048) 1050624 ['conv5_block2_2_relu[0][0]'] \n",
" \n",
" conv5_block2_3_bn (BatchNormal (None, 4, 3, 2048) 8192 ['conv5_block2_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block2_add (Add) (None, 4, 3, 2048) 0 ['conv5_block1_out[0][0]', \n",
" 'conv5_block2_3_bn[0][0]'] \n",
" \n",
" conv5_block2_out (Activation) (None, 4, 3, 2048) 0 ['conv5_block2_add[0][0]'] \n",
" \n",
" conv5_block3_1_conv (Conv2D) (None, 4, 3, 512) 1049088 ['conv5_block2_out[0][0]'] \n",
" \n",
" conv5_block3_1_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block3_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block3_1_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block3_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block3_2_conv (Conv2D) (None, 4, 3, 512) 2359808 ['conv5_block3_1_relu[0][0]'] \n",
" \n",
" conv5_block3_2_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block3_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block3_2_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block3_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block3_3_conv (Conv2D) (None, 4, 3, 2048) 1050624 ['conv5_block3_2_relu[0][0]'] \n",
" \n",
" conv5_block3_3_bn (BatchNormal (None, 4, 3, 2048) 8192 ['conv5_block3_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block3_add (Add) (None, 4, 3, 2048) 0 ['conv5_block2_out[0][0]', \n",
" 'conv5_block3_3_bn[0][0]'] \n",
" \n",
" conv5_block3_out (Activation) (None, 4, 3, 2048) 0 ['conv5_block3_add[0][0]'] \n",
" \n",
" flatten_9 (Flatten) (None, 24576) 0 ['conv5_block3_out[0][0]'] \n",
" \n",
" dense_27 (Dense) (None, 512) 12583424 ['flatten_9[0][0]'] \n",
" \n",
" dropout_64 (Dropout) (None, 512) 0 ['dense_27[0][0]'] \n",
" \n",
" dense_28 (Dense) (None, 256) 131328 ['dropout_64[0][0]'] \n",
" \n",
" dropout_65 (Dropout) (None, 256) 0 ['dense_28[0][0]'] \n",
" \n",
" dense_29 (Dense) (None, 10) 2570 ['dropout_65[0][0]'] \n",
" \n",
"==================================================================================================\n",
"Total params: 36,305,034\n",
"Trainable params: 36,167,690\n",
"Non-trainable params: 137,344\n",
"__________________________________________________________________________________________________\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from datetime import datetime\n",
"from keras.callbacks import ModelCheckpoint, LearningRateScheduler\n",
"from keras.callbacks import ReduceLROnPlateau\n",
"lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1),\n",
" cooldown=0,\n",
" patience=5,\n",
" min_lr=0.5e-6)\n",
"checkpoint = ModelCheckpoint(filepath='mymodel.h5', \n",
" verbose=1, save_best_only=True)\n",
"callbacks = [checkpoint, lr_reducer]\n",
"start = datetime.now()\n",
"history = model.fit(train_generator, \n",
" steps_per_epoch=STEP_SIZE_TRAIN, \n",
" epochs=15,\n",
" validation_data=valid_generator, \n",
" validation_steps=STEP_SIZE_VALID)\n",
"\n",
"duration = datetime.now() - start\n",
"print(\"Training completed in time: \", duration)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "x0HldMFuZpfA",
"outputId": "b200566d-5bed-458c-95be-20619c788520"
},
"execution_count": 57,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/15\n",
"20/20 [==============================] - 16s 325ms/step - loss: 5.6025 - accuracy: 0.1189 - val_loss: 35976.7695 - val_accuracy: 0.0000e+00\n",
"Epoch 2/15\n",
"20/20 [==============================] - 5s 267ms/step - loss: 2.9507 - accuracy: 0.1450 - val_loss: 4443.5957 - val_accuracy: 0.0000e+00\n",
"Epoch 3/15\n",
"20/20 [==============================] - 4s 196ms/step - loss: 2.2833 - accuracy: 0.1906 - val_loss: 43.5217 - val_accuracy: 0.0000e+00\n",
"Epoch 4/15\n",
"20/20 [==============================] - 4s 217ms/step - loss: 1.7971 - accuracy: 0.3599 - val_loss: 5.5560 - val_accuracy: 0.0000e+00\n",
"Epoch 5/15\n",
"20/20 [==============================] - 5s 247ms/step - loss: 1.6482 - accuracy: 0.4251 - val_loss: 2.7523 - val_accuracy: 0.0000e+00\n",
"Epoch 6/15\n",
"20/20 [==============================] - 4s 197ms/step - loss: 1.6430 - accuracy: 0.3941 - val_loss: 3.7919 - val_accuracy: 0.0000e+00\n",
"Epoch 7/15\n",
"20/20 [==============================] - 4s 197ms/step - loss: 1.4859 - accuracy: 0.4788 - val_loss: 3.5065 - val_accuracy: 0.0000e+00\n",
"Epoch 8/15\n",
"20/20 [==============================] - 5s 246ms/step - loss: 1.1869 - accuracy: 0.5814 - val_loss: 2.6494 - val_accuracy: 0.0000e+00\n",
"Epoch 9/15\n",
"20/20 [==============================] - 4s 207ms/step - loss: 1.0453 - accuracy: 0.6482 - val_loss: 2.8491 - val_accuracy: 0.0000e+00\n",
"Epoch 10/15\n",
"20/20 [==============================] - 4s 197ms/step - loss: 0.9322 - accuracy: 0.7573 - val_loss: 6.8808 - val_accuracy: 0.0000e+00\n",
"Epoch 11/15\n",
"20/20 [==============================] - 5s 260ms/step - loss: 1.0886 - accuracy: 0.7578 - val_loss: 17.8471 - val_accuracy: 0.0000e+00\n",
"Epoch 12/15\n",
"20/20 [==============================] - 4s 207ms/step - loss: 0.6260 - accuracy: 0.8160 - val_loss: 50.6182 - val_accuracy: 0.0000e+00\n",
"Epoch 13/15\n",
"20/20 [==============================] - 5s 237ms/step - loss: 1.1854 - accuracy: 0.6954 - val_loss: 4.0438 - val_accuracy: 0.0000e+00\n",
"Epoch 14/15\n",
"20/20 [==============================] - 4s 207ms/step - loss: 0.8043 - accuracy: 0.7590 - val_loss: 14.6645 - val_accuracy: 0.0000e+00\n",
"Epoch 15/15\n",
"20/20 [==============================] - 4s 199ms/step - loss: 0.6855 - accuracy: 0.8225 - val_loss: 11.7065 - val_accuracy: 0.0000e+00\n",
"Training completed in time: 0:01:20.786714\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# list all data in history\n",
"print(history.history.keys())\n",
"# summarize history for accuracy\n",
"plt.plot(history.history['accuracy'])\n",
"plt.plot(history.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()\n",
"# summarize history for loss\n",
"plt.plot(history.history['loss'])\n",
"plt.plot(history.history['val_loss'])\n",
"plt.title('model loss')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 944
},
"id": "GY-P0SHfZpfA",
"outputId": "08254953-75a4-4eff-bee5-ea740dbf69b7"
},
"execution_count": 58,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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ohxarVbuvvtuzp8/z5AhQ6hRowaenp6cPn2aPn365Cp3r169GDhwIKdOnSI9PZ3169czZcqUW96OiD1SuRGRbBUqVGDnzp3YbLYcH9D79+/PfvzyrytWrCA5OTnH6M2BAwdybK9SpUrApUNbbdu2zZOM8+fPp3fv3jmu9EpLS7viSq3KlSuze/fu626rcuXKbNiwgczMTJydna+6TsmSJQGu2P7lUaybsWvXLg4ePMiXX35Jr169spcvW7Ysx3qX368b5Qbo3r07gwcPZs6cOVy8eBFnZ2e6det205lE7JkOS4lItvbt2xMVFcW8efOyl2VlZTF58mS8vLyyD6O0b9+erKwspk2blr2e1Wpl8uTJObZXunRp2rRpw4wZMzh79uwVrxcbG3vLGR0dHa8YbZo8efIVIykPP/wwO3bsuOol05ef//DDDxMXF3fVEY/L61SoUAFHR0fWrFmT4/GPPvroljL/e5uXfz9x4sQc6wUEBNCqVSs+++wzTp48edU8l/n7+3Pffffx9ddf880333DvvfdecdhRpLjSyI2IZOvXrx8zZsygT58+bNmyhdDQUObPn8/atWuZMGEC3t7eAHTs2JHmzZszdOhQjh8/Tq1atViwYEGOc14umzp1Ki1atCAsLIynn36aSpUqER0dzbp16zh16hQ7duy4pYz3338/X331Fb6+vtSqVYt169axfPlySpUqlWO9V155hfnz59OlSxf69u1Lw4YNOX/+PIsXL2b69OmEh4fTq1cvZs2axeDBg9m4cSMtW7YkJSWF5cuX8/zzz9OpUyd8fX3p0qULkydPxmKxULlyZX766adbOleoRo0aVK5cmZdffpnTp0/j4+PD999/n+N8p8smTZpEixYtaNCgAf369aNixYocP36cJUuWsH379hzr9urVi0ceeQSA0aNH39L7KGLXzLpMS0Ty3uVLwWNjY3Ms7927t+Hp6XnF+q1btzZq166dY1l0dLTxxBNPGP7+/oaLi4sRFhaW43Lny86dO2f07NnT8PHxMXx9fY2ePXsa27Ztu+LyaMMwjCNHjhi9evUygoKCDGdnZ6Ns2bLG/fffb8yfPz97nZu9FPzChQvZ+by8vIx27doZ+/fvNypUqJDjsvbLGQcMGGCULVvWcHFxMcqVK2f07t3biIuLy14nNTXVGD58uFGxYkXD2dnZCAoKMh555BHj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zv49uaW7syP9/68yT7XUlAkiIlL8qNwUMZdHaJbuOssvu6OyDz0BeLo40qFuMIPvrk6Qr5uJKUVERMyjclMEWG0Gm46f5+ddZ/l5dxQxSenZj3m5OtG2ZmnahwXTqlqARmpERKTYU7kppKw2gw3HzvHzrih+2RNF7L8KjbebE3fXCqR9nWBaVvPH1UmFRkRE5DKVm0Iky2pjw7HzLN11ll/3RBGXnJH9mI+bE/fUDqJ9WBDNq6jQiIiIXIvKjcmyrDbWHT33d6GJzp4WAaCEhzP31AqkfVgwzSr74+Kkm+6JiIjciMqNCTKtNv46co6lO8/y294oLqRmZj9W0sOZdrWDaB8WTNPKpXQXYRERkVukclNAMrJsrD0S93ehiSbh4j+Fxs/ThXa1g+gQFkyTSn4qNCIiIrdB5SYfpWdZWXs4jiU7o1i2N4rEtKzsx/y9/ik0jSv64aRCIyIikidUbvJYWqaVPw/FsXTXWZbtiybpX4UmwNuV++oEcV+dS4XG0UF3DRYREclrKjd5ZN/ZRGasPsLyfTEkp/9TaAJ9XLmvTjD31QkiIlSFRkREJL+p3OSR1IwsFm0/A0CQjxv3hV065NSgfEkcVGhEREQKjMpNHqkfUpIX7qxCm+qlqR9SQoVGRETEJCo3ecTBwcJ/7qludgwREZFiT5foiIiIiF1RuRERERG7onIjIiIidkXlRkREROyKyo2IiIjYFZUbERERsSsqNyIiImJXVG5ERETErqjciIiIiF1RuRERERG7onIjIiIidkXlRkREROyKyo2IiIjYFZUbERERsSsqNyIiImJXVG5ERETErqjciIiIiF1RuRERERG7onIjIiIidkXlRkREROyKyo2IiIjYFZUbERERsSsqNyIiImJXVG5ERETErqjciIiIiF1RuRERERG7onIjIiIidkXlRkREROyKyo2IiIjYFZUbERERsSsqNyIiImJXVG5ERETErqjciIiIiF1RuRERERG7onIjIiIidkXlRkREROyKyo2IiIjYFZUbERERsSsqNyIiImJXVG5ERETErqjciIiIiF1RuRERERG7UijKzdSpUwkNDcXNzY0mTZqwcePG667/3XffUaNGDdzc3AgLC2Pp0qUFlFREREQKO9PLzbx58xg8eDCjRo1i69athIeH065dO2JiYq66/l9//UWPHj148skn2bZtG507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\n"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABP40lEQVR4nO3deVxU9f4/8NfMwAwgDIjIFqgopaKoudGkrZKjkmXZdckMzeWnFysl13KvK2bX0nKr273i/baplS2SGqLiVXHDyCXFJQxTB9xgWGSb+fz+GDk5gjrgMIfl9Xw85sHMOe858z6DDa8+53POKIQQAkRERER0R0q5GyAiIiKqCxiaiIiIiGzA0ERERERkA4YmIiIiIhswNBERERHZgKGJiIiIyAYMTUREREQ2YGgiIiIisgFDExEREZENGJqIqME6e/YsFAoF4uPjq/zcHTt2QKFQYMeOHXesi4+Ph0KhwNmzZ6vVIxHVHgxNRERERDZgaCIiIiKyAUMTERERkQ0YmohINnPnzoVCocDJkyfx0ksvwdPTE02bNsWsWbMghMC5c+fw7LPPQqvVwt/fH4sXL66wjezsbIwaNQp+fn5wcXFBx44dsWbNmgp1OTk5GDFiBDw9PeHl5YXo6Gjk5ORU2teJEyfwwgsvwNvbGy4uLujatSt++OEHu+77ihUr0K5dO2g0GgQGBiImJqZCP6dOncLAgQPh7+8PFxcXBAUFYciQIcjNzZVqEhMT0bNnT3h5ecHd3R2tW7fGm2++addeicjCSe4GiIgGDx6Mtm3bYuHChUhISMA777wDb29vfPzxx3jyySfx7rvv4vPPP8fkyZPRrVs3PProowCA69ev4/HHH8fp06cxYcIEhISEYP369RgxYgRycnLw+uuvAwCEEHj22Wexa9cujBs3Dm3btsWGDRsQHR1doZdjx46hR48euO+++zB9+nQ0atQI69atw4ABA/DNN9/gueeeu+f9nTt3LubNm4fIyEiMHz8e6enpWLlyJQ4cOIDdu3fD2dkZJSUl0Ov1KC4uxquvvgp/f3+cP38eGzduRE5ODjw9PXHs2DE8/fTT6NChA+bPnw+NRoPTp09j9+7d99wjEVVCEBHJZM6cOQKAGDt2rLSsrKxMBAUFCYVCIRYuXCgtv3btmnB1dRXR0dHSsiVLlggA4rPPPpOWlZSUCJ1OJ9zd3YXRaBRCCPHdd98JAGLRokVWr/PII48IAGL16tXS8l69eonw8HBRVFQkLTObzeLhhx8W999/v7Rs+/btAoDYvn37Hfdx9erVAoDIyMgQQgiRnZ0t1Gq16N27tzCZTFLdsmXLBADxn//8RwghxC+//CIAiPXr19922x988IEAIC5dunTHHojIPnh4johkN3r0aOm+SqVC165dIYTAqFGjpOVeXl5o3bo1fv/9d2nZTz/9BH9/fwwdOlRa5uzsjNdeew35+flITk6W6pycnDB+/Hir13n11Vet+rh69Sq2bduGQYMGIS8vD5cvX8bly5dx5coV6PV6nDp1CufPn7+nfd26dStKSkowceJEKJV/fQSPGTMGWq0WCQkJAABPT08AwJYtW1BYWFjptry8vAAA33//Pcxm8z31RUR3x9BERLJr1qyZ1WNPT0+4uLjAx8enwvJr165Jj//44w/cf//9VuEDANq2bSutL/8ZEBAAd3d3q7rWrVtbPT59+jSEEJg1axaaNm1qdZszZw4Ayxyqe1He062vrVar0bJlS2l9SEgIYmNj8emnn8LHxwd6vR7Lly+3ms80ePBg9OjRA6NHj4afnx+GDBmCdevWMUAR1RDOaSIi2alUKpuWAZb5STWlPGxMnjwZer2+0prQ0NAae/1bLV68GCNGjMD333+Pn3/+Ga+99hri4uKwd+9eBAUFwdXVFTt37sT27duRkJCAzZs3Y+3atXjyySfx888/3/Y9JKLq4UgTEdVZzZs3x6lTpyqMrJw4cUJaX/7z4sWLyM/Pt6pLT0+3etyyZUsAlkN8kZGRld48PDzuuefKXrukpAQZGRnS+nLh4eGYOXMmdu7cif/97384f/48Vq1aJa1XKpXo1asX3n//ffz222/4xz/+gW3btmH79u331CcRVcTQRER1Vr9+/WAwGLB27VppWVlZGT766CO4u7vjsccek+rKysqwcuVKqc5kMuGjjz6y2p6vry8ef/xxfPzxx7h48WKF17t06dI99xwZGQm1Wo0PP/zQatTs3//+N3JzcxEVFQUAMBqNKCsrs3pueHg4lEoliouLAVjmYN2qU6dOACDVEJH98PAcEdVZY8eOxccff4wRI0YgNTUVLVq0wNdff43du3djyZIl0qhQ//790aNHD0yfPh1nz55FWFgYvv32W6v5QeWWL1+Onj17Ijw8HGPGjEHL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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"model.evaluate(test_generator)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "29tCswTkZpfA",
"outputId": "ffe51ff6-d385-40be-a843-7afc4945b0b4"
},
"execution_count": 59,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"7/7 [==============================] - 2s 258ms/step - loss: 6.7650 - accuracy: 0.1095\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[6.765034198760986, 0.1094527393579483]"
]
},
"metadata": {},
"execution_count": 59
}
]
},
{
"cell_type": "markdown",
"source": [
"#ResNet-101"
],
"metadata": {
"id": "d52BQyV7bCnp"
}
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"id": "eri9RiTZbCnq"
},
"outputs": [],
"source": [
"import keras \n",
"from keras.datasets import mnist\n",
"from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D\n",
"from keras.layers import Dense, Flatten\n",
"from keras import optimizers\n",
"from keras.models import Sequential\n",
"from keras.layers import Input, Lambda, Dense, Flatten, Dropout\n",
"from keras.models import Model\n",
"from tensorflow.keras.applications.resnet import ResNet101\n",
"from keras.preprocessing import image\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"from keras.models import Sequential\n",
"import numpy as np\n",
"from glob import glob\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"source": [
"import pandas as pd\n",
"import os\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"\n",
"\n",
"def append_ext(fn):\n",
" return fn + \".jpg\"\n",
"\n",
"\n",
"traindf = pd.read_csv(\"train/train.csv\", dtype=str)\n",
"testdf = pd.read_csv(\"test/test.csv\", dtype=str)\n",
"traindf[\"img\"] = traindf[\"img\"].apply(append_ext)\n",
"testdf[\"img\"] = testdf[\"img\"].apply(append_ext)\n",
"\n",
"datagen = ImageDataGenerator(rescale=1.0 / 255.0, validation_split=0.10)\n",
"\n",
"train_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"training\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"valid_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"validation\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"test_datagen = ImageDataGenerator(rescale=1.0 / 255.0)\n",
"\n",
"test_generator = test_datagen.flow_from_dataframe(\n",
" dataframe=testdf,\n",
" directory=\"test/test_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" batch_size=32,\n",
" seed=42,\n",
" shuffle=False,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "xp8W_rFVbCns",
"outputId": "07cc6bef-77ac-411e-f2ba-3de7fa66b36b"
},
"execution_count": 61,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Found 646 validated image filenames belonging to 10 classes.\n",
"Found 71 validated image filenames belonging to 10 classes.\n",
"Found 201 validated image filenames belonging to 10 classes.\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size\n",
"STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size\n",
"STEP_SIZE_TEST=test_generator.n//test_generator.batch_size"
],
"metadata": {
"id": "ZKWrkmTYbCns"
},
"execution_count": 62,
"outputs": []
},
{
"cell_type": "code",
"source": [
"IMAGE_SIZE = [120, 90]\n",
"resnet = ResNet101(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)\n",
"#here [3] denotes for RGB images(3 channels)\n",
"\n",
"#don't train existing weights\n",
"for layer in resnet.layers:\n",
" layer.trainable = False\n",
" \n",
"x = Flatten()(resnet.output)\n",
"x = Dense(512, activation='relu')(x)\n",
"x = Dropout(0.5)(x) # Dropout layer to reduce overfitting\n",
"x = Dense(256, activation='relu')(x)\n",
"x = Dropout(0.5)(x) # Dropout layer to reduce overfitting\n",
"prediction = Dense(10, activation='softmax')(x)\n",
"model = Model(inputs=resnet.input, outputs=prediction)\n",
"model.compile(loss='categorical_crossentropy',\n",
" optimizer=optimizers.Adam(),\n",
" metrics=['accuracy'])\n",
"model.summary()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "mblV9AI0bCnr",
"outputId": "9bc44caf-3128-4f01-cb6c-9543e8331160"
},
"execution_count": 63,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet101_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
"171446536/171446536 [==============================] - 5s 0us/step\n",
"Model: \"model_10\"\n",
"__________________________________________________________________________________________________\n",
" Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
" input_12 (InputLayer) [(None, 120, 90, 3) 0 [] \n",
" ] \n",
" \n",
" conv1_pad (ZeroPadding2D) (None, 126, 96, 3) 0 ['input_12[0][0]'] \n",
" \n",
" conv1_conv (Conv2D) (None, 60, 45, 64) 9472 ['conv1_pad[0][0]'] \n",
" \n",
" conv1_bn (BatchNormalization) (None, 60, 45, 64) 256 ['conv1_conv[0][0]'] \n",
" \n",
" conv1_relu (Activation) (None, 60, 45, 64) 0 ['conv1_bn[0][0]'] \n",
" \n",
" pool1_pad (ZeroPadding2D) (None, 62, 47, 64) 0 ['conv1_relu[0][0]'] \n",
" \n",
" pool1_pool (MaxPooling2D) (None, 30, 23, 64) 0 ['pool1_pad[0][0]'] \n",
" \n",
" conv2_block1_1_conv (Conv2D) (None, 30, 23, 64) 4160 ['pool1_pool[0][0]'] \n",
" \n",
" conv2_block1_1_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block1_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block1_1_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block1_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block1_2_conv (Conv2D) (None, 30, 23, 64) 36928 ['conv2_block1_1_relu[0][0]'] \n",
" \n",
" conv2_block1_2_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block1_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block1_2_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block1_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block1_0_conv (Conv2D) (None, 30, 23, 256) 16640 ['pool1_pool[0][0]'] \n",
" \n",
" conv2_block1_3_conv (Conv2D) (None, 30, 23, 256) 16640 ['conv2_block1_2_relu[0][0]'] \n",
" \n",
" conv2_block1_0_bn (BatchNormal (None, 30, 23, 256) 1024 ['conv2_block1_0_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block1_3_bn (BatchNormal (None, 30, 23, 256) 1024 ['conv2_block1_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block1_add (Add) (None, 30, 23, 256) 0 ['conv2_block1_0_bn[0][0]', \n",
" 'conv2_block1_3_bn[0][0]'] \n",
" \n",
" conv2_block1_out (Activation) (None, 30, 23, 256) 0 ['conv2_block1_add[0][0]'] \n",
" \n",
" conv2_block2_1_conv (Conv2D) (None, 30, 23, 64) 16448 ['conv2_block1_out[0][0]'] \n",
" \n",
" conv2_block2_1_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block2_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block2_1_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block2_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block2_2_conv (Conv2D) (None, 30, 23, 64) 36928 ['conv2_block2_1_relu[0][0]'] \n",
" \n",
" conv2_block2_2_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block2_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block2_2_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block2_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block2_3_conv (Conv2D) (None, 30, 23, 256) 16640 ['conv2_block2_2_relu[0][0]'] \n",
" \n",
" conv2_block2_3_bn (BatchNormal (None, 30, 23, 256) 1024 ['conv2_block2_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block2_add (Add) (None, 30, 23, 256) 0 ['conv2_block1_out[0][0]', \n",
" 'conv2_block2_3_bn[0][0]'] \n",
" \n",
" conv2_block2_out (Activation) (None, 30, 23, 256) 0 ['conv2_block2_add[0][0]'] \n",
" \n",
" conv2_block3_1_conv (Conv2D) (None, 30, 23, 64) 16448 ['conv2_block2_out[0][0]'] \n",
" \n",
" conv2_block3_1_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block3_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block3_1_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block3_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block3_2_conv (Conv2D) (None, 30, 23, 64) 36928 ['conv2_block3_1_relu[0][0]'] \n",
" \n",
" conv2_block3_2_bn (BatchNormal (None, 30, 23, 64) 256 ['conv2_block3_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block3_2_relu (Activatio (None, 30, 23, 64) 0 ['conv2_block3_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv2_block3_3_conv (Conv2D) (None, 30, 23, 256) 16640 ['conv2_block3_2_relu[0][0]'] \n",
" \n",
" conv2_block3_3_bn (BatchNormal (None, 30, 23, 256) 1024 ['conv2_block3_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv2_block3_add (Add) (None, 30, 23, 256) 0 ['conv2_block2_out[0][0]', \n",
" 'conv2_block3_3_bn[0][0]'] \n",
" \n",
" conv2_block3_out (Activation) (None, 30, 23, 256) 0 ['conv2_block3_add[0][0]'] \n",
" \n",
" conv3_block1_1_conv (Conv2D) (None, 15, 12, 128) 32896 ['conv2_block3_out[0][0]'] \n",
" \n",
" conv3_block1_1_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block1_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block1_1_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block1_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block1_2_conv (Conv2D) (None, 15, 12, 128) 147584 ['conv3_block1_1_relu[0][0]'] \n",
" \n",
" conv3_block1_2_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block1_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block1_2_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block1_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block1_0_conv (Conv2D) (None, 15, 12, 512) 131584 ['conv2_block3_out[0][0]'] \n",
" \n",
" conv3_block1_3_conv (Conv2D) (None, 15, 12, 512) 66048 ['conv3_block1_2_relu[0][0]'] \n",
" \n",
" conv3_block1_0_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block1_0_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block1_3_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block1_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block1_add (Add) (None, 15, 12, 512) 0 ['conv3_block1_0_bn[0][0]', \n",
" 'conv3_block1_3_bn[0][0]'] \n",
" \n",
" conv3_block1_out (Activation) (None, 15, 12, 512) 0 ['conv3_block1_add[0][0]'] \n",
" \n",
" conv3_block2_1_conv (Conv2D) (None, 15, 12, 128) 65664 ['conv3_block1_out[0][0]'] \n",
" \n",
" conv3_block2_1_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block2_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block2_1_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block2_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block2_2_conv (Conv2D) (None, 15, 12, 128) 147584 ['conv3_block2_1_relu[0][0]'] \n",
" \n",
" conv3_block2_2_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block2_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block2_2_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block2_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block2_3_conv (Conv2D) (None, 15, 12, 512) 66048 ['conv3_block2_2_relu[0][0]'] \n",
" \n",
" conv3_block2_3_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block2_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block2_add (Add) (None, 15, 12, 512) 0 ['conv3_block1_out[0][0]', \n",
" 'conv3_block2_3_bn[0][0]'] \n",
" \n",
" conv3_block2_out (Activation) (None, 15, 12, 512) 0 ['conv3_block2_add[0][0]'] \n",
" \n",
" conv3_block3_1_conv (Conv2D) (None, 15, 12, 128) 65664 ['conv3_block2_out[0][0]'] \n",
" \n",
" conv3_block3_1_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block3_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block3_1_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block3_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block3_2_conv (Conv2D) (None, 15, 12, 128) 147584 ['conv3_block3_1_relu[0][0]'] \n",
" \n",
" conv3_block3_2_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block3_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block3_2_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block3_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block3_3_conv (Conv2D) (None, 15, 12, 512) 66048 ['conv3_block3_2_relu[0][0]'] \n",
" \n",
" conv3_block3_3_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block3_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block3_add (Add) (None, 15, 12, 512) 0 ['conv3_block2_out[0][0]', \n",
" 'conv3_block3_3_bn[0][0]'] \n",
" \n",
" conv3_block3_out (Activation) (None, 15, 12, 512) 0 ['conv3_block3_add[0][0]'] \n",
" \n",
" conv3_block4_1_conv (Conv2D) (None, 15, 12, 128) 65664 ['conv3_block3_out[0][0]'] \n",
" \n",
" conv3_block4_1_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block4_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block4_1_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block4_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block4_2_conv (Conv2D) (None, 15, 12, 128) 147584 ['conv3_block4_1_relu[0][0]'] \n",
" \n",
" conv3_block4_2_bn (BatchNormal (None, 15, 12, 128) 512 ['conv3_block4_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block4_2_relu (Activatio (None, 15, 12, 128) 0 ['conv3_block4_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv3_block4_3_conv (Conv2D) (None, 15, 12, 512) 66048 ['conv3_block4_2_relu[0][0]'] \n",
" \n",
" conv3_block4_3_bn (BatchNormal (None, 15, 12, 512) 2048 ['conv3_block4_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv3_block4_add (Add) (None, 15, 12, 512) 0 ['conv3_block3_out[0][0]', \n",
" 'conv3_block4_3_bn[0][0]'] \n",
" \n",
" conv3_block4_out (Activation) (None, 15, 12, 512) 0 ['conv3_block4_add[0][0]'] \n",
" \n",
" conv4_block1_1_conv (Conv2D) (None, 8, 6, 256) 131328 ['conv3_block4_out[0][0]'] \n",
" \n",
" conv4_block1_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block1_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block1_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block1_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block1_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block1_1_relu[0][0]'] \n",
" \n",
" conv4_block1_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block1_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block1_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block1_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block1_0_conv (Conv2D) (None, 8, 6, 1024) 525312 ['conv3_block4_out[0][0]'] \n",
" \n",
" conv4_block1_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block1_2_relu[0][0]'] \n",
" \n",
" conv4_block1_0_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block1_0_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block1_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block1_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block1_add (Add) (None, 8, 6, 1024) 0 ['conv4_block1_0_bn[0][0]', \n",
" 'conv4_block1_3_bn[0][0]'] \n",
" \n",
" conv4_block1_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block1_add[0][0]'] \n",
" \n",
" conv4_block2_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block1_out[0][0]'] \n",
" \n",
" conv4_block2_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block2_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block2_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block2_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block2_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block2_1_relu[0][0]'] \n",
" \n",
" conv4_block2_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block2_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block2_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block2_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block2_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block2_2_relu[0][0]'] \n",
" \n",
" conv4_block2_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block2_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block2_add (Add) (None, 8, 6, 1024) 0 ['conv4_block1_out[0][0]', \n",
" 'conv4_block2_3_bn[0][0]'] \n",
" \n",
" conv4_block2_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block2_add[0][0]'] \n",
" \n",
" conv4_block3_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block2_out[0][0]'] \n",
" \n",
" conv4_block3_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block3_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block3_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block3_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block3_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block3_1_relu[0][0]'] \n",
" \n",
" conv4_block3_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block3_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block3_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block3_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block3_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block3_2_relu[0][0]'] \n",
" \n",
" conv4_block3_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block3_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block3_add (Add) (None, 8, 6, 1024) 0 ['conv4_block2_out[0][0]', \n",
" 'conv4_block3_3_bn[0][0]'] \n",
" \n",
" conv4_block3_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block3_add[0][0]'] \n",
" \n",
" conv4_block4_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block3_out[0][0]'] \n",
" \n",
" conv4_block4_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block4_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block4_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block4_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block4_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block4_1_relu[0][0]'] \n",
" \n",
" conv4_block4_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block4_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block4_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block4_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block4_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block4_2_relu[0][0]'] \n",
" \n",
" conv4_block4_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block4_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block4_add (Add) (None, 8, 6, 1024) 0 ['conv4_block3_out[0][0]', \n",
" 'conv4_block4_3_bn[0][0]'] \n",
" \n",
" conv4_block4_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block4_add[0][0]'] \n",
" \n",
" conv4_block5_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block4_out[0][0]'] \n",
" \n",
" conv4_block5_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block5_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block5_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block5_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block5_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block5_1_relu[0][0]'] \n",
" \n",
" conv4_block5_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block5_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block5_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block5_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block5_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block5_2_relu[0][0]'] \n",
" \n",
" conv4_block5_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block5_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block5_add (Add) (None, 8, 6, 1024) 0 ['conv4_block4_out[0][0]', \n",
" 'conv4_block5_3_bn[0][0]'] \n",
" \n",
" conv4_block5_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block5_add[0][0]'] \n",
" \n",
" conv4_block6_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block5_out[0][0]'] \n",
" \n",
" conv4_block6_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block6_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block6_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block6_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block6_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block6_1_relu[0][0]'] \n",
" \n",
" conv4_block6_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block6_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block6_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block6_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block6_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block6_2_relu[0][0]'] \n",
" \n",
" conv4_block6_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block6_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block6_add (Add) (None, 8, 6, 1024) 0 ['conv4_block5_out[0][0]', \n",
" 'conv4_block6_3_bn[0][0]'] \n",
" \n",
" conv4_block6_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block6_add[0][0]'] \n",
" \n",
" conv4_block7_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block6_out[0][0]'] \n",
" \n",
" conv4_block7_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block7_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block7_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block7_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block7_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block7_1_relu[0][0]'] \n",
" \n",
" conv4_block7_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block7_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block7_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block7_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block7_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block7_2_relu[0][0]'] \n",
" \n",
" conv4_block7_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block7_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block7_add (Add) (None, 8, 6, 1024) 0 ['conv4_block6_out[0][0]', \n",
" 'conv4_block7_3_bn[0][0]'] \n",
" \n",
" conv4_block7_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block7_add[0][0]'] \n",
" \n",
" conv4_block8_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block7_out[0][0]'] \n",
" \n",
" conv4_block8_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block8_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block8_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block8_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block8_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block8_1_relu[0][0]'] \n",
" \n",
" conv4_block8_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block8_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block8_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block8_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block8_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block8_2_relu[0][0]'] \n",
" \n",
" conv4_block8_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block8_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block8_add (Add) (None, 8, 6, 1024) 0 ['conv4_block7_out[0][0]', \n",
" 'conv4_block8_3_bn[0][0]'] \n",
" \n",
" conv4_block8_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block8_add[0][0]'] \n",
" \n",
" conv4_block9_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block8_out[0][0]'] \n",
" \n",
" conv4_block9_1_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block9_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block9_1_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block9_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block9_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block9_1_relu[0][0]'] \n",
" \n",
" conv4_block9_2_bn (BatchNormal (None, 8, 6, 256) 1024 ['conv4_block9_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block9_2_relu (Activatio (None, 8, 6, 256) 0 ['conv4_block9_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv4_block9_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block9_2_relu[0][0]'] \n",
" \n",
" conv4_block9_3_bn (BatchNormal (None, 8, 6, 1024) 4096 ['conv4_block9_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv4_block9_add (Add) (None, 8, 6, 1024) 0 ['conv4_block8_out[0][0]', \n",
" 'conv4_block9_3_bn[0][0]'] \n",
" \n",
" conv4_block9_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block9_add[0][0]'] \n",
" \n",
" conv4_block10_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block9_out[0][0]'] \n",
" \n",
" conv4_block10_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block10_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block10_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block10_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block10_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block10_1_relu[0][0]'] \n",
" \n",
" conv4_block10_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block10_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block10_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block10_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block10_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block10_2_relu[0][0]'] \n",
" \n",
" conv4_block10_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block10_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block10_add (Add) (None, 8, 6, 1024) 0 ['conv4_block9_out[0][0]', \n",
" 'conv4_block10_3_bn[0][0]'] \n",
" \n",
" conv4_block10_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block10_add[0][0]'] \n",
" \n",
" conv4_block11_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block10_out[0][0]'] \n",
" \n",
" conv4_block11_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block11_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block11_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block11_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block11_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block11_1_relu[0][0]'] \n",
" \n",
" conv4_block11_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block11_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block11_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block11_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block11_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block11_2_relu[0][0]'] \n",
" \n",
" conv4_block11_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block11_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block11_add (Add) (None, 8, 6, 1024) 0 ['conv4_block10_out[0][0]', \n",
" 'conv4_block11_3_bn[0][0]'] \n",
" \n",
" conv4_block11_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block11_add[0][0]'] \n",
" \n",
" conv4_block12_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block11_out[0][0]'] \n",
" \n",
" conv4_block12_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block12_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block12_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block12_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block12_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block12_1_relu[0][0]'] \n",
" \n",
" conv4_block12_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block12_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block12_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block12_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block12_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block12_2_relu[0][0]'] \n",
" \n",
" conv4_block12_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block12_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block12_add (Add) (None, 8, 6, 1024) 0 ['conv4_block11_out[0][0]', \n",
" 'conv4_block12_3_bn[0][0]'] \n",
" \n",
" conv4_block12_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block12_add[0][0]'] \n",
" \n",
" conv4_block13_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block12_out[0][0]'] \n",
" \n",
" conv4_block13_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block13_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block13_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block13_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block13_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block13_1_relu[0][0]'] \n",
" \n",
" conv4_block13_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block13_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block13_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block13_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block13_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block13_2_relu[0][0]'] \n",
" \n",
" conv4_block13_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block13_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block13_add (Add) (None, 8, 6, 1024) 0 ['conv4_block12_out[0][0]', \n",
" 'conv4_block13_3_bn[0][0]'] \n",
" \n",
" conv4_block13_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block13_add[0][0]'] \n",
" \n",
" conv4_block14_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block13_out[0][0]'] \n",
" \n",
" conv4_block14_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block14_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block14_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block14_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block14_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block14_1_relu[0][0]'] \n",
" \n",
" conv4_block14_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block14_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block14_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block14_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block14_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block14_2_relu[0][0]'] \n",
" \n",
" conv4_block14_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block14_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block14_add (Add) (None, 8, 6, 1024) 0 ['conv4_block13_out[0][0]', \n",
" 'conv4_block14_3_bn[0][0]'] \n",
" \n",
" conv4_block14_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block14_add[0][0]'] \n",
" \n",
" conv4_block15_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block14_out[0][0]'] \n",
" \n",
" conv4_block15_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block15_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block15_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block15_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block15_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block15_1_relu[0][0]'] \n",
" \n",
" conv4_block15_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block15_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block15_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block15_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block15_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block15_2_relu[0][0]'] \n",
" \n",
" conv4_block15_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block15_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block15_add (Add) (None, 8, 6, 1024) 0 ['conv4_block14_out[0][0]', \n",
" 'conv4_block15_3_bn[0][0]'] \n",
" \n",
" conv4_block15_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block15_add[0][0]'] \n",
" \n",
" conv4_block16_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block15_out[0][0]'] \n",
" \n",
" conv4_block16_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block16_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block16_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block16_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block16_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block16_1_relu[0][0]'] \n",
" \n",
" conv4_block16_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block16_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block16_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block16_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block16_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block16_2_relu[0][0]'] \n",
" \n",
" conv4_block16_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block16_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block16_add (Add) (None, 8, 6, 1024) 0 ['conv4_block15_out[0][0]', \n",
" 'conv4_block16_3_bn[0][0]'] \n",
" \n",
" conv4_block16_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block16_add[0][0]'] \n",
" \n",
" conv4_block17_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block16_out[0][0]'] \n",
" \n",
" conv4_block17_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block17_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block17_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block17_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block17_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block17_1_relu[0][0]'] \n",
" \n",
" conv4_block17_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block17_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block17_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block17_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block17_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block17_2_relu[0][0]'] \n",
" \n",
" conv4_block17_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block17_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block17_add (Add) (None, 8, 6, 1024) 0 ['conv4_block16_out[0][0]', \n",
" 'conv4_block17_3_bn[0][0]'] \n",
" \n",
" conv4_block17_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block17_add[0][0]'] \n",
" \n",
" conv4_block18_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block17_out[0][0]'] \n",
" \n",
" conv4_block18_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block18_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block18_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block18_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block18_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block18_1_relu[0][0]'] \n",
" \n",
" conv4_block18_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block18_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block18_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block18_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block18_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block18_2_relu[0][0]'] \n",
" \n",
" conv4_block18_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block18_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block18_add (Add) (None, 8, 6, 1024) 0 ['conv4_block17_out[0][0]', \n",
" 'conv4_block18_3_bn[0][0]'] \n",
" \n",
" conv4_block18_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block18_add[0][0]'] \n",
" \n",
" conv4_block19_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block18_out[0][0]'] \n",
" \n",
" conv4_block19_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block19_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block19_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block19_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block19_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block19_1_relu[0][0]'] \n",
" \n",
" conv4_block19_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block19_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block19_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block19_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block19_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block19_2_relu[0][0]'] \n",
" \n",
" conv4_block19_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block19_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block19_add (Add) (None, 8, 6, 1024) 0 ['conv4_block18_out[0][0]', \n",
" 'conv4_block19_3_bn[0][0]'] \n",
" \n",
" conv4_block19_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block19_add[0][0]'] \n",
" \n",
" conv4_block20_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block19_out[0][0]'] \n",
" \n",
" conv4_block20_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block20_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block20_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block20_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block20_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block20_1_relu[0][0]'] \n",
" \n",
" conv4_block20_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block20_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block20_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block20_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block20_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block20_2_relu[0][0]'] \n",
" \n",
" conv4_block20_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block20_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block20_add (Add) (None, 8, 6, 1024) 0 ['conv4_block19_out[0][0]', \n",
" 'conv4_block20_3_bn[0][0]'] \n",
" \n",
" conv4_block20_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block20_add[0][0]'] \n",
" \n",
" conv4_block21_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block20_out[0][0]'] \n",
" \n",
" conv4_block21_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block21_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block21_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block21_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block21_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block21_1_relu[0][0]'] \n",
" \n",
" conv4_block21_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block21_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block21_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block21_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block21_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block21_2_relu[0][0]'] \n",
" \n",
" conv4_block21_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block21_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block21_add (Add) (None, 8, 6, 1024) 0 ['conv4_block20_out[0][0]', \n",
" 'conv4_block21_3_bn[0][0]'] \n",
" \n",
" conv4_block21_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block21_add[0][0]'] \n",
" \n",
" conv4_block22_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block21_out[0][0]'] \n",
" \n",
" conv4_block22_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block22_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block22_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block22_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block22_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block22_1_relu[0][0]'] \n",
" \n",
" conv4_block22_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block22_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block22_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block22_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block22_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block22_2_relu[0][0]'] \n",
" \n",
" conv4_block22_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block22_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block22_add (Add) (None, 8, 6, 1024) 0 ['conv4_block21_out[0][0]', \n",
" 'conv4_block22_3_bn[0][0]'] \n",
" \n",
" conv4_block22_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block22_add[0][0]'] \n",
" \n",
" conv4_block23_1_conv (Conv2D) (None, 8, 6, 256) 262400 ['conv4_block22_out[0][0]'] \n",
" \n",
" conv4_block23_1_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block23_1_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block23_1_relu (Activati (None, 8, 6, 256) 0 ['conv4_block23_1_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block23_2_conv (Conv2D) (None, 8, 6, 256) 590080 ['conv4_block23_1_relu[0][0]'] \n",
" \n",
" conv4_block23_2_bn (BatchNorma (None, 8, 6, 256) 1024 ['conv4_block23_2_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block23_2_relu (Activati (None, 8, 6, 256) 0 ['conv4_block23_2_bn[0][0]'] \n",
" on) \n",
" \n",
" conv4_block23_3_conv (Conv2D) (None, 8, 6, 1024) 263168 ['conv4_block23_2_relu[0][0]'] \n",
" \n",
" conv4_block23_3_bn (BatchNorma (None, 8, 6, 1024) 4096 ['conv4_block23_3_conv[0][0]'] \n",
" lization) \n",
" \n",
" conv4_block23_add (Add) (None, 8, 6, 1024) 0 ['conv4_block22_out[0][0]', \n",
" 'conv4_block23_3_bn[0][0]'] \n",
" \n",
" conv4_block23_out (Activation) (None, 8, 6, 1024) 0 ['conv4_block23_add[0][0]'] \n",
" \n",
" conv5_block1_1_conv (Conv2D) (None, 4, 3, 512) 524800 ['conv4_block23_out[0][0]'] \n",
" \n",
" conv5_block1_1_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block1_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block1_1_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block1_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block1_2_conv (Conv2D) (None, 4, 3, 512) 2359808 ['conv5_block1_1_relu[0][0]'] \n",
" \n",
" conv5_block1_2_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block1_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block1_2_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block1_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block1_0_conv (Conv2D) (None, 4, 3, 2048) 2099200 ['conv4_block23_out[0][0]'] \n",
" \n",
" conv5_block1_3_conv (Conv2D) (None, 4, 3, 2048) 1050624 ['conv5_block1_2_relu[0][0]'] \n",
" \n",
" conv5_block1_0_bn (BatchNormal (None, 4, 3, 2048) 8192 ['conv5_block1_0_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block1_3_bn (BatchNormal (None, 4, 3, 2048) 8192 ['conv5_block1_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block1_add (Add) (None, 4, 3, 2048) 0 ['conv5_block1_0_bn[0][0]', \n",
" 'conv5_block1_3_bn[0][0]'] \n",
" \n",
" conv5_block1_out (Activation) (None, 4, 3, 2048) 0 ['conv5_block1_add[0][0]'] \n",
" \n",
" conv5_block2_1_conv (Conv2D) (None, 4, 3, 512) 1049088 ['conv5_block1_out[0][0]'] \n",
" \n",
" conv5_block2_1_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block2_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block2_1_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block2_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block2_2_conv (Conv2D) (None, 4, 3, 512) 2359808 ['conv5_block2_1_relu[0][0]'] \n",
" \n",
" conv5_block2_2_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block2_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block2_2_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block2_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block2_3_conv (Conv2D) (None, 4, 3, 2048) 1050624 ['conv5_block2_2_relu[0][0]'] \n",
" \n",
" conv5_block2_3_bn (BatchNormal (None, 4, 3, 2048) 8192 ['conv5_block2_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block2_add (Add) (None, 4, 3, 2048) 0 ['conv5_block1_out[0][0]', \n",
" 'conv5_block2_3_bn[0][0]'] \n",
" \n",
" conv5_block2_out (Activation) (None, 4, 3, 2048) 0 ['conv5_block2_add[0][0]'] \n",
" \n",
" conv5_block3_1_conv (Conv2D) (None, 4, 3, 512) 1049088 ['conv5_block2_out[0][0]'] \n",
" \n",
" conv5_block3_1_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block3_1_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block3_1_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block3_1_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block3_2_conv (Conv2D) (None, 4, 3, 512) 2359808 ['conv5_block3_1_relu[0][0]'] \n",
" \n",
" conv5_block3_2_bn (BatchNormal (None, 4, 3, 512) 2048 ['conv5_block3_2_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block3_2_relu (Activatio (None, 4, 3, 512) 0 ['conv5_block3_2_bn[0][0]'] \n",
" n) \n",
" \n",
" conv5_block3_3_conv (Conv2D) (None, 4, 3, 2048) 1050624 ['conv5_block3_2_relu[0][0]'] \n",
" \n",
" conv5_block3_3_bn (BatchNormal (None, 4, 3, 2048) 8192 ['conv5_block3_3_conv[0][0]'] \n",
" ization) \n",
" \n",
" conv5_block3_add (Add) (None, 4, 3, 2048) 0 ['conv5_block2_out[0][0]', \n",
" 'conv5_block3_3_bn[0][0]'] \n",
" \n",
" conv5_block3_out (Activation) (None, 4, 3, 2048) 0 ['conv5_block3_add[0][0]'] \n",
" \n",
" flatten_10 (Flatten) (None, 24576) 0 ['conv5_block3_out[0][0]'] \n",
" \n",
" dense_30 (Dense) (None, 512) 12583424 ['flatten_10[0][0]'] \n",
" \n",
" dropout_66 (Dropout) (None, 512) 0 ['dense_30[0][0]'] \n",
" \n",
" dense_31 (Dense) (None, 256) 131328 ['dropout_66[0][0]'] \n",
" \n",
" dropout_67 (Dropout) (None, 256) 0 ['dense_31[0][0]'] \n",
" \n",
" dense_32 (Dense) (None, 10) 2570 ['dropout_67[0][0]'] \n",
" \n",
"==================================================================================================\n",
"Total params: 55,375,498\n",
"Trainable params: 12,717,322\n",
"Non-trainable params: 42,658,176\n",
"__________________________________________________________________________________________________\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from datetime import datetime\n",
"from keras.callbacks import ModelCheckpoint, LearningRateScheduler\n",
"from keras.callbacks import ReduceLROnPlateau\n",
"lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1),\n",
" cooldown=0,\n",
" patience=5,\n",
" min_lr=0.5e-6)\n",
"checkpoint = ModelCheckpoint(filepath='mymodel.h5', \n",
" verbose=1, save_best_only=True)\n",
"callbacks = [checkpoint, lr_reducer]\n",
"start = datetime.now()\n",
"history = model.fit(train_generator, \n",
" steps_per_epoch=STEP_SIZE_TRAIN, \n",
" epochs=15,\n",
" validation_data=valid_generator, \n",
" validation_steps=STEP_SIZE_VALID)\n",
"\n",
"duration = datetime.now() - start\n",
"print(\"Training completed in time: \", duration)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "zsNTGoWJbCnt",
"outputId": "1b6575c0-4979-46df-9468-b2fd1cc2964e"
},
"execution_count": 64,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/15\n",
"20/20 [==============================] - 13s 302ms/step - loss: 2.7326 - accuracy: 0.0928 - val_loss: 3.4556 - val_accuracy: 0.0000e+00\n",
"Epoch 2/15\n",
"20/20 [==============================] - 5s 248ms/step - loss: 2.3115 - accuracy: 0.1254 - val_loss: 3.0025 - val_accuracy: 0.0000e+00\n",
"Epoch 3/15\n",
"20/20 [==============================] - 4s 202ms/step - loss: 2.2649 - accuracy: 0.1205 - val_loss: 3.3289 - val_accuracy: 0.0000e+00\n",
"Epoch 4/15\n",
"20/20 [==============================] - 4s 221ms/step - loss: 2.2325 - accuracy: 0.1450 - val_loss: 3.2600 - val_accuracy: 0.0000e+00\n",
"Epoch 5/15\n",
"20/20 [==============================] - 4s 216ms/step - loss: 2.2363 - accuracy: 0.1352 - val_loss: 3.5546 - val_accuracy: 0.0000e+00\n",
"Epoch 6/15\n",
"20/20 [==============================] - 5s 271ms/step - loss: 2.2244 - accuracy: 0.1287 - val_loss: 3.3919 - val_accuracy: 0.0000e+00\n",
"Epoch 7/15\n",
"20/20 [==============================] - 5s 250ms/step - loss: 2.1816 - accuracy: 0.1564 - val_loss: 3.7364 - val_accuracy: 0.0000e+00\n",
"Epoch 8/15\n",
"20/20 [==============================] - 4s 198ms/step - loss: 2.1892 - accuracy: 0.1450 - val_loss: 3.9265 - val_accuracy: 0.0000e+00\n",
"Epoch 9/15\n",
"20/20 [==============================] - 4s 187ms/step - loss: 2.1248 - accuracy: 0.1531 - val_loss: 3.9725 - val_accuracy: 0.0000e+00\n",
"Epoch 10/15\n",
"20/20 [==============================] - 5s 239ms/step - loss: 2.1027 - accuracy: 0.1808 - val_loss: 4.7414 - val_accuracy: 0.0000e+00\n",
"Epoch 11/15\n",
"20/20 [==============================] - 4s 194ms/step - loss: 2.0943 - accuracy: 0.2020 - val_loss: 4.4623 - val_accuracy: 0.0000e+00\n",
"Epoch 12/15\n",
"20/20 [==============================] - 4s 199ms/step - loss: 2.0632 - accuracy: 0.1792 - val_loss: 4.7558 - val_accuracy: 0.0000e+00\n",
"Epoch 13/15\n",
"20/20 [==============================] - 5s 236ms/step - loss: 2.0368 - accuracy: 0.2036 - val_loss: 4.9094 - val_accuracy: 0.0000e+00\n",
"Epoch 14/15\n",
"20/20 [==============================] - 4s 191ms/step - loss: 2.0129 - accuracy: 0.2134 - val_loss: 5.2977 - val_accuracy: 0.0000e+00\n",
"Epoch 15/15\n",
"20/20 [==============================] - 4s 195ms/step - loss: 2.0184 - accuracy: 0.2117 - val_loss: 4.8562 - val_accuracy: 0.0000e+00\n",
"Training completed in time: 0:01:17.339822\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# list all data in history\n",
"print(history.history.keys())\n",
"# summarize history for accuracy\n",
"plt.plot(history.history['accuracy'])\n",
"plt.plot(history.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()\n",
"# summarize history for loss\n",
"plt.plot(history.history['loss'])\n",
"plt.plot(history.history['val_loss'])\n",
"plt.title('model loss')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 944
},
"id": "d0zRtgMIbCnu",
"outputId": "3337bca3-e2ef-4a66-e56d-286dc8808f76"
},
"execution_count": 65,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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8OFDNGjQoMTVYHUV5wEiIiKqe3QyD9C/WVpaVteuiIiIiGpUpQZBExEREdVlDEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDkMQERERCQ5DEBEREQkOQxAREREJDm1IgCtX78ebm5uMDAwgJ+fH8LDw5/Zfu/evWjevDkMDAzg6emJn3/+ucTjY8eOhUwmK3Hr06dPTR4CERER1SGiB6Ddu3cjKCgIixcvRkREBLy8vBAQEIDk5OQy2586dQojRozAhAkTcOHCBQwYMAADBgxAVFRUiXZ9+vRBQkKC9rZz505dHA4RERHVATJBEAQxC/Dz84Ovry/WrVsHANBoNHB2dsa0adMwZ86cUu2HDRuG7OxsHDp0SLutY8eO8Pb2xsaNGwEU9wClp6fj4MGDlaopMzMT5ubmyMjIgJmZWaX2QURERLpVke9vUXuACgoKcP78efj7+2u3yeVy+Pv7IywsrMznhIWFlWgPAAEBAaXaHz9+HDY2NmjWrBneeustpKWlPbWO/Px8ZGZmlrgRERFR/SVqAEpNTYVarYatrW2J7ba2tkhMTCzzOYmJif/Zvk+fPti2bRtCQkKwfPlynDhxAi+++CLUanWZ+wwODoa5ubn25uzsXMUjIyIiotpMT+wCasLw4cO1P3t6eqJNmzZo1KgRjh8/jt69e5dqP3fuXAQFBWnvZ2ZmMgQRERHVY6L2AFlZWUGhUCApKanE9qSkJNjZ2ZX5HDs7uwq1BwAPDw9YWVnh9u3bZT6uUqlgZmZW4kZERET1l6gBSKlUon379ggJCdFu02g0CAkJQadOncp8TqdOnUq0B4Bjx449tT0A3L9/H2lpabC3t6+ewomIiKhOE/0y+KCgIGzevBlbt27FtWvX8NZbbyE7Oxvjxo0DAIwZMwZz587Vtp8+fTqOHDmCVatW4fr161iyZAnOnTuHqVOnAgCysrLw7rvv4vTp04iJiUFISAj69++Pxo0bIyAgQJRjJCIiotpF9DFAw4YNQ0pKChYtWoTExER4e3vjyJEj2oHOsbGxkMv/l9M6d+6MHTt2YMGCBZg3bx6aNGmCgwcPonXr1gAAhUKBS5cuYevWrUhPT4eDgwNeeOEFLF26FCqVSpRjJCIiotpF9HmAaiPOA0RERFT31Jl5gIiIiIjEwABEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREksMARERERJLDAERERESSwwBEREREklMrAtD69evh5uYGAwMD+Pn5ITw8/Jnt9+7di+bNm8PAwACenp74+eefSzwuCAIWLVoEe3t7GBoawt/fH7du3arJQyAiIqI6RPQAtHv3bgQFBWHx4sWIiIiAl5cXAgICkJycXGb7U6dOYcSIEZgwYQIuXLiAAQMGYMCAAYiKitK2WbFiBdasWYONGzfizJkzMDY2RkBAAPLy8nR1WERERFSL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\n"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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06ZNGTx4MLVr1+bgwYMsXbqUvXv38vvvv19SzZUqVWLkyJE8//zz3HTTTfTo0YPNmzfzv//9jyuuuIJ+/foB8PPPPzN06FDuuusuLrvsMvLz8/n000+x2+3ccccdALzwwgv88ssvdO/enRo1apCSksL//vc/4uPjad++/SXVKSJnUrgRkVIXHBzMggULePLJJ/n4449JS0ujfv36fPTRRwwcOLDwOD8/P7755huGDx/OZ599hs1mo0ePHowZM4aWLVsWOWejRo1YuXIlzz//PBMnTuTIkSNUrlyZli1b8uyzz7ql7ueee45KlSrx9ttv8+ijjxIdHc2DDz7ISy+9REBAAADNmzenS5cufPvtt+zbt4+QkBCaN2/O999/z9VXXw1Ajx492LVrFxMmTODw4cNUrFiRDh068PzzzxeOthIR97EZpdnrT0RERMTD1OdGREREfIrCjYiIiPgUhRsRERHxKQo3IiIi4lMUbkRERMSnKNyIiIiITyl389y4XC72799PeHg4NpvN6nJERESkBAzDID09napVq56xCO9flbtws3//fhISEqwuQ0RERC7Cnj17iI+PL/aYchduTk7zvmfPHiIiIiyuRkREREoiLS2NhISEEi2KW+7CzclbUREREQo3IiIiZUxJupSoQ7GIiIj4FIUbERER8SkKNyIiIuJTyl2fm5JyOp3k5eVZXUaZFBAQgN1ut7oMEREppxRu/sIwDJKTkzl+/LjVpZRpUVFRxMXFaS4hERHxOIWbvzgZbCpXrkxISIi+nC+QYRhkZWWRkpICQJUqVSyuSEREyhuFm9M4nc7CYBMTE2N1OWVWcHAwACkpKVSuXFm3qERExKPUofg0J/vYhISEWFxJ2Xfyd6h+SyIi4mkKN2ehW1GXTr9DERGxisKNiIiI+BSFGzlDzZo1eeONN6wuQ0RE5KKoQ7GPuO6662jRooVbQsmKFSsIDQ299KJEREQsoHBTThiGgdPpxN///P/klSpV8kBFIiJSKvKyISDI6iospdtSPmDgwIEsXLiQsWPHYrPZsNlsTJw4EZvNxvfff8/ll1+Ow+Fg0aJFbN++nVtvvZXY2FjCwsK44oor+Omnn4qc76+3pWw2Gx988AG33XYbISEh1KtXj2+++cbDn1JERIplGPD9k/ByDVg31epqLKVwcx6GYZCVm+/xh2EYJa5x7NixtGnT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\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"model.evaluate(test_generator)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "dE5ZGh55bCnu",
"outputId": "828d7292-fe63-4942-fa46-747506acc07e"
},
"execution_count": 66,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"7/7 [==============================] - 2s 199ms/step - loss: 2.3318 - accuracy: 0.2388\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[2.3317646980285645, 0.23880596458911896]"
]
},
"metadata": {},
"execution_count": 66
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "vP3Jp6GOd2lI"
},
"execution_count": 66,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"#InceptionV3"
],
"metadata": {
"id": "c8j2qrtGd22A"
}
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"id": "Yf2_IKjid22B"
},
"outputs": [],
"source": [
"import keras \n",
"from keras.datasets import mnist\n",
"from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D\n",
"from keras.layers import Dense, Flatten\n",
"from keras import optimizers\n",
"from keras.models import Sequential\n",
"from keras.layers import Input, Lambda, Dense, Flatten, Dropout\n",
"from keras.models import Model\n",
"from keras.applications.inception_v3 import InceptionV3\n",
"from keras.preprocessing import image\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"from keras.models import Sequential\n",
"import numpy as np\n",
"from glob import glob\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"source": [
"import pandas as pd\n",
"import os\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"\n",
"\n",
"def append_ext(fn):\n",
" return fn + \".jpg\"\n",
"\n",
"\n",
"traindf = pd.read_csv(\"train/train.csv\", dtype=str)\n",
"testdf = pd.read_csv(\"test/test.csv\", dtype=str)\n",
"traindf[\"img\"] = traindf[\"img\"].apply(append_ext)\n",
"testdf[\"img\"] = testdf[\"img\"].apply(append_ext)\n",
"\n",
"datagen = ImageDataGenerator(rescale=1.0 / 255.0, validation_split=0.10)\n",
"\n",
"train_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"training\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"valid_generator = datagen.flow_from_dataframe(\n",
" dataframe=traindf,\n",
" directory=\"train/train_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" subset=\"validation\",\n",
" batch_size=32,\n",
" seed=42,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n",
"\n",
"test_datagen = ImageDataGenerator(rescale=1.0 / 255.0)\n",
"\n",
"test_generator = test_datagen.flow_from_dataframe(\n",
" dataframe=testdf,\n",
" directory=\"test/test_dataset/\",\n",
" x_col=\"img\",\n",
" y_col=\"classname\",\n",
" batch_size=32,\n",
" seed=42,\n",
" shuffle=False,\n",
" class_mode=\"categorical\",\n",
" target_size=(IMAGE_SIZE[0], IMAGE_SIZE[1]),\n",
")\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "345009ca-9ea1-4f73-e535-4951c0faa320",
"id": "5vLLlXP5d22D"
},
"execution_count": 68,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Found 646 validated image filenames belonging to 10 classes.\n",
"Found 71 validated image filenames belonging to 10 classes.\n",
"Found 201 validated image filenames belonging to 10 classes.\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size\n",
"STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size\n",
"STEP_SIZE_TEST=test_generator.n//test_generator.batch_size"
],
"metadata": {
"id": "Vi84wptVd22E"
},
"execution_count": 69,
"outputs": []
},
{
"cell_type": "code",
"source": [
"IMAGE_SIZE = [120, 90]\n",
"inception = InceptionV3(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)\n",
"#here [3] denotes for RGB images(3 channels)\n",
"\n",
"#don't train existing weights\n",
"for layer in inception.layers:\n",
" layer.trainable = False\n",
" \n",
"x = Flatten()(inception.output)\n",
"x = Dense(512, activation='relu')(x)\n",
"x = Dropout(0.5)(x) # Dropout layer to reduce overfitting\n",
"x = Dense(256, activation='relu')(x)\n",
"x = Dropout(0.5)(x) # Dropout layer to reduce overfitting\n",
"prediction = Dense(10, activation='softmax')(x)\n",
"model = Model(inputs=inception.input, outputs=prediction)\n",
"model.compile(loss='categorical_crossentropy',\n",
" optimizer=optimizers.Adam(),\n",
" metrics=['accuracy'])\n",
"model.summary()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e284fbce-53d1-4b05-8400-d1bc8b402761",
"id": "AIpipa6Rd22C"
},
"execution_count": 70,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/inception_v3/inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
"87910968/87910968 [==============================] - 0s 0us/step\n",
"Model: \"model_11\"\n",
"__________________________________________________________________________________________________\n",
" Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
" input_13 (InputLayer) [(None, 120, 90, 3) 0 [] \n",
" ] \n",
" \n",
" conv2d_28 (Conv2D) (None, 59, 44, 32) 864 ['input_13[0][0]'] \n",
" \n",
" batch_normalization_55 (BatchN (None, 59, 44, 32) 96 ['conv2d_28[0][0]'] \n",
" ormalization) \n",
" \n",
" activation (Activation) (None, 59, 44, 32) 0 ['batch_normalization_55[0][0]'] \n",
" \n",
" conv2d_29 (Conv2D) (None, 57, 42, 32) 9216 ['activation[0][0]'] \n",
" \n",
" batch_normalization_56 (BatchN (None, 57, 42, 32) 96 ['conv2d_29[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_1 (Activation) (None, 57, 42, 32) 0 ['batch_normalization_56[0][0]'] \n",
" \n",
" conv2d_30 (Conv2D) (None, 57, 42, 64) 18432 ['activation_1[0][0]'] \n",
" \n",
" batch_normalization_57 (BatchN (None, 57, 42, 64) 192 ['conv2d_30[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_2 (Activation) (None, 57, 42, 64) 0 ['batch_normalization_57[0][0]'] \n",
" \n",
" max_pooling2d (MaxPooling2D) (None, 28, 20, 64) 0 ['activation_2[0][0]'] \n",
" \n",
" conv2d_31 (Conv2D) (None, 28, 20, 80) 5120 ['max_pooling2d[0][0]'] \n",
" \n",
" batch_normalization_58 (BatchN (None, 28, 20, 80) 240 ['conv2d_31[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_3 (Activation) (None, 28, 20, 80) 0 ['batch_normalization_58[0][0]'] \n",
" \n",
" conv2d_32 (Conv2D) (None, 26, 18, 192) 138240 ['activation_3[0][0]'] \n",
" \n",
" batch_normalization_59 (BatchN (None, 26, 18, 192) 576 ['conv2d_32[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_4 (Activation) (None, 26, 18, 192) 0 ['batch_normalization_59[0][0]'] \n",
" \n",
" max_pooling2d_1 (MaxPooling2D) (None, 12, 8, 192) 0 ['activation_4[0][0]'] \n",
" \n",
" conv2d_36 (Conv2D) (None, 12, 8, 64) 12288 ['max_pooling2d_1[0][0]'] \n",
" \n",
" batch_normalization_63 (BatchN (None, 12, 8, 64) 192 ['conv2d_36[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_8 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_63[0][0]'] \n",
" \n",
" conv2d_34 (Conv2D) (None, 12, 8, 48) 9216 ['max_pooling2d_1[0][0]'] \n",
" \n",
" conv2d_37 (Conv2D) (None, 12, 8, 96) 55296 ['activation_8[0][0]'] \n",
" \n",
" batch_normalization_61 (BatchN (None, 12, 8, 48) 144 ['conv2d_34[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_64 (BatchN (None, 12, 8, 96) 288 ['conv2d_37[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_6 (Activation) (None, 12, 8, 48) 0 ['batch_normalization_61[0][0]'] \n",
" \n",
" activation_9 (Activation) (None, 12, 8, 96) 0 ['batch_normalization_64[0][0]'] \n",
" \n",
" average_pooling2d (AveragePool (None, 12, 8, 192) 0 ['max_pooling2d_1[0][0]'] \n",
" ing2D) \n",
" \n",
" conv2d_33 (Conv2D) (None, 12, 8, 64) 12288 ['max_pooling2d_1[0][0]'] \n",
" \n",
" conv2d_35 (Conv2D) (None, 12, 8, 64) 76800 ['activation_6[0][0]'] \n",
" \n",
" conv2d_38 (Conv2D) (None, 12, 8, 96) 82944 ['activation_9[0][0]'] \n",
" \n",
" conv2d_39 (Conv2D) (None, 12, 8, 32) 6144 ['average_pooling2d[0][0]'] \n",
" \n",
" batch_normalization_60 (BatchN (None, 12, 8, 64) 192 ['conv2d_33[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_62 (BatchN (None, 12, 8, 64) 192 ['conv2d_35[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_65 (BatchN (None, 12, 8, 96) 288 ['conv2d_38[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_66 (BatchN (None, 12, 8, 32) 96 ['conv2d_39[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_5 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_60[0][0]'] \n",
" \n",
" activation_7 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_62[0][0]'] \n",
" \n",
" activation_10 (Activation) (None, 12, 8, 96) 0 ['batch_normalization_65[0][0]'] \n",
" \n",
" activation_11 (Activation) (None, 12, 8, 32) 0 ['batch_normalization_66[0][0]'] \n",
" \n",
" mixed0 (Concatenate) (None, 12, 8, 256) 0 ['activation_5[0][0]', \n",
" 'activation_7[0][0]', \n",
" 'activation_10[0][0]', \n",
" 'activation_11[0][0]'] \n",
" \n",
" conv2d_43 (Conv2D) (None, 12, 8, 64) 16384 ['mixed0[0][0]'] \n",
" \n",
" batch_normalization_70 (BatchN (None, 12, 8, 64) 192 ['conv2d_43[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_15 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_70[0][0]'] \n",
" \n",
" conv2d_41 (Conv2D) (None, 12, 8, 48) 12288 ['mixed0[0][0]'] \n",
" \n",
" conv2d_44 (Conv2D) (None, 12, 8, 96) 55296 ['activation_15[0][0]'] \n",
" \n",
" batch_normalization_68 (BatchN (None, 12, 8, 48) 144 ['conv2d_41[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_71 (BatchN (None, 12, 8, 96) 288 ['conv2d_44[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_13 (Activation) (None, 12, 8, 48) 0 ['batch_normalization_68[0][0]'] \n",
" \n",
" activation_16 (Activation) (None, 12, 8, 96) 0 ['batch_normalization_71[0][0]'] \n",
" \n",
" average_pooling2d_1 (AveragePo (None, 12, 8, 256) 0 ['mixed0[0][0]'] \n",
" oling2D) \n",
" \n",
" conv2d_40 (Conv2D) (None, 12, 8, 64) 16384 ['mixed0[0][0]'] \n",
" \n",
" conv2d_42 (Conv2D) (None, 12, 8, 64) 76800 ['activation_13[0][0]'] \n",
" \n",
" conv2d_45 (Conv2D) (None, 12, 8, 96) 82944 ['activation_16[0][0]'] \n",
" \n",
" conv2d_46 (Conv2D) (None, 12, 8, 64) 16384 ['average_pooling2d_1[0][0]'] \n",
" \n",
" batch_normalization_67 (BatchN (None, 12, 8, 64) 192 ['conv2d_40[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_69 (BatchN (None, 12, 8, 64) 192 ['conv2d_42[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_72 (BatchN (None, 12, 8, 96) 288 ['conv2d_45[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_73 (BatchN (None, 12, 8, 64) 192 ['conv2d_46[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_12 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_67[0][0]'] \n",
" \n",
" activation_14 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_69[0][0]'] \n",
" \n",
" activation_17 (Activation) (None, 12, 8, 96) 0 ['batch_normalization_72[0][0]'] \n",
" \n",
" activation_18 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_73[0][0]'] \n",
" \n",
" mixed1 (Concatenate) (None, 12, 8, 288) 0 ['activation_12[0][0]', \n",
" 'activation_14[0][0]', \n",
" 'activation_17[0][0]', \n",
" 'activation_18[0][0]'] \n",
" \n",
" conv2d_50 (Conv2D) (None, 12, 8, 64) 18432 ['mixed1[0][0]'] \n",
" \n",
" batch_normalization_77 (BatchN (None, 12, 8, 64) 192 ['conv2d_50[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_22 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_77[0][0]'] \n",
" \n",
" conv2d_48 (Conv2D) (None, 12, 8, 48) 13824 ['mixed1[0][0]'] \n",
" \n",
" conv2d_51 (Conv2D) (None, 12, 8, 96) 55296 ['activation_22[0][0]'] \n",
" \n",
" batch_normalization_75 (BatchN (None, 12, 8, 48) 144 ['conv2d_48[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_78 (BatchN (None, 12, 8, 96) 288 ['conv2d_51[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_20 (Activation) (None, 12, 8, 48) 0 ['batch_normalization_75[0][0]'] \n",
" \n",
" activation_23 (Activation) (None, 12, 8, 96) 0 ['batch_normalization_78[0][0]'] \n",
" \n",
" average_pooling2d_2 (AveragePo (None, 12, 8, 288) 0 ['mixed1[0][0]'] \n",
" oling2D) \n",
" \n",
" conv2d_47 (Conv2D) (None, 12, 8, 64) 18432 ['mixed1[0][0]'] \n",
" \n",
" conv2d_49 (Conv2D) (None, 12, 8, 64) 76800 ['activation_20[0][0]'] \n",
" \n",
" conv2d_52 (Conv2D) (None, 12, 8, 96) 82944 ['activation_23[0][0]'] \n",
" \n",
" conv2d_53 (Conv2D) (None, 12, 8, 64) 18432 ['average_pooling2d_2[0][0]'] \n",
" \n",
" batch_normalization_74 (BatchN (None, 12, 8, 64) 192 ['conv2d_47[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_76 (BatchN (None, 12, 8, 64) 192 ['conv2d_49[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_79 (BatchN (None, 12, 8, 96) 288 ['conv2d_52[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_80 (BatchN (None, 12, 8, 64) 192 ['conv2d_53[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_19 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_74[0][0]'] \n",
" \n",
" activation_21 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_76[0][0]'] \n",
" \n",
" activation_24 (Activation) (None, 12, 8, 96) 0 ['batch_normalization_79[0][0]'] \n",
" \n",
" activation_25 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_80[0][0]'] \n",
" \n",
" mixed2 (Concatenate) (None, 12, 8, 288) 0 ['activation_19[0][0]', \n",
" 'activation_21[0][0]', \n",
" 'activation_24[0][0]', \n",
" 'activation_25[0][0]'] \n",
" \n",
" conv2d_55 (Conv2D) (None, 12, 8, 64) 18432 ['mixed2[0][0]'] \n",
" \n",
" batch_normalization_82 (BatchN (None, 12, 8, 64) 192 ['conv2d_55[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_27 (Activation) (None, 12, 8, 64) 0 ['batch_normalization_82[0][0]'] \n",
" \n",
" conv2d_56 (Conv2D) (None, 12, 8, 96) 55296 ['activation_27[0][0]'] \n",
" \n",
" batch_normalization_83 (BatchN (None, 12, 8, 96) 288 ['conv2d_56[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_28 (Activation) (None, 12, 8, 96) 0 ['batch_normalization_83[0][0]'] \n",
" \n",
" conv2d_54 (Conv2D) (None, 5, 3, 384) 995328 ['mixed2[0][0]'] \n",
" \n",
" conv2d_57 (Conv2D) (None, 5, 3, 96) 82944 ['activation_28[0][0]'] \n",
" \n",
" batch_normalization_81 (BatchN (None, 5, 3, 384) 1152 ['conv2d_54[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_84 (BatchN (None, 5, 3, 96) 288 ['conv2d_57[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_26 (Activation) (None, 5, 3, 384) 0 ['batch_normalization_81[0][0]'] \n",
" \n",
" activation_29 (Activation) (None, 5, 3, 96) 0 ['batch_normalization_84[0][0]'] \n",
" \n",
" max_pooling2d_2 (MaxPooling2D) (None, 5, 3, 288) 0 ['mixed2[0][0]'] \n",
" \n",
" mixed3 (Concatenate) (None, 5, 3, 768) 0 ['activation_26[0][0]', \n",
" 'activation_29[0][0]', \n",
" 'max_pooling2d_2[0][0]'] \n",
" \n",
" conv2d_62 (Conv2D) (None, 5, 3, 128) 98304 ['mixed3[0][0]'] \n",
" \n",
" batch_normalization_89 (BatchN (None, 5, 3, 128) 384 ['conv2d_62[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_34 (Activation) (None, 5, 3, 128) 0 ['batch_normalization_89[0][0]'] \n",
" \n",
" conv2d_63 (Conv2D) (None, 5, 3, 128) 114688 ['activation_34[0][0]'] \n",
" \n",
" batch_normalization_90 (BatchN (None, 5, 3, 128) 384 ['conv2d_63[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_35 (Activation) (None, 5, 3, 128) 0 ['batch_normalization_90[0][0]'] \n",
" \n",
" conv2d_59 (Conv2D) (None, 5, 3, 128) 98304 ['mixed3[0][0]'] \n",
" \n",
" conv2d_64 (Conv2D) (None, 5, 3, 128) 114688 ['activation_35[0][0]'] \n",
" \n",
" batch_normalization_86 (BatchN (None, 5, 3, 128) 384 ['conv2d_59[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_91 (BatchN (None, 5, 3, 128) 384 ['conv2d_64[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_31 (Activation) (None, 5, 3, 128) 0 ['batch_normalization_86[0][0]'] \n",
" \n",
" activation_36 (Activation) (None, 5, 3, 128) 0 ['batch_normalization_91[0][0]'] \n",
" \n",
" conv2d_60 (Conv2D) (None, 5, 3, 128) 114688 ['activation_31[0][0]'] \n",
" \n",
" conv2d_65 (Conv2D) (None, 5, 3, 128) 114688 ['activation_36[0][0]'] \n",
" \n",
" batch_normalization_87 (BatchN (None, 5, 3, 128) 384 ['conv2d_60[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_92 (BatchN (None, 5, 3, 128) 384 ['conv2d_65[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_32 (Activation) (None, 5, 3, 128) 0 ['batch_normalization_87[0][0]'] \n",
" \n",
" activation_37 (Activation) (None, 5, 3, 128) 0 ['batch_normalization_92[0][0]'] \n",
" \n",
" average_pooling2d_3 (AveragePo (None, 5, 3, 768) 0 ['mixed3[0][0]'] \n",
" oling2D) \n",
" \n",
" conv2d_58 (Conv2D) (None, 5, 3, 192) 147456 ['mixed3[0][0]'] \n",
" \n",
" conv2d_61 (Conv2D) (None, 5, 3, 192) 172032 ['activation_32[0][0]'] \n",
" \n",
" conv2d_66 (Conv2D) (None, 5, 3, 192) 172032 ['activation_37[0][0]'] \n",
" \n",
" conv2d_67 (Conv2D) (None, 5, 3, 192) 147456 ['average_pooling2d_3[0][0]'] \n",
" \n",
" batch_normalization_85 (BatchN (None, 5, 3, 192) 576 ['conv2d_58[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_88 (BatchN (None, 5, 3, 192) 576 ['conv2d_61[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_93 (BatchN (None, 5, 3, 192) 576 ['conv2d_66[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_94 (BatchN (None, 5, 3, 192) 576 ['conv2d_67[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_30 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_85[0][0]'] \n",
" \n",
" activation_33 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_88[0][0]'] \n",
" \n",
" activation_38 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_93[0][0]'] \n",
" \n",
" activation_39 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_94[0][0]'] \n",
" \n",
" mixed4 (Concatenate) (None, 5, 3, 768) 0 ['activation_30[0][0]', \n",
" 'activation_33[0][0]', \n",
" 'activation_38[0][0]', \n",
" 'activation_39[0][0]'] \n",
" \n",
" conv2d_72 (Conv2D) (None, 5, 3, 160) 122880 ['mixed4[0][0]'] \n",
" \n",
" batch_normalization_99 (BatchN (None, 5, 3, 160) 480 ['conv2d_72[0][0]'] \n",
" ormalization) \n",
" \n",
" activation_44 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_99[0][0]'] \n",
" \n",
" conv2d_73 (Conv2D) (None, 5, 3, 160) 179200 ['activation_44[0][0]'] \n",
" \n",
" batch_normalization_100 (Batch (None, 5, 3, 160) 480 ['conv2d_73[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_45 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_100[0][0]']\n",
" \n",
" conv2d_69 (Conv2D) (None, 5, 3, 160) 122880 ['mixed4[0][0]'] \n",
" \n",
" conv2d_74 (Conv2D) (None, 5, 3, 160) 179200 ['activation_45[0][0]'] \n",
" \n",
" batch_normalization_96 (BatchN (None, 5, 3, 160) 480 ['conv2d_69[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_101 (Batch (None, 5, 3, 160) 480 ['conv2d_74[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_41 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_96[0][0]'] \n",
" \n",
" activation_46 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_101[0][0]']\n",
" \n",
" conv2d_70 (Conv2D) (None, 5, 3, 160) 179200 ['activation_41[0][0]'] \n",
" \n",
" conv2d_75 (Conv2D) (None, 5, 3, 160) 179200 ['activation_46[0][0]'] \n",
" \n",
" batch_normalization_97 (BatchN (None, 5, 3, 160) 480 ['conv2d_70[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_102 (Batch (None, 5, 3, 160) 480 ['conv2d_75[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_42 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_97[0][0]'] \n",
" \n",
" activation_47 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_102[0][0]']\n",
" \n",
" average_pooling2d_4 (AveragePo (None, 5, 3, 768) 0 ['mixed4[0][0]'] \n",
" oling2D) \n",
" \n",
" conv2d_68 (Conv2D) (None, 5, 3, 192) 147456 ['mixed4[0][0]'] \n",
" \n",
" conv2d_71 (Conv2D) (None, 5, 3, 192) 215040 ['activation_42[0][0]'] \n",
" \n",
" conv2d_76 (Conv2D) (None, 5, 3, 192) 215040 ['activation_47[0][0]'] \n",
" \n",
" conv2d_77 (Conv2D) (None, 5, 3, 192) 147456 ['average_pooling2d_4[0][0]'] \n",
" \n",
" batch_normalization_95 (BatchN (None, 5, 3, 192) 576 ['conv2d_68[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_98 (BatchN (None, 5, 3, 192) 576 ['conv2d_71[0][0]'] \n",
" ormalization) \n",
" \n",
" batch_normalization_103 (Batch (None, 5, 3, 192) 576 ['conv2d_76[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_104 (Batch (None, 5, 3, 192) 576 ['conv2d_77[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_40 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_95[0][0]'] \n",
" \n",
" activation_43 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_98[0][0]'] \n",
" \n",
" activation_48 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_103[0][0]']\n",
" \n",
" activation_49 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_104[0][0]']\n",
" \n",
" mixed5 (Concatenate) (None, 5, 3, 768) 0 ['activation_40[0][0]', \n",
" 'activation_43[0][0]', \n",
" 'activation_48[0][0]', \n",
" 'activation_49[0][0]'] \n",
" \n",
" conv2d_82 (Conv2D) (None, 5, 3, 160) 122880 ['mixed5[0][0]'] \n",
" \n",
" batch_normalization_109 (Batch (None, 5, 3, 160) 480 ['conv2d_82[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_54 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_109[0][0]']\n",
" \n",
" conv2d_83 (Conv2D) (None, 5, 3, 160) 179200 ['activation_54[0][0]'] \n",
" \n",
" batch_normalization_110 (Batch (None, 5, 3, 160) 480 ['conv2d_83[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_55 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_110[0][0]']\n",
" \n",
" conv2d_79 (Conv2D) (None, 5, 3, 160) 122880 ['mixed5[0][0]'] \n",
" \n",
" conv2d_84 (Conv2D) (None, 5, 3, 160) 179200 ['activation_55[0][0]'] \n",
" \n",
" batch_normalization_106 (Batch (None, 5, 3, 160) 480 ['conv2d_79[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_111 (Batch (None, 5, 3, 160) 480 ['conv2d_84[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_51 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_106[0][0]']\n",
" \n",
" activation_56 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_111[0][0]']\n",
" \n",
" conv2d_80 (Conv2D) (None, 5, 3, 160) 179200 ['activation_51[0][0]'] \n",
" \n",
" conv2d_85 (Conv2D) (None, 5, 3, 160) 179200 ['activation_56[0][0]'] \n",
" \n",
" batch_normalization_107 (Batch (None, 5, 3, 160) 480 ['conv2d_80[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_112 (Batch (None, 5, 3, 160) 480 ['conv2d_85[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_52 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_107[0][0]']\n",
" \n",
" activation_57 (Activation) (None, 5, 3, 160) 0 ['batch_normalization_112[0][0]']\n",
" \n",
" average_pooling2d_5 (AveragePo (None, 5, 3, 768) 0 ['mixed5[0][0]'] \n",
" oling2D) \n",
" \n",
" conv2d_78 (Conv2D) (None, 5, 3, 192) 147456 ['mixed5[0][0]'] \n",
" \n",
" conv2d_81 (Conv2D) (None, 5, 3, 192) 215040 ['activation_52[0][0]'] \n",
" \n",
" conv2d_86 (Conv2D) (None, 5, 3, 192) 215040 ['activation_57[0][0]'] \n",
" \n",
" conv2d_87 (Conv2D) (None, 5, 3, 192) 147456 ['average_pooling2d_5[0][0]'] \n",
" \n",
" batch_normalization_105 (Batch (None, 5, 3, 192) 576 ['conv2d_78[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_108 (Batch (None, 5, 3, 192) 576 ['conv2d_81[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_113 (Batch (None, 5, 3, 192) 576 ['conv2d_86[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_114 (Batch (None, 5, 3, 192) 576 ['conv2d_87[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_50 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_105[0][0]']\n",
" \n",
" activation_53 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_108[0][0]']\n",
" \n",
" activation_58 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_113[0][0]']\n",
" \n",
" activation_59 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_114[0][0]']\n",
" \n",
" mixed6 (Concatenate) (None, 5, 3, 768) 0 ['activation_50[0][0]', \n",
" 'activation_53[0][0]', \n",
" 'activation_58[0][0]', \n",
" 'activation_59[0][0]'] \n",
" \n",
" conv2d_92 (Conv2D) (None, 5, 3, 192) 147456 ['mixed6[0][0]'] \n",
" \n",
" batch_normalization_119 (Batch (None, 5, 3, 192) 576 ['conv2d_92[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_64 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_119[0][0]']\n",
" \n",
" conv2d_93 (Conv2D) (None, 5, 3, 192) 258048 ['activation_64[0][0]'] \n",
" \n",
" batch_normalization_120 (Batch (None, 5, 3, 192) 576 ['conv2d_93[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_65 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_120[0][0]']\n",
" \n",
" conv2d_89 (Conv2D) (None, 5, 3, 192) 147456 ['mixed6[0][0]'] \n",
" \n",
" conv2d_94 (Conv2D) (None, 5, 3, 192) 258048 ['activation_65[0][0]'] \n",
" \n",
" batch_normalization_116 (Batch (None, 5, 3, 192) 576 ['conv2d_89[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_121 (Batch (None, 5, 3, 192) 576 ['conv2d_94[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_61 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_116[0][0]']\n",
" \n",
" activation_66 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_121[0][0]']\n",
" \n",
" conv2d_90 (Conv2D) (None, 5, 3, 192) 258048 ['activation_61[0][0]'] \n",
" \n",
" conv2d_95 (Conv2D) (None, 5, 3, 192) 258048 ['activation_66[0][0]'] \n",
" \n",
" batch_normalization_117 (Batch (None, 5, 3, 192) 576 ['conv2d_90[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_122 (Batch (None, 5, 3, 192) 576 ['conv2d_95[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_62 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_117[0][0]']\n",
" \n",
" activation_67 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_122[0][0]']\n",
" \n",
" average_pooling2d_6 (AveragePo (None, 5, 3, 768) 0 ['mixed6[0][0]'] \n",
" oling2D) \n",
" \n",
" conv2d_88 (Conv2D) (None, 5, 3, 192) 147456 ['mixed6[0][0]'] \n",
" \n",
" conv2d_91 (Conv2D) (None, 5, 3, 192) 258048 ['activation_62[0][0]'] \n",
" \n",
" conv2d_96 (Conv2D) (None, 5, 3, 192) 258048 ['activation_67[0][0]'] \n",
" \n",
" conv2d_97 (Conv2D) (None, 5, 3, 192) 147456 ['average_pooling2d_6[0][0]'] \n",
" \n",
" batch_normalization_115 (Batch (None, 5, 3, 192) 576 ['conv2d_88[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_118 (Batch (None, 5, 3, 192) 576 ['conv2d_91[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_123 (Batch (None, 5, 3, 192) 576 ['conv2d_96[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_124 (Batch (None, 5, 3, 192) 576 ['conv2d_97[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_60 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_115[0][0]']\n",
" \n",
" activation_63 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_118[0][0]']\n",
" \n",
" activation_68 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_123[0][0]']\n",
" \n",
" activation_69 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_124[0][0]']\n",
" \n",
" mixed7 (Concatenate) (None, 5, 3, 768) 0 ['activation_60[0][0]', \n",
" 'activation_63[0][0]', \n",
" 'activation_68[0][0]', \n",
" 'activation_69[0][0]'] \n",
" \n",
" conv2d_100 (Conv2D) (None, 5, 3, 192) 147456 ['mixed7[0][0]'] \n",
" \n",
" batch_normalization_127 (Batch (None, 5, 3, 192) 576 ['conv2d_100[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_72 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_127[0][0]']\n",
" \n",
" conv2d_101 (Conv2D) (None, 5, 3, 192) 258048 ['activation_72[0][0]'] \n",
" \n",
" batch_normalization_128 (Batch (None, 5, 3, 192) 576 ['conv2d_101[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_73 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_128[0][0]']\n",
" \n",
" conv2d_98 (Conv2D) (None, 5, 3, 192) 147456 ['mixed7[0][0]'] \n",
" \n",
" conv2d_102 (Conv2D) (None, 5, 3, 192) 258048 ['activation_73[0][0]'] \n",
" \n",
" batch_normalization_125 (Batch (None, 5, 3, 192) 576 ['conv2d_98[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_129 (Batch (None, 5, 3, 192) 576 ['conv2d_102[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_70 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_125[0][0]']\n",
" \n",
" activation_74 (Activation) (None, 5, 3, 192) 0 ['batch_normalization_129[0][0]']\n",
" \n",
" conv2d_99 (Conv2D) (None, 2, 1, 320) 552960 ['activation_70[0][0]'] \n",
" \n",
" conv2d_103 (Conv2D) (None, 2, 1, 192) 331776 ['activation_74[0][0]'] \n",
" \n",
" batch_normalization_126 (Batch (None, 2, 1, 320) 960 ['conv2d_99[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_130 (Batch (None, 2, 1, 192) 576 ['conv2d_103[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_71 (Activation) (None, 2, 1, 320) 0 ['batch_normalization_126[0][0]']\n",
" \n",
" activation_75 (Activation) (None, 2, 1, 192) 0 ['batch_normalization_130[0][0]']\n",
" \n",
" max_pooling2d_3 (MaxPooling2D) (None, 2, 1, 768) 0 ['mixed7[0][0]'] \n",
" \n",
" mixed8 (Concatenate) (None, 2, 1, 1280) 0 ['activation_71[0][0]', \n",
" 'activation_75[0][0]', \n",
" 'max_pooling2d_3[0][0]'] \n",
" \n",
" conv2d_108 (Conv2D) (None, 2, 1, 448) 573440 ['mixed8[0][0]'] \n",
" \n",
" batch_normalization_135 (Batch (None, 2, 1, 448) 1344 ['conv2d_108[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_80 (Activation) (None, 2, 1, 448) 0 ['batch_normalization_135[0][0]']\n",
" \n",
" conv2d_105 (Conv2D) (None, 2, 1, 384) 491520 ['mixed8[0][0]'] \n",
" \n",
" conv2d_109 (Conv2D) (None, 2, 1, 384) 1548288 ['activation_80[0][0]'] \n",
" \n",
" batch_normalization_132 (Batch (None, 2, 1, 384) 1152 ['conv2d_105[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_136 (Batch (None, 2, 1, 384) 1152 ['conv2d_109[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_77 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_132[0][0]']\n",
" \n",
" activation_81 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_136[0][0]']\n",
" \n",
" conv2d_106 (Conv2D) (None, 2, 1, 384) 442368 ['activation_77[0][0]'] \n",
" \n",
" conv2d_107 (Conv2D) (None, 2, 1, 384) 442368 ['activation_77[0][0]'] \n",
" \n",
" conv2d_110 (Conv2D) (None, 2, 1, 384) 442368 ['activation_81[0][0]'] \n",
" \n",
" conv2d_111 (Conv2D) (None, 2, 1, 384) 442368 ['activation_81[0][0]'] \n",
" \n",
" average_pooling2d_7 (AveragePo (None, 2, 1, 1280) 0 ['mixed8[0][0]'] \n",
" oling2D) \n",
" \n",
" conv2d_104 (Conv2D) (None, 2, 1, 320) 409600 ['mixed8[0][0]'] \n",
" \n",
" batch_normalization_133 (Batch (None, 2, 1, 384) 1152 ['conv2d_106[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_134 (Batch (None, 2, 1, 384) 1152 ['conv2d_107[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_137 (Batch (None, 2, 1, 384) 1152 ['conv2d_110[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_138 (Batch (None, 2, 1, 384) 1152 ['conv2d_111[0][0]'] \n",
" Normalization) \n",
" \n",
" conv2d_112 (Conv2D) (None, 2, 1, 192) 245760 ['average_pooling2d_7[0][0]'] \n",
" \n",
" batch_normalization_131 (Batch (None, 2, 1, 320) 960 ['conv2d_104[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_78 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_133[0][0]']\n",
" \n",
" activation_79 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_134[0][0]']\n",
" \n",
" activation_82 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_137[0][0]']\n",
" \n",
" activation_83 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_138[0][0]']\n",
" \n",
" batch_normalization_139 (Batch (None, 2, 1, 192) 576 ['conv2d_112[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_76 (Activation) (None, 2, 1, 320) 0 ['batch_normalization_131[0][0]']\n",
" \n",
" mixed9_0 (Concatenate) (None, 2, 1, 768) 0 ['activation_78[0][0]', \n",
" 'activation_79[0][0]'] \n",
" \n",
" concatenate (Concatenate) (None, 2, 1, 768) 0 ['activation_82[0][0]', \n",
" 'activation_83[0][0]'] \n",
" \n",
" activation_84 (Activation) (None, 2, 1, 192) 0 ['batch_normalization_139[0][0]']\n",
" \n",
" mixed9 (Concatenate) (None, 2, 1, 2048) 0 ['activation_76[0][0]', \n",
" 'mixed9_0[0][0]', \n",
" 'concatenate[0][0]', \n",
" 'activation_84[0][0]'] \n",
" \n",
" conv2d_117 (Conv2D) (None, 2, 1, 448) 917504 ['mixed9[0][0]'] \n",
" \n",
" batch_normalization_144 (Batch (None, 2, 1, 448) 1344 ['conv2d_117[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_89 (Activation) (None, 2, 1, 448) 0 ['batch_normalization_144[0][0]']\n",
" \n",
" conv2d_114 (Conv2D) (None, 2, 1, 384) 786432 ['mixed9[0][0]'] \n",
" \n",
" conv2d_118 (Conv2D) (None, 2, 1, 384) 1548288 ['activation_89[0][0]'] \n",
" \n",
" batch_normalization_141 (Batch (None, 2, 1, 384) 1152 ['conv2d_114[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_145 (Batch (None, 2, 1, 384) 1152 ['conv2d_118[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_86 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_141[0][0]']\n",
" \n",
" activation_90 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_145[0][0]']\n",
" \n",
" conv2d_115 (Conv2D) (None, 2, 1, 384) 442368 ['activation_86[0][0]'] \n",
" \n",
" conv2d_116 (Conv2D) (None, 2, 1, 384) 442368 ['activation_86[0][0]'] \n",
" \n",
" conv2d_119 (Conv2D) (None, 2, 1, 384) 442368 ['activation_90[0][0]'] \n",
" \n",
" conv2d_120 (Conv2D) (None, 2, 1, 384) 442368 ['activation_90[0][0]'] \n",
" \n",
" average_pooling2d_8 (AveragePo (None, 2, 1, 2048) 0 ['mixed9[0][0]'] \n",
" oling2D) \n",
" \n",
" conv2d_113 (Conv2D) (None, 2, 1, 320) 655360 ['mixed9[0][0]'] \n",
" \n",
" batch_normalization_142 (Batch (None, 2, 1, 384) 1152 ['conv2d_115[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_143 (Batch (None, 2, 1, 384) 1152 ['conv2d_116[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_146 (Batch (None, 2, 1, 384) 1152 ['conv2d_119[0][0]'] \n",
" Normalization) \n",
" \n",
" batch_normalization_147 (Batch (None, 2, 1, 384) 1152 ['conv2d_120[0][0]'] \n",
" Normalization) \n",
" \n",
" conv2d_121 (Conv2D) (None, 2, 1, 192) 393216 ['average_pooling2d_8[0][0]'] \n",
" \n",
" batch_normalization_140 (Batch (None, 2, 1, 320) 960 ['conv2d_113[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_87 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_142[0][0]']\n",
" \n",
" activation_88 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_143[0][0]']\n",
" \n",
" activation_91 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_146[0][0]']\n",
" \n",
" activation_92 (Activation) (None, 2, 1, 384) 0 ['batch_normalization_147[0][0]']\n",
" \n",
" batch_normalization_148 (Batch (None, 2, 1, 192) 576 ['conv2d_121[0][0]'] \n",
" Normalization) \n",
" \n",
" activation_85 (Activation) (None, 2, 1, 320) 0 ['batch_normalization_140[0][0]']\n",
" \n",
" mixed9_1 (Concatenate) (None, 2, 1, 768) 0 ['activation_87[0][0]', \n",
" 'activation_88[0][0]'] \n",
" \n",
" concatenate_1 (Concatenate) (None, 2, 1, 768) 0 ['activation_91[0][0]', \n",
" 'activation_92[0][0]'] \n",
" \n",
" activation_93 (Activation) (None, 2, 1, 192) 0 ['batch_normalization_148[0][0]']\n",
" \n",
" mixed10 (Concatenate) (None, 2, 1, 2048) 0 ['activation_85[0][0]', \n",
" 'mixed9_1[0][0]', \n",
" 'concatenate_1[0][0]', \n",
" 'activation_93[0][0]'] \n",
" \n",
" flatten_11 (Flatten) (None, 4096) 0 ['mixed10[0][0]'] \n",
" \n",
" dense_33 (Dense) (None, 512) 2097664 ['flatten_11[0][0]'] \n",
" \n",
" dropout_68 (Dropout) (None, 512) 0 ['dense_33[0][0]'] \n",
" \n",
" dense_34 (Dense) (None, 256) 131328 ['dropout_68[0][0]'] \n",
" \n",
" dropout_69 (Dropout) (None, 256) 0 ['dense_34[0][0]'] \n",
" \n",
" dense_35 (Dense) (None, 10) 2570 ['dropout_69[0][0]'] \n",
" \n",
"==================================================================================================\n",
"Total params: 24,034,346\n",
"Trainable params: 2,231,562\n",
"Non-trainable params: 21,802,784\n",
"__________________________________________________________________________________________________\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from datetime import datetime\n",
"from keras.callbacks import ModelCheckpoint, LearningRateScheduler\n",
"from keras.callbacks import ReduceLROnPlateau\n",
"lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1),\n",
" cooldown=0,\n",
" patience=5,\n",
" min_lr=0.5e-6)\n",
"checkpoint = ModelCheckpoint(filepath='mymodel.h5', \n",
" verbose=1, save_best_only=True)\n",
"callbacks = [checkpoint, lr_reducer]\n",
"start = datetime.now()\n",
"history = model.fit(train_generator, \n",
" steps_per_epoch=STEP_SIZE_TRAIN, \n",
" epochs=15,\n",
" validation_data=valid_generator, \n",
" validation_steps=STEP_SIZE_VALID)\n",
"\n",
"duration = datetime.now() - start\n",
"print(\"Training completed in time: \", duration)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "6bf6cdf6-cf77-48f8-fda2-2209a4db7952",
"id": "-IvCSyBfd22E"
},
"execution_count": 71,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 1/15\n",
"20/20 [==============================] - 12s 287ms/step - loss: 4.3260 - accuracy: 0.1124 - val_loss: 3.6845 - val_accuracy: 0.0000e+00\n",
"Epoch 2/15\n",
"20/20 [==============================] - 5s 242ms/step - loss: 2.4837 - accuracy: 0.1953 - val_loss: 3.5353 - val_accuracy: 0.0000e+00\n",
"Epoch 3/15\n",
"20/20 [==============================] - 4s 176ms/step - loss: 2.1078 - accuracy: 0.2394 - val_loss: 3.4366 - val_accuracy: 0.0000e+00\n",
"Epoch 4/15\n",
"20/20 [==============================] - 4s 187ms/step - loss: 1.9269 - accuracy: 0.3078 - val_loss: 3.8367 - val_accuracy: 0.0000e+00\n",
"Epoch 5/15\n",
"20/20 [==============================] - 4s 226ms/step - loss: 1.7789 - accuracy: 0.3469 - val_loss: 4.8475 - val_accuracy: 0.0000e+00\n",
"Epoch 6/15\n",
"20/20 [==============================] - 4s 178ms/step - loss: 1.7295 - accuracy: 0.3713 - val_loss: 4.7843 - val_accuracy: 0.0000e+00\n",
"Epoch 7/15\n",
"20/20 [==============================] - 4s 186ms/step - loss: 1.5397 - accuracy: 0.4691 - val_loss: 5.4312 - val_accuracy: 0.0000e+00\n",
"Epoch 8/15\n",
"20/20 [==============================] - 5s 238ms/step - loss: 1.4085 - accuracy: 0.4902 - val_loss: 5.7748 - val_accuracy: 0.0000e+00\n",
"Epoch 9/15\n",
"20/20 [==============================] - 4s 188ms/step - loss: 1.4128 - accuracy: 0.5130 - val_loss: 5.5918 - val_accuracy: 0.0000e+00\n",
"Epoch 10/15\n",
"20/20 [==============================] - 4s 187ms/step - loss: 1.2666 - accuracy: 0.5537 - val_loss: 5.9124 - val_accuracy: 0.0000e+00\n",
"Epoch 11/15\n",
"20/20 [==============================] - 5s 229ms/step - loss: 1.1574 - accuracy: 0.6124 - val_loss: 5.5529 - val_accuracy: 0.0000e+00\n",
"Epoch 12/15\n",
"20/20 [==============================] - 4s 187ms/step - loss: 1.0105 - accuracy: 0.6352 - val_loss: 6.0008 - val_accuracy: 0.0000e+00\n",
"Epoch 13/15\n",
"20/20 [==============================] - 4s 194ms/step - loss: 1.0163 - accuracy: 0.6359 - val_loss: 5.6425 - val_accuracy: 0.0000e+00\n",
"Epoch 14/15\n",
"20/20 [==============================] - 5s 256ms/step - loss: 0.8043 - accuracy: 0.7134 - val_loss: 6.9348 - val_accuracy: 0.0000e+00\n",
"Epoch 15/15\n",
"20/20 [==============================] - 4s 189ms/step - loss: 0.7776 - accuracy: 0.7182 - val_loss: 7.4034 - val_accuracy: 0.0000e+00\n",
"Training completed in time: 0:01:14.398562\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# list all data in history\n",
"print(history.history.keys())\n",
"# summarize history for accuracy\n",
"plt.plot(history.history['accuracy'])\n",
"plt.plot(history.history['val_accuracy'])\n",
"plt.title('model accuracy')\n",
"plt.ylabel('accuracy')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()\n",
"# summarize history for loss\n",
"plt.plot(history.history['loss'])\n",
"plt.plot(history.history['val_loss'])\n",
"plt.title('model loss')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 944
},
"outputId": "1dba9bda-9629-4b13-e912-d621a636d7db",
"id": "v_6vlqh6d22E"
},
"execution_count": 72,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAHHCAYAAACRAnNyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABYtElEQVR4nO3dd3hUVf7H8fek90oqCQmdAKEGlaKIgCgI9raosLafLvbVta0KFkB3cbEgthXdXV11lY6ogHQF6b2X0EkgnZA2c39/3CQQagjJ3EnyeT3PPLn3zp2Z742a+XjOuefYDMMwEBEREXFBblYXICIiInI2CioiIiLishRURERExGUpqIiIiIjLUlARERERl6WgIiIiIi5LQUVERERcloKKiIiIuCwFFREREXFZCioi4lS7d+/GZrPx+eefX/Br582bh81mY968eec87/PPP8dms7F79+4q1SgirkNBRURERFyWgoqIiIi4LAUVERERcVkKKiL1zPDhw7HZbGzdupW77rqL4OBgIiIieOmllzAMg71793L99dcTFBREdHQ0Y8aMOe090tLSuO+++4iKisLHx4f27dvzxRdfnHZeVlYWQ4cOJTg4mJCQEIYMGUJWVtYZ69q8eTO33HILYWFh+Pj4kJKSwtSpU6v12j/44APatGmDt7c3sbGxDBs27LR6tm3bxs0330x0dDQ+Pj7ExcVxxx13kJ2dXX7OrFmz6NGjByEhIQQEBNCyZUteeOGFaq1VREweVhcgIta4/fbbSUpKYvTo0cyYMYPXX3+dsLAwPvroI6666irefPNNvvzyS55++mm6dOnCFVdcAcDx48e58sor2b59O4888giNGzfmf//7H0OHDiUrK4vHH38cAMMwuP7661m0aBEPPfQQSUlJTJo0iSFDhpxWy4YNG+jevTsNGzbkueeew9/fn2+//ZYbbriB77//nhtvvPGir3f48OGMGDGCPn368PDDD7NlyxbGjx/PsmXLWLx4MZ6enhQVFdGvXz8KCwt59NFHiY6OZv/+/UyfPp2srCyCg4PZsGED1113He3atePVV1/F29ub7du3s3jx4ouuUUTOwBCReuWVV14xAOPBBx8sP1ZSUmLExcUZNpvNGD16dPnxzMxMw9fX1xgyZEj5sbFjxxqA8Z///Kf8WFFRkdG1a1cjICDAyMnJMQzDMCZPnmwAxltvvVXhcy6//HIDMCZMmFB+vHfv3kZycrJRUFBQfszhcBjdunUzmjdvXn5s7ty5BmDMnTv3nNc4YcIEAzB27dplGIZhpKWlGV5eXsbVV19t2O328vPef/99AzA+++wzwzAMY9WqVQZg/O9//zvre//jH/8wACM9Pf2cNYhI9VDXj0g9df/995dvu7u7k5KSgmEY3HfffeXHQ0JCaNmyJTt37iw/9sMPPxAdHc2dd95ZfszT05PHHnuMvLw85s+fX36eh4cHDz/8cIXPefTRRyvUkZGRwS+//MJtt91Gbm4uR44c4ciRIxw9epR+/fqxbds29u/ff1HXOnv2bIqKinjiiSdwczvxZ++BBx4gKCiIGTNmABAcHAzATz/9RH5+/hnfKyQkBIApU6bgcDguqi4ROT8FFZF6qlGjRhX2g4OD8fHxoUGDBqcdz8zMLN9PTU2lefPmFb7wAZKSksqfL/sZExNDQEBAhfNatmxZYX/79u0YhsFLL71EREREhccrr7wCmGNiLkZZTad+tpeXF02aNCl/vnHjxjz11FN8+umnNGjQgH79+jFu3LgK41Nuv/12unfvzv33309UVBR33HEH3377rUKLSA3RGBWResrd3b1Sx8Acb1JTyr7gn376afr163fGc5o1a1Zjn3+qMWPGMHToUKZMmcLPP//MY489xqhRo1iyZAlxcXH4+vqyYMEC5s6dy4wZM/jxxx/55ptvuOqqq/j555/P+jsUkapRi4qIXJCEhAS2bdt2WgvC5s2by58v+3nw4EHy8vIqnLdly5YK+02aNAHM7qM+ffqc8REYGHjRNZ/ps4uKiti1a1f582WSk5P561//yoIFC1i4cCH79+/nww8/LH/ezc2N3r178/bbb7Nx40beeOMNfvnlF+bOnXtRdYrI6RRUROSC9O/fn0OHDvHNN9+UHyspKeG9994jICCAnj17lp9XUlLC+PHjy8+z2+289957Fd4vMjKSK6+8ko8++oiDBw+e9nnp6ekXXXOfPn3w8vLi3XffrdA69M9//pPs7GwGDBgAQE5ODiUlJRVem5ycjJubG4WFhYA5puZUHTp0ACg/R0Sqj7p+ROSCPPjgg3z00UcMHTqUFStWkJiYyHfffcfixYsZO3ZseevHwIED6d69O8899xy7d++mdevWTJw4scJ4jzLjxo2jR48eJCcn88ADD9CkSRMOHz7Mb7/9xr59+1izZs1F1RwREcHzzz/PiBEjuOaaaxg0aBBbtmzhgw8+oEuXLtx1110A/PLLLzzyyCPceuuttGjRgpKSEv7973/j7u7OzTffDMCrr77KggULGDBgAAkJCaSlpfHBBx8QFxdHjx49LqpOETmdgoqIXBBfX1/mzZvHc889xxdffEFOTg4tW7ZkwoQJDB06tPw8Nzc3pk6dyhNPPMF//vMfbDYbgwYNYsyYMXTs2LHCe7Zu3Zrly5czYsQIPv/8c44ePUpkZCQdO3bk5Zdfrpa6hw8fTkREBO+//z5PPvkkYWFhPPjgg4wcORJPT08A2rdvT79+/Zg2bRr79+/Hz8+P9u3bM3PmTC677DIABg0axO7du/nss884cuQIDRo0oGfPnowYMaL8riERqT42oyZHyYmIiIhcBI1REREREZeloCIiIiIuS0FFREREXJaCioiIiLgsBRURERFxWQoqIiIi4rJq9TwqDoeDAwcOEBgYiM1ms7ocERERqQTDMMjNzSU2Nva0BU5PVauDyoEDB4iPj7e6DBEREamCvXv3EhcXd85zanVQKZuqe+/evQQFBVlcjYiIiFRGTk4O8fHxlVpwtFYHlbLunqCgIAUVERGRWqYywzY0mFZERERcloKKiIiIuCwFFREREXFZtXqMSmXZ7XaKi4utLqNW8vT0xN3d3eoyRESknqrTQcUwDA4dOkRWVpbVpdRqISEhREdHa64aERFxujodVMpCSmRkJH5+fvqivUCGYZCfn09aWhoAMTExFlckIiL1TZ0NKna7vTykhIeHW11OreXr6wtAWloakZGR6gYSERGnqrODacvGpPj5+VlcSe1X9jvUOB8REXG2OhtUyqi75+LpdygiIlap80FFREREai8FlTouMTGRsWPHWl2GiIhIldTZwbS12ZVXXkmHDh2qJWAsW7YMf3//iy9KRETEAmpRqYUMw6CkpKRS50ZERGhAsYiIVM2OX6D4uKUlKKi4mKFDhzJ//nzeeecdbDYbNpuNzz//HJvNxsyZM+ncuTPe3t4sWrSIHTt2cP311xMVFUVAQABdunRh9uzZFd7v1K4fm83Gp59+yo033oifnx/Nmzdn6tSpTr5KERFxaSWF8OPz8O8b4acXLC2lXgUVwzDILypx+sMwjErX+M4779C1a1ceeOABDh48yMGDB4mPjwfgueeeY/To0WzatIl27dqRl5dH//79mTNnDqtWreKaa65h4MCB7Nmz55yfMWLECG677TbWrl1L//79GTx4MBkZGRf1uxURkTri6A7459Ww5ANz38MXHA7LyqlXY1SOF9tp/fJPTv/cja/2w8+rcr/q4OBgvLy88PPzIzo6GoDNmzcD8Oqrr9K3b9/yc8PCwmjfvn35/muvvcakSZOYOnUqjzzyyFk/Y+jQodx5550AjBw5knfffZfff/+da6655oKvTURE6pB138G0J6AoF3zD4Ibx0NLa74Z6FVRqu5SUlAr7eXl5DB8+nBkzZnDw4EFKSko4fvz4eVtU2rVrV77t7+9PUFBQ+TT5IiJSDxXlw8y/wKp/m/uNusHNn0JwQ2vrop4FFV9Pdza+2s+Sz60Op9698/TTTzNr1iz+/ve/06xZM3x9fbnlllsoKio65/t4enpW2LfZbDgsbNYTERELHd4I3/0R0jcDNrjiGej5LLi7RkRwjSqcxGazVboLxkpeXl7Y7fbznrd48WKGDh3KjTfeCJgtLLt3767h6kREpE4wDFj5Bcx8FkoKICAKbvoEmvS0urIKXP9bux5KTExk6dKl7N69m4CAgLO2djRv3pyJEycycOBAbDYbL730klpGRETk/AqyzbEoGyaa+017w40fQUCEpWWdSb2666e2ePrpp3F3d6d169ZEREScdczJ22+/TWhoKN26dWPgwIH069ePTp06OblaERGpVfavgI+uMEOKmwf0fRUGf+eSIQXAZlzIvbMuJicnh+DgYLKzswkKCqrwXEFBAbt27aJx48b4+PhYVGHdoN+liEgdYBjw2ziYPRwcxRDSCG7+DOK7OL2Uc31/n0pdPyIiInXdsaMw+WHYVjpFR9IgGPQe+IZYWlZlKKiIiIjUZbsXw/f3Q+4BcPeGa0ZCyn1gs1ldWaUoqIiIiNRFDjss+DvMHw2GA8Kbw60TIDrZ6souiIKKiIhIXZNzECY+ALsXmvsdBkP/v4GX/7lf54IUVEREROqSbbNg0v9B/lHw9Ifr3ob2d1hdVZUpqIiIiNQFJUXwy6vw63vmflSy2dXToLm1dV0kBRUREZHaLnM3fHevOUcKwCUPQt/XwLP2TymhoCIiIlKbbZgMUx+DwmzwCYbrx0HSQKurqjaWzkybmJiIzWY77TFs2DAryxIREXF9xcdh+pPwvyFmSIm7BB5aVKdCCljcorJs2bIKi++tX7+evn37cuutt1pYlYiIiItL3wL/+yOkbTD3ezwJvV4Ed09r66oBlgaViIiK6wqMHj2apk2b0rOna63c6GxXXnklHTp0YOzYsdXyfkOHDiUrK4vJkydXy/uJiIhFDANWfwU/PA3F+eAfYS4m2Ky31ZXVGJcZo1JUVMR//vMfnnrqKWxnmS2vsLCQwsLC8v2cnBxnlSciImKtwlyY8WdY+42537gn3PQJBEZZW1cNc5nVkydPnkxWVhZDhw496zmjRo0iODi4/BEfH++8Ap1k6NChzJ8/n3feead8zM7u3btZv3491157LQEBAURFRXH33Xdz5MiR8td99913JCcn4+vrS3h4OH369OHYsWMMHz6cL774gilTppS/37x586y7QBERuXAH18BHPc2QYnOHq16CuyfV+ZACLrR6cr9+/fDy8mLatGlnPedMLSrx8fGVXz3ZMMymMmfz9Kv0mgrZ2dlce+21tG3blldffdV8uacnSUlJ3H///dxzzz0cP36cZ599lpKSEn755RcOHjxIo0aNeOutt7jxxhvJzc1l4cKF3HPPPQDcd9995OTkMGHCBADCwsLw8vKqdPlaPVlExCKGAb9/DD//FexFEBQHN38KCV2truyi1LrVk1NTU5k9ezYTJ04853ne3t54e3tX/YOK82FkbNVfX1UvHKj0tMXBwcF4eXnh5+dHdHQ0AK+//jodO3Zk5MiR5ed99tlnxMfHs3XrVvLy8igpKeGmm24iISEBgOTkE2s5+Pr6UlhYWP5+IiJSCxzPginDYPN0c79lf/PWY78wS8tyNpcIKhMmTCAyMpIBAwZYXYpLWrNmDXPnziUgIOC053bs2MHVV19N7969SU5Opl+/flx99dXccssthIaGWlCtiIhUi2mPmyHF3cucvO3S/6s1Kx5XJ8uDisPhYMKECQwZMgQPjxoux9PPbN1wNk+/i3p5Xl4eAwcO5M033zztuZiYGNzd3Zk1axa//vorP//8M++99x4vvvgiS5cupXHjxhf12SIiYoHDG2HjZHN7yDRodJml5VjJ8qAye/Zs9uzZw7333lvzH2az1YqVI728vCrML9OpUye+//57EhMTzxrmbDYb3bt3p3v37rz88sskJCQwadIknnrqqdPeT0REXNyCv5k/W19fr0MKuMBdP1dffTWGYdCi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+vTp2O328r+LYWFheHl5WVV2tTnfP/9Tg5mnpyfR0dG0bNnSOQU67f6iWuS9994zGjVqZHh5eRmXXHKJsWTJEqtLchrgjI8JEyZYXZpl6tvtyYZhGNOmTTPatm1reHt7G61atTI+/vhjq0tympycHOPxxx83GjVqZPj4+BhNmjQxXnzxRaOwsNDq0mrM3Llzz/jf/ZAhQwzDMG9Rfumll4yoqCjD29vb6N27t7FlyxZri65G57r+Xbt2nfXv4ty5c60uvVqc75//qZx9e7LNMOrwdIsiIiJSq2mMioiIiLgsBRURERFxWQoqIiIi4rIUVERERMRlKaiIiIiIy1JQEREREZeloCIiIiIuS0FFROqUefPmYbPZyMrKsroUEakGCioiIiLishRURERExGUpqIhItXI4HIwaNYrGjRvj6+tL+/bt+e6774AT3TIzZsygXbt2+Pj4cNlll7F+/foK7/H999/Tpk0bvL29SUxMZMyYMRWeLyws5NlnnyU+Ph5vb2+aNWvGP//5zwrnrFixgpSUFPz8/OjWrdtpK0KLSO2goCIi1WrUqFH861//4sMPP2TDhg08+eST3HXXXcyfP7/8nGeeeYYxY8awbNkyIiIiGDhwIMXFxYAZMG677TbuuOMO1q1bx/Dhw3nppZf4/PPPy19/zz338N///pd3332XTZs28dFHHxEQEFChjhdffJExY8awfPlyPDw86vTqxyJ1mtOWPxSROq+goMDw8/Mzfv311wrH77vvPuPOO+8sX6X166+/Ln/u6NGjhq+vr/HNN98YhmEYf/jDH4y+fftWeP0zzzxjtG7d2jAMw9iyZYsBGLNmzTpjDWWfMXv27PJjM2bMMADj+PHj1XKdIuI8alERkWqzfft28vPz6du3LwEBAeWPf/3rX+zYsaP8vK5du5Zvh4WF0bJlSzZt2gTApk2b6N69e4X37d69O9u2bcNut7N69Wrc3d3p2bPnOWtp165d+XZMTAwAaWlpF32NIuJcHlYXICJ1R15eHgAzZsygYcOGFZ7z9vauEFaqytfXt1LneXp6lm/bbDbAHD8jIrWLWlREpNq0bt0ab29v9uzZQ7NmzSo84uPjy89bsmRJ+XZmZiZbt24lKSkJgKSkJBYvXlzhfRcvXkyLFi1wd3cnOTkZh8NRYcyLiNRdalERkWoTGBjI008/zZNPPonD4aBHjx5kZ2ezePFigoKCSEhIAODVV18lPDycqKgoXnzxRRo0aMANN9wAwJ///Ge6dOnCa6+9xu23385vv/3G+++/zwcffABAYmIiQ4YM4d577+Xdd9+lffv2pKamkpaWxm233WbVpYtIDVFQEZFq9dprrxEREcGoUaPYuXMnISEhdOrUiRdeeKG862X06NE8/vjjbNu2jQ4dOjBt2jS8vLwA6NSpE99++y0vv/wyr732GjExMbz66qsMHTq0/DPGjx/PCy+8wJ/+9CeOHj1Ko0aNeOGFF6y4XBGpYTbDMAyrixCR+mHevHn06tWLzMxMQkJCrC5HRGoBjVERERERl6WgIiIiIi5LXT8iIiListSiIiIiIi5LQUVERERcloKKiIiIuCwFFREREXFZCioiIiLishRURERExGUpqIiIiIjLUlARERERl6WgIiIiIi7r/wF04hunmJt1RQAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"model.evaluate(test_generator)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "b5504d07-5688-483f-d8cb-b11b2098e460",
"id": "ykB_E06Vd22F"
},
"execution_count": 73,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"7/7 [==============================] - 2s 285ms/step - loss: 2.0405 - accuracy: 0.4677\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[2.040498971939087, 0.46766167879104614]"
]
},
"metadata": {},
"execution_count": 73
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "wL6Yq357y0fe"
},
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment