├── README.md ├── Transfer Learning Alexnet.ipynb ├── Transfer Learning VGG16.ipynb └── img ├── alex3.jpg ├── alex4.jpg └── alex512.png /README.md: -------------------------------------------------------------------------------- 1 | # Advanced-CNN-Architectures -------------------------------------------------------------------------------- /Transfer Learning Alexnet.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Transfer Learning Alexnet using Keras" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "#### Why does AlexNet achieve better results?\n", 15 | "\n", 16 | "1. **Relu activation function is used.**\n", 17 | "\n", 18 | "Relu function: f (x) = max (0, x)\n", 19 | "\n", 20 | "![alex1](img/alex512.png)\n", 21 | "\n", 22 | "ReLU-based deep convolutional networks are trained several times faster than tanh and sigmoid- based networks. The following figure shows the number of iterations for a four-layer convolutional network based on CIFAR-10 that reached 25% training error in tanh and ReLU:\n", 23 | "\n", 24 | "![alex1](img/alex612.png)\n", 25 | "\n", 26 | "2. **Standardization ( Local Response Normalization )**\n", 27 | "\n", 28 | "After using ReLU f (x) = max (0, x), you will find that the value after the activation function has no range like the tanh and sigmoid functions, so a normalization will usually be done after ReLU, and the LRU is a steady proposal (Not sure here, it should be proposed?) One method in neuroscience is called \"Lateral inhibition\", which talks about the effect of active neurons on its surrounding neurons.\n", 29 | "\n", 30 | "![alex1](img/alex3.jpg)\n", 31 | "\n", 32 | "\n", 33 | "3. **Dropout**\n", 34 | "\n", 35 | "Dropout is also a concept often said, which can effectively prevent overfitting of neural networks. Compared to the general linear model, a regular method is used to prevent the model from overfitting. In the neural network, Dropout is implemented by modifying the structure of the neural network itself. For a certain layer of neurons, randomly delete some neurons with a defined probability, while keeping the individuals of the input layer and output layer neurons unchanged, and then update the parameters according to the learning method of the neural network. In the next iteration, rerandom Remove some neurons until the end of training.\n", 36 | "\n", 37 | "\n", 38 | "![alex1](img/alex4.jpg)\n", 39 | "\n", 40 | "\n", 41 | "4. **Enhanced Data ( Data Augmentation )**\n", 42 | "\n", 43 | "\n", 44 | "\n", 45 | "**In deep learning, when the amount of data is not large enough, there are generally 4 solutions:**\n", 46 | "\n", 47 | ">  Data augmentation- artificially increase the size of the training set-create a batch of \"new\" data from existing data by means of translation, flipping, noise\n", 48 | "\n", 49 | ">  Regularization——The relatively small amount of data will cause the model to overfit, making the training error small and the test error particularly large. By adding a regular term after the Loss Function , the overfitting can be suppressed. The disadvantage is that a need is introduced Manually adjusted hyper-parameter.\n", 50 | "\n", 51 | ">  Dropout- also a regularization method. But different from the above, it is achieved by randomly setting the output of some neurons to zero\n", 52 | "\n", 53 | ">  Unsupervised Pre-training- use Auto-Encoder or RBM's convolution form to do unsupervised pre-training layer by layer, and finally add a classification layer to do supervised Fine-Tuning\n" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "metadata": {}, 59 | "source": [ 60 | "#### Code Of Alexnet Structure Using Keras" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 7, 66 | "metadata": {}, 67 | "outputs": [], 68 | "source": [ 69 | "import tensorflow as tf" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 8, 75 | "metadata": {}, 76 | "outputs": [ 77 | { 78 | "data": { 79 | "text/plain": [ 80 | "'2.2.0'" 81 | ] 82 | }, 83 | "execution_count": 8, 84 | "metadata": {}, 85 | "output_type": "execute_result" 86 | } 87 | ], 88 | "source": [ 89 | "tf.__version__" 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 6, 95 | "metadata": {}, 96 | "outputs": [ 97 | { 98 | "name": "stdout", 99 | "output_type": "stream", 100 | "text": [ 101 | "Model: \"sequential\"\n", 102 | "_________________________________________________________________\n", 103 | "Layer (type) Output Shape Param # \n", 104 | "=================================================================\n", 105 | "conv2d (Conv2D) (None, 54, 54, 96) 34944 \n", 106 | "_________________________________________________________________\n", 107 | "activation (Activation) (None, 54, 54, 96) 0 \n", 108 | "_________________________________________________________________\n", 109 | "max_pooling2d (MaxPooling2D) (None, 27, 27, 96) 0 \n", 110 | "_________________________________________________________________\n", 111 | "batch_normalization (BatchNo (None, 27, 27, 96) 384 \n", 112 | "_________________________________________________________________\n", 113 | "conv2d_1 (Conv2D) (None, 17, 17, 256) 2973952 \n", 114 | "_________________________________________________________________\n", 115 | "activation_1 (Activation) (None, 17, 17, 256) 0 \n", 116 | "_________________________________________________________________\n", 117 | "max_pooling2d_1 (MaxPooling2 (None, 8, 8, 256) 0 \n", 118 | "_________________________________________________________________\n", 119 | "batch_normalization_1 (Batch (None, 8, 8, 256) 1024 \n", 120 | "_________________________________________________________________\n", 121 | "conv2d_2 (Conv2D) (None, 6, 6, 384) 885120 \n", 122 | "_________________________________________________________________\n", 123 | "activation_2 (Activation) (None, 6, 6, 384) 0 \n", 124 | "_________________________________________________________________\n", 125 | "batch_normalization_2 (Batch (None, 6, 6, 384) 1536 \n", 126 | "_________________________________________________________________\n", 127 | "conv2d_3 (Conv2D) (None, 4, 4, 384) 1327488 \n", 128 | "_________________________________________________________________\n", 129 | "activation_3 (Activation) (None, 4, 4, 384) 0 \n", 130 | "_________________________________________________________________\n", 131 | "batch_normalization_3 (Batch (None, 4, 4, 384) 1536 \n", 132 | "_________________________________________________________________\n", 133 | "conv2d_4 (Conv2D) (None, 2, 2, 256) 884992 \n", 134 | "_________________________________________________________________\n", 135 | "activation_4 (Activation) (None, 2, 2, 256) 0 \n", 136 | "_________________________________________________________________\n", 137 | "max_pooling2d_2 (MaxPooling2 (None, 1, 1, 256) 0 \n", 138 | "_________________________________________________________________\n", 139 | "batch_normalization_4 (Batch (None, 1, 1, 256) 1024 \n", 140 | "_________________________________________________________________\n", 141 | "flatten (Flatten) (None, 256) 0 \n", 142 | "_________________________________________________________________\n", 143 | "dense (Dense) (None, 4096) 1052672 \n", 144 | "_________________________________________________________________\n", 145 | "activation_5 (Activation) (None, 4096) 0 \n", 146 | "_________________________________________________________________\n", 147 | "dropout (Dropout) (None, 4096) 0 \n", 148 | "_________________________________________________________________\n", 149 | "batch_normalization_5 (Batch (None, 4096) 16384 \n", 150 | "_________________________________________________________________\n", 151 | "dense_1 (Dense) (None, 4096) 16781312 \n", 152 | "_________________________________________________________________\n", 153 | "activation_6 (Activation) (None, 4096) 0 \n", 154 | "_________________________________________________________________\n", 155 | "dropout_1 (Dropout) (None, 4096) 0 \n", 156 | "_________________________________________________________________\n", 157 | "batch_normalization_6 (Batch (None, 4096) 16384 \n", 158 | "_________________________________________________________________\n", 159 | "dense_2 (Dense) (None, 1000) 4097000 \n", 160 | "_________________________________________________________________\n", 161 | "activation_7 (Activation) (None, 1000) 0 \n", 162 | "_________________________________________________________________\n", 163 | "dropout_2 (Dropout) (None, 1000) 0 \n", 164 | "_________________________________________________________________\n", 165 | "batch_normalization_7 (Batch (None, 1000) 4000 \n", 166 | "_________________________________________________________________\n", 167 | "dense_3 (Dense) (None, 17) 17017 \n", 168 | "_________________________________________________________________\n", 169 | "activation_8 (Activation) (None, 17) 0 \n", 170 | "=================================================================\n", 171 | "Total params: 28,096,769\n", 172 | "Trainable params: 28,075,633\n", 173 | "Non-trainable params: 21,136\n", 174 | "_________________________________________________________________\n" 175 | ] 176 | } 177 | ], 178 | "source": [ 179 | "import tensorflow.keras\n", 180 | "from tensorflow.keras.models import Sequential\n", 181 | "from tensorflow.keras.layers import Dense, Activation, Dropout, Flatten,\\\n", 182 | " Conv2D, MaxPooling2D,BatchNormalization\n", 183 | "\n", 184 | "\n", 185 | "\n", 186 | "\n", 187 | "# (3) Create a sequential model\n", 188 | "model = Sequential()\n", 189 | "\n", 190 | "# 1st Convolutional Layer\n", 191 | "model.add(Conv2D(filters=96, input_shape=(227,227,3), kernel_size=(11,11),\\\n", 192 | " strides=(4,4), padding='valid'))\n", 193 | "model.add(Activation('relu'))\n", 194 | "# Pooling \n", 195 | "model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))\n", 196 | "# Batch Normalisation before passing it to the next layer\n", 197 | "model.add(BatchNormalization())\n", 198 | "\n", 199 | "# 2nd Convolutional Layer\n", 200 | "model.add(Conv2D(filters=256, kernel_size=(11,11), strides=(1,1), padding='valid'))\n", 201 | "model.add(Activation('relu'))\n", 202 | "# Pooling\n", 203 | "model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))\n", 204 | "# Batch Normalisation\n", 205 | "model.add(BatchNormalization())\n", 206 | "\n", 207 | "# 3rd Convolutional Layer\n", 208 | "model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding='valid'))\n", 209 | "model.add(Activation('relu'))\n", 210 | "# Batch Normalisation\n", 211 | "model.add(BatchNormalization())\n", 212 | "\n", 213 | "# 4th Convolutional Layer\n", 214 | "model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding='valid'))\n", 215 | "model.add(Activation('relu'))\n", 216 | "# Batch Normalisation\n", 217 | "model.add(BatchNormalization())\n", 218 | "\n", 219 | "# 5th Convolutional Layer\n", 220 | "model.add(Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), padding='valid'))\n", 221 | "model.add(Activation('relu'))\n", 222 | "# Pooling\n", 223 | "model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))\n", 224 | "# Batch Normalisation\n", 225 | "model.add(BatchNormalization())\n", 226 | "\n", 227 | "# Passing it to a dense layer\n", 228 | "model.add(Flatten())\n", 229 | "# 1st Dense Layer\n", 230 | "model.add(Dense(4096, input_shape=(224*224*3,)))\n", 231 | "model.add(Activation('relu'))\n", 232 | "# Add Dropout to prevent overfitting\n", 233 | "model.add(Dropout(0.4))\n", 234 | "# Batch Normalisation\n", 235 | "model.add(BatchNormalization())\n", 236 | "\n", 237 | "# 2nd Dense Layer\n", 238 | "model.add(Dense(4096))\n", 239 | "model.add(Activation('relu'))\n", 240 | "# Add Dropout\n", 241 | "model.add(Dropout(0.4))\n", 242 | "# Batch Normalisation\n", 243 | "model.add(BatchNormalization())\n", 244 | "\n", 245 | "# 3rd Dense Layer\n", 246 | "model.add(Dense(1000))\n", 247 | "model.add(Activation('relu'))\n", 248 | "# Add Dropout\n", 249 | "model.add(Dropout(0.4))\n", 250 | "# Batch Normalisation\n", 251 | "model.add(BatchNormalization())\n", 252 | "\n", 253 | "# Output Layer\n", 254 | "model.add(Dense(17))\n", 255 | "model.add(Activation('softmax'))\n", 256 | "\n", 257 | "model.summary()\n", 258 | "\n", 259 | "\n", 260 | "\n" 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": null, 266 | "metadata": {}, 267 | "outputs": [], 268 | "source": [] 269 | } 270 | ], 271 | "metadata": { 272 | "kernelspec": { 273 | "display_name": "Python 3", 274 | "language": "python", 275 | "name": "python3" 276 | }, 277 | "language_info": { 278 | "codemirror_mode": { 279 | "name": "ipython", 280 | "version": 3 281 | }, 282 | "file_extension": ".py", 283 | "mimetype": "text/x-python", 284 | "name": "python", 285 | "nbconvert_exporter": "python", 286 | "pygments_lexer": "ipython3", 287 | "version": "3.7.7" 288 | } 289 | }, 290 | "nbformat": 4, 291 | "nbformat_minor": 2 292 | } 293 | -------------------------------------------------------------------------------- /Transfer Learning VGG16.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Transfer Learning VGG 16 and VGG 19 using Keras" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Please download the dataset from the below url" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": {}, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "Fri Sep 11 13:26:58 2020 \n", 27 | "+-----------------------------------------------------------------------------+\n", 28 | "| NVIDIA-SMI 432.00 Driver Version: 432.00 CUDA Version: 10.1 |\n", 29 | "|-------------------------------+----------------------+----------------------+\n", 30 | "| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |\n", 31 | "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n", 32 | "|===============================+======================+======================|\n", 33 | "| 0 TITAN RTX WDDM | 00000000:09:00.0 On | N/A |\n", 34 | "| 40% 38C P8 20W / 280W | 10738MiB / 24576MiB | 10% Default |\n", 35 | "+-------------------------------+----------------------+----------------------+\n", 36 | " \n", 37 | "+-----------------------------------------------------------------------------+\n", 38 | "| Processes: GPU Memory |\n", 39 | "| GPU PID Type Process name Usage |\n", 40 | "|=============================================================================|\n", 41 | "| 0 864 C ...s\\win10\\anaconda3\\envs\\myenv\\python.exe N/A |\n", 42 | "| 0 1436 C ...s\\win10\\anaconda3\\envs\\myenv\\python.exe N/A |\n", 43 | "| 0 6280 C+G ...7.1.0_x64__8wekyb3d8bbwe\\Calculator.exe N/A |\n", 44 | "| 0 7108 C+G ...\\bin\\cef\\cef.win7x64\\steamwebhelper.exe N/A |\n", 45 | "| 0 10288 C+G ...w5n1h2txyewy\\InputApp\\TextInputHost.exe N/A |\n", 46 | "| 0 10596 C+G ...1.0_x64__8wekyb3d8bbwe\\WinStore.App.exe N/A |\n", 47 | "| 0 11468 C+G ...dows.Search_cw5n1h2txyewy\\SearchApp.exe N/A |\n", 48 | "| 0 11492 C+G ...win10\\AppData\\Roaming\\Zoom\\bin\\Zoom.exe N/A |\n", 49 | "| 0 12044 C+G ...a\\Local\\Discord\\app-0.0.308\\Discord.exe N/A |\n", 50 | "| 0 12056 C+G ...\\Microsoft Office\\Office16\\POWERPNT.EXE N/A |\n", 51 | "| 0 14316 C+G ...mmersiveControlPanel\\SystemSettings.exe N/A |\n", 52 | "| 0 14840 C+G ....117.0_x64__8wekyb3d8bbwe\\YourPhone.exe N/A |\n", 53 | "| 0 17172 C+G Insufficient Permissions N/A |\n", 54 | "| 0 17344 C+G ...5n1h2txyewy\\StartMenuExperienceHost.exe N/A |\n", 55 | "| 0 17540 C+G ...16211.0_x64__8wekyb3d8bbwe\\Video.UI.exe N/A |\n", 56 | "| 0 18072 C+G C:\\Windows\\explorer.exe N/A |\n", 57 | "| 0 19244 C+G Insufficient Permissions N/A |\n", 58 | "| 0 19728 C+G ...am Files\\obs-studio\\bin\\64bit\\obs64.exe N/A |\n", 59 | "| 0 19832 C+G ...6)\\Google\\Chrome\\Application\\chrome.exe N/A |\n", 60 | "| 0 21212 C+G ...t_cw5n1h2txyewy\\ShellExperienceHost.exe N/A |\n", 61 | "| 0 22216 C+G ...rogram Files (x86)\\Epic Pen\\EpicPen.exe N/A |\n", 62 | "| 0 22928 C+G ... Filmora (CPC)\\Wondershare Filmora9.exe N/A |\n", 63 | "| 0 24872 C ...s\\win10\\anaconda3\\envs\\myenv\\python.exe N/A |\n", 64 | "+-----------------------------------------------------------------------------+\n" 65 | ] 66 | } 67 | ], 68 | "source": [ 69 | "!nvidia-smi" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 2, 75 | "metadata": {}, 76 | "outputs": [], 77 | "source": [ 78 | "from tensorflow.compat.v1 import ConfigProto\n", 79 | "from tensorflow.compat.v1 import InteractiveSession\n", 80 | "\n", 81 | "config = ConfigProto()\n", 82 | "config.gpu_options.per_process_gpu_memory_fraction = 0.5\n", 83 | "config.gpu_options.allow_growth = True\n", 84 | "session = InteractiveSession(config=config)" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": 3, 90 | "metadata": {}, 91 | "outputs": [ 92 | { 93 | "name": "stdout", 94 | "output_type": "stream", 95 | "text": [ 96 | "2.2.0\n" 97 | ] 98 | } 99 | ], 100 | "source": [ 101 | "import tensorflow as tf\n", 102 | "print(tf.__version__)" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 20, 108 | "metadata": {}, 109 | "outputs": [], 110 | "source": [ 111 | "# import the libraries as shown below\n", 112 | "\n", 113 | "from tensorflow.keras.layers import Input, Lambda, Dense, Flatten\n", 114 | "from tensorflow.keras.models import Model\n", 115 | "from tensorflow.keras.applications.vgg16 import VGG16\n", 116 | "from tensorflow.keras.applications.vgg19 import VGG19\n", 117 | "from tensorflow.keras.preprocessing import image\n", 118 | "from tensorflow.keras.preprocessing.image import ImageDataGenerator,load_img\n", 119 | "from tensorflow.keras.models import Sequential\n", 120 | "import numpy as np\n", 121 | "from glob import glob\n", 122 | "#import matplotlib.pyplot as plt" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 6, 128 | "metadata": {}, 129 | "outputs": [], 130 | "source": [ 131 | "# re-size all the images to this\n", 132 | "IMAGE_SIZE = [224, 224]\n", 133 | "\n", 134 | "train_path = 'Datasets/train'\n", 135 | "valid_path = 'Datasets/test'\n" 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": 7, 141 | "metadata": {}, 142 | "outputs": [ 143 | { 144 | "name": "stdout", 145 | "output_type": "stream", 146 | "text": [ 147 | "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5\n", 148 | "58892288/58889256 [==============================] - 3s 0us/step\n" 149 | ] 150 | } 151 | ], 152 | "source": [ 153 | "# Import the VGG16 library as shown below and add preprocessing layer to the front of VGG\n", 154 | "# Here we will be using imagenet weights\n", 155 | "\n", 156 | "vgg16 = VGG16(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)\n", 157 | "\n", 158 | "\n" 159 | ] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "execution_count": 8, 164 | "metadata": {}, 165 | "outputs": [], 166 | "source": [ 167 | "# don't train existing weights\n", 168 | "for layer in vgg16.layers:\n", 169 | " layer.trainable = False" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 9, 175 | "metadata": {}, 176 | "outputs": [], 177 | "source": [ 178 | " # useful for getting number of output classes\n", 179 | "folders = glob('Datasets/train/*')" 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": 10, 185 | "metadata": {}, 186 | "outputs": [ 187 | { 188 | "data": { 189 | "text/plain": [ 190 | "['Datasets/train\\\\diseased cotton leaf',\n", 191 | " 'Datasets/train\\\\diseased cotton plant',\n", 192 | " 'Datasets/train\\\\fresh cotton leaf',\n", 193 | " 'Datasets/train\\\\fresh cotton plant']" 194 | ] 195 | }, 196 | "execution_count": 10, 197 | "metadata": {}, 198 | "output_type": "execute_result" 199 | } 200 | ], 201 | "source": [ 202 | "folders" 203 | ] 204 | }, 205 | { 206 | "cell_type": "code", 207 | "execution_count": 11, 208 | "metadata": {}, 209 | "outputs": [], 210 | "source": [ 211 | "# our layers - you can add more if you want\n", 212 | "x = Flatten()(vgg16.output)" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": 12, 218 | "metadata": {}, 219 | "outputs": [ 220 | { 221 | "data": { 222 | "text/plain": [ 223 | "4" 224 | ] 225 | }, 226 | "execution_count": 12, 227 | "metadata": {}, 228 | "output_type": "execute_result" 229 | } 230 | ], 231 | "source": [ 232 | "len(folders)" 233 | ] 234 | }, 235 | { 236 | "cell_type": "code", 237 | "execution_count": 13, 238 | "metadata": {}, 239 | "outputs": [], 240 | "source": [ 241 | "prediction = Dense(len(folders), activation='softmax')(x)\n", 242 | "\n", 243 | "# create a model object\n", 244 | "model = Model(inputs=vgg16.input, outputs=prediction)" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": 14, 250 | "metadata": {}, 251 | "outputs": [ 252 | { 253 | "name": "stdout", 254 | "output_type": "stream", 255 | "text": [ 256 | "Model: \"model\"\n", 257 | "_________________________________________________________________\n", 258 | "Layer (type) Output Shape Param # \n", 259 | "=================================================================\n", 260 | "input_1 (InputLayer) [(None, 224, 224, 3)] 0 \n", 261 | "_________________________________________________________________\n", 262 | "block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 \n", 263 | "_________________________________________________________________\n", 264 | "block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 \n", 265 | "_________________________________________________________________\n", 266 | "block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 \n", 267 | "_________________________________________________________________\n", 268 | "block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 \n", 269 | "_________________________________________________________________\n", 270 | "block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 \n", 271 | "_________________________________________________________________\n", 272 | "block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 \n", 273 | "_________________________________________________________________\n", 274 | "block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 \n", 275 | "_________________________________________________________________\n", 276 | "block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 \n", 277 | "_________________________________________________________________\n", 278 | "block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 \n", 279 | "_________________________________________________________________\n", 280 | "block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 \n", 281 | "_________________________________________________________________\n", 282 | "block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 \n", 283 | "_________________________________________________________________\n", 284 | "block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 \n", 285 | "_________________________________________________________________\n", 286 | "block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 \n", 287 | "_________________________________________________________________\n", 288 | "block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 \n", 289 | "_________________________________________________________________\n", 290 | "block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 \n", 291 | "_________________________________________________________________\n", 292 | "block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 \n", 293 | "_________________________________________________________________\n", 294 | "block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 \n", 295 | "_________________________________________________________________\n", 296 | "block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 \n", 297 | "_________________________________________________________________\n", 298 | "flatten (Flatten) (None, 25088) 0 \n", 299 | "_________________________________________________________________\n", 300 | "dense (Dense) (None, 4) 100356 \n", 301 | "=================================================================\n", 302 | "Total params: 14,815,044\n", 303 | "Trainable params: 100,356\n", 304 | "Non-trainable params: 14,714,688\n", 305 | "_________________________________________________________________\n" 306 | ] 307 | } 308 | ], 309 | "source": [ 310 | "\n", 311 | "# view the structure of the model\n", 312 | "model.summary()\n" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 15, 318 | "metadata": {}, 319 | "outputs": [], 320 | "source": [ 321 | "# tell the model what cost and optimization method to use\n", 322 | "model.compile(\n", 323 | " loss='categorical_crossentropy',\n", 324 | " optimizer='adam',\n", 325 | " metrics=['accuracy']\n", 326 | ")\n" 327 | ] 328 | }, 329 | { 330 | "cell_type": "code", 331 | "execution_count": 16, 332 | "metadata": {}, 333 | "outputs": [], 334 | "source": [ 335 | "# Use the Image Data Generator to import the images from the dataset\n", 336 | "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", 337 | "\n", 338 | "train_datagen = ImageDataGenerator(rescale = 1./255,\n", 339 | " shear_range = 0.2,\n", 340 | " zoom_range = 0.2,\n", 341 | " horizontal_flip = True)\n", 342 | "\n", 343 | "test_datagen = ImageDataGenerator(rescale = 1./255)" 344 | ] 345 | }, 346 | { 347 | "cell_type": "code", 348 | "execution_count": 18, 349 | "metadata": {}, 350 | "outputs": [ 351 | { 352 | "name": "stdout", 353 | "output_type": "stream", 354 | "text": [ 355 | "Found 1951 images belonging to 4 classes.\n" 356 | ] 357 | } 358 | ], 359 | "source": [ 360 | "# Make sure you provide the same target size as initialied for the image size\n", 361 | "training_set = train_datagen.flow_from_directory('Datasets/train',\n", 362 | " target_size = (224, 224),\n", 363 | " batch_size = 32,\n", 364 | " class_mode = 'categorical')" 365 | ] 366 | }, 367 | { 368 | "cell_type": "code", 369 | "execution_count": 19, 370 | "metadata": {}, 371 | "outputs": [ 372 | { 373 | "name": "stdout", 374 | "output_type": "stream", 375 | "text": [ 376 | "Found 18 images belonging to 4 classes.\n" 377 | ] 378 | } 379 | ], 380 | "source": [ 381 | "test_set = test_datagen.flow_from_directory('Datasets/test',\n", 382 | " target_size = (224, 224),\n", 383 | " batch_size = 32,\n", 384 | " class_mode = 'categorical')" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 16, 390 | "metadata": { 391 | "scrolled": true 392 | }, 393 | "outputs": [ 394 | { 395 | "name": "stdout", 396 | "output_type": "stream", 397 | "text": [ 398 | "WARNING:tensorflow:From :8: Model.fit_generator (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.\n", 399 | "Instructions for updating:\n", 400 | "Please use Model.fit, which supports generators.\n", 401 | "Epoch 1/20\n", 402 | "61/61 [==============================] - 26s 431ms/step - loss: 3.0535 - accuracy: 0.3829 - val_loss: 1.4002 - val_accuracy: 0.3333\n", 403 | "Epoch 2/20\n", 404 | "61/61 [==============================] - 19s 316ms/step - loss: 1.0344 - accuracy: 0.5889 - val_loss: 1.0645 - val_accuracy: 0.6111\n", 405 | "Epoch 3/20\n", 406 | "61/61 [==============================] - 19s 312ms/step - loss: 0.9701 - accuracy: 0.6130 - val_loss: 1.6296 - val_accuracy: 0.5556\n", 407 | "Epoch 4/20\n", 408 | "61/61 [==============================] - 19s 313ms/step - loss: 0.9417 - accuracy: 0.6294 - val_loss: 0.8696 - val_accuracy: 0.6111\n", 409 | "Epoch 5/20\n", 410 | "61/61 [==============================] - 19s 311ms/step - loss: 0.8697 - accuracy: 0.6663 - val_loss: 1.0169 - val_accuracy: 0.6111\n", 411 | "Epoch 6/20\n", 412 | "61/61 [==============================] - 19s 313ms/step - loss: 0.8407 - accuracy: 0.6761 - val_loss: 0.7645 - val_accuracy: 0.6667\n", 413 | "Epoch 7/20\n", 414 | "61/61 [==============================] - 19s 314ms/step - loss: 0.8575 - accuracy: 0.6515 - val_loss: 1.0847 - val_accuracy: 0.7222\n", 415 | "Epoch 8/20\n", 416 | "61/61 [==============================] - 19s 312ms/step - loss: 0.8802 - accuracy: 0.6822 - val_loss: 0.8277 - val_accuracy: 0.7778\n", 417 | "Epoch 9/20\n", 418 | "61/61 [==============================] - 19s 311ms/step - loss: 0.8770 - accuracy: 0.6740 - val_loss: 0.5588 - val_accuracy: 0.7778\n", 419 | "Epoch 10/20\n", 420 | "61/61 [==============================] - 19s 312ms/step - loss: 0.7029 - accuracy: 0.7258 - val_loss: 0.9252 - val_accuracy: 0.7778\n", 421 | "Epoch 11/20\n", 422 | "61/61 [==============================] - 19s 312ms/step - loss: 0.7235 - accuracy: 0.7212 - val_loss: 0.5807 - val_accuracy: 0.7778\n", 423 | "Epoch 12/20\n", 424 | "61/61 [==============================] - 19s 312ms/step - loss: 0.8112 - accuracy: 0.7109 - val_loss: 1.3191 - val_accuracy: 0.6111\n", 425 | "Epoch 13/20\n", 426 | "61/61 [==============================] - 19s 313ms/step - loss: 0.8620 - accuracy: 0.6832 - val_loss: 1.4295 - val_accuracy: 0.7222\n", 427 | "Epoch 14/20\n", 428 | "61/61 [==============================] - 19s 312ms/step - loss: 0.7173 - accuracy: 0.7212 - val_loss: 1.0936 - val_accuracy: 0.7222\n", 429 | "Epoch 15/20\n", 430 | "61/61 [==============================] - 19s 313ms/step - loss: 0.6037 - accuracy: 0.7658 - val_loss: 0.7324 - val_accuracy: 0.7222\n", 431 | "Epoch 16/20\n", 432 | "61/61 [==============================] - 19s 313ms/step - loss: 0.6356 - accuracy: 0.7442 - val_loss: 0.5265 - val_accuracy: 0.8333\n", 433 | "Epoch 17/20\n", 434 | "61/61 [==============================] - 19s 313ms/step - loss: 0.7198 - accuracy: 0.7201 - val_loss: 0.6063 - val_accuracy: 0.7778\n", 435 | "Epoch 18/20\n", 436 | "61/61 [==============================] - 19s 314ms/step - loss: 0.7286 - accuracy: 0.7253 - val_loss: 1.2033 - val_accuracy: 0.6667\n", 437 | "Epoch 19/20\n", 438 | "61/61 [==============================] - 19s 312ms/step - loss: 0.7342 - accuracy: 0.7283 - val_loss: 1.7967 - val_accuracy: 0.5000\n", 439 | "Epoch 20/20\n", 440 | "61/61 [==============================] - 19s 313ms/step - loss: 0.9277 - accuracy: 0.6914 - val_loss: 0.6113 - val_accuracy: 0.7778\n" 441 | ] 442 | } 443 | ], 444 | "source": [ 445 | "# fit the model\n", 446 | "# Run the cell. It will take some time to execute\n", 447 | "r = model.fit_generator(\n", 448 | " training_set,\n", 449 | " validation_data=test_set,\n", 450 | " epochs=20,\n", 451 | " steps_per_epoch=len(training_set),\n", 452 | " validation_steps=len(test_set)\n", 453 | ")" 454 | ] 455 | }, 456 | { 457 | "cell_type": "code", 458 | "execution_count": null, 459 | "metadata": {}, 460 | "outputs": [], 461 | "source": [] 462 | }, 463 | { 464 | "cell_type": "code", 465 | "execution_count": 32, 466 | "metadata": {}, 467 | "outputs": [], 468 | "source": [ 469 | "import matplotlib.pyplot as plt" 470 | ] 471 | }, 472 | { 473 | "cell_type": "code", 474 | "execution_count": 33, 475 | "metadata": {}, 476 | "outputs": [ 477 | { 478 | "data": { 479 | "image/png": "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\n", 480 | "text/plain": [ 481 | "
" 482 | ] 483 | }, 484 | "metadata": { 485 | "needs_background": "light" 486 | }, 487 | "output_type": "display_data" 488 | }, 489 | { 490 | "data": { 491 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAABJEUlEQVR4nO3dd1zd1f348debEQgBAgSyCWSaPckkq3UlWqPVmuG2rmrUWq0aW6tW29/XWrXumGhSR6MxdcRYYx3VmAkJ2ZMMAgmZFwgEQtjn98e5F2/IBS53Ms7z8eDB5TMPl8v7nns+78/7iFIKwzAMo/kK8HcDDMMwDO8ygd4wDKOZM4HeMAyjmTOB3jAMo5kzgd4wDKOZM4HeMAyjmXMq0IvIFBFJF5H9IjLHwfpuIvKDiGwWkW0icpl1eaKInBWRLdavNz39CxiGYRh1k/ry6EUkENgLXAxkAxuAWUqpXXbbzAc2K6Xmikh/YLlSKlFEEoH/KKUGeusXMAzDMOrmTI9+FLBfKZWhlCoDFgNX1thGAZHWx22Bo55romEYhuGOICe26QIctvs5GxhdY5ungG9E5D6gDXCR3bruIrIZOA08rpRaVdfJYmNjVWJiohPNMgzDMGw2btyYo5SKc7TOmUDvjFnAO0qpF0RkLPC+iAwEjgHdlFK5IjICWCoiA5RSp+13FpE7gTsBunXrRlpamoeaZRiG0TKISFZt65wZujkCxNv93NW6zN5twBIApdQ6IBSIVUqVKqVyrcs3AgeAPjVPoJSar5RKUkolxcU5fEMyDMMwXORMoN8A9BaR7iLSCpgJLKuxzSHgQgAR6YcO9BYRibNezEVEegC9gQxPNd4wDMOoX71DN0qpChG5F/gaCAQWKqV2isjTQJpSahnwEPCWiPwOfWH2FqWUEpGJwNMiUg5UAb9RSuV57bcxDMMwzlNveqWvJSUlqZpj9OXl5WRnZ1NSUuKnVjVdoaGhdO3aleDgYH83xTAMLxKRjUqpJEfrPHUx1quys7OJiIggMTEREfF3c5oMpRS5ublkZ2fTvXt3fzfHMAw/aRIlEEpKSmjXrp0J8g0kIrRr1858EjKMFq5JBHrABHkXmefNMIwmE+gNw2jkDvwARzb6uxWuy1oHh9f7uxVeYQK9E/Lz83njjTdc2veyyy4jPz/fsw0yjMbmTC4svh6W3AwVZf5uTcOVFsLiWbDsPn+3xCtMoHdCXYG+oqKizn2XL19OVFSUF1plGI3Iuleh/AwUHIYti/zdmoZbPx/OngLLHjiT4+/WeJwJ9E6YM2cOBw4cYOjQoTz88MOsWLGCCRMmMG3aNPr37w/AVVddxYgRIxgwYADz58+v3jcxMZGcnBwyMzPp168fd9xxBwMGDOCSSy7h7Nmz553riy++YPTo0QwbNoyLLrqIEydOAFBUVMStt97KoEGDGDx4MJ988gkA//3vfxk+fDhDhgzhwgsv9MGzYRg1FOfB+rdgwNXQZQSserFp9epLi2DtaxDVTf+ctca/7fGCJpFeae/PX+xk19HT9W/YAP07R/LkFQNqXf/ss8+yY8cOtmzZAsCKFSvYtGkTO3bsqE5bXLhwITExMZw9e5aRI0dyzTXX0K5du3OOs2/fPj788EPeeustpk+fzieffMINN9xwzjbjx48nJSUFEeHtt9/mueee44UXXuCZZ56hbdu2bN++HYBTp05hsVi44447WLlyJd27dycvz9yLZvjButeh7AxMegTyD8MH18K2xTD8Jn+3zDkb3oazeTBzEfzrGshcDf1rFuht2ppcoG8sRo0adU5u+iuvvMJnn30GwOHDh9m3b995gb579+4MHToUgBEjRpCZmXnecbOzs5kxYwbHjh2jrKys+hzfffcdixcvrt4uOjqaL774gokTJ1ZvExMT48lf0TDqV5wHqfN0YGzfD+L6QudhsPJ5GDILAhv5jXplZ2Dtq9Dz55AwDuJHQ6bp0ftdXT1vX2rTpk314xUrVvDdd9+xbt06wsLCmDx5ssPc9ZCQkOrHgYGBDodu7rvvPh588EGmTZvGihUreOqpp7zSfsPwiJS5UFaoe/MAIjBpDnw4A7Z9BMNuqHt/f9uwAIpzdJsBEpPh+7/oi8tt2tW9bxNixuidEBERQWFhYa3rCwoKiI6OJiwsjD179pCSkuLyuQoKCujSpQsA7777bvXyiy++mNdff73651OnTjFmzBhWrlzJwYMHAczQjeFbZ09B6pvQ7wroYNcB63MpdBqie/WVdScr+FVZMax9BXpMhm7WKTYSJ+jvh9b6rVneYAK9E9q1a0dycjIDBw7k4YcfPm/9lClTqKiooF+/fsyZM4cxY8a4fK6nnnqKa6+9lhEjRhAbG1u9/PHHH+fUqVMMHDiQIUOG8MMPPxAXF8f8+fO5+uqrGTJkCDNmzHD5vIbRYClvQulpmPTouctF9LJTB2H7Ev+0zRlpC+GM5afePEDn4RDUWo/TNyNNoqjZ7t276devn59a1PSZ58/wuLP58NJg6D5BX8SsSSmYN0GPgc/eAIGNbJS4rBheHgLt+8LNX5y77t1p+trD3U0r2NdV1Mz06A3DaLjUeVBa8NPYfE22Xn1eBuz42Ldtc8bGd+DMyXN78zaJ4+HEDh3smwkT6A3DaJiS05DyOlxwmR6Lr80Fl0OHgbDy71BV6bv21af8LKx5SY/HJyafvz4hGVBwaJ2vW+Y1JtAbhtEw6+dBSR29eZuAAL1N7n7Y8alv2uaMTe9B0Yna299lBASFNqs0SxPoDcNwXmmhvkGqzxSdL1+fvldA+/6w8rnG0asvL4HV/4Bu437KsKkpOBS6joTMVb5tmxeZQG8YhvNsNWHq683bBATAxIchZy/s/My7bXPG5veh8BhMflRfR6hN4ng4vl1fdG4GTKA3DMM5tpowvS7WwxvO6n+VvmN25d+hqsprzatXRanuzcePge6T6t62mY3Tm0DvJeHh4f5ugmF41oa3dE2YyQ4yVepi69Vb9sCupV5pmlM2vw+nj9Tfmwc9dBMY0mzy6Z0K9CIyRUTSRWS/iJz3VxaRbiLyg4hsFpFtInKZ3brHrPuli8ilnmy8YRg+UlpkrQlzIXR1mKpdtwG/hNg+8ONz/unVV5TCqn9A11HQ42f1bx8cqn/PZlLJst5ALyKBwOvAVKA/MEtE+tfY7HFgiVJqGDATeMO6b3/rzwOAKcAb1uM1KXPmzDmn/MBTTz3F888/T1FRERdeeCHDhw9n0KBBfP755/Ueq7Zyxo7KDddWmtgwfC5tARTnNrw3bxMQCBMfActu2L3Ms21zxpZFcDrbud68TUIyHNuqM4yaOGduVxsF7FdKZQCIyGLgSmCX3TYKiLQ+bgsctT6+ElislCoFDorIfuvxXB/4+mqOvkjiSR0HwdRna109Y8YMHnjgAWbPng3AkiVL+PrrrwkNDeWzzz4jMjKSnJwcxowZw7Rp0+qcp9VROeOqqiqH5YYdlSY2DJ8rK4Y1r+iecPwo148z8Gr48W96rL7fND2k4wsVZbpGfpck/YnEWYnjdbbQoVToc4n32ucDzgT6LsBhu5+zgdE1tnkK+EZE7gPaABfZ7Wtf4SvbuqxJGTZsGCdPnuTo0aNYLBaio6OJj4+nvLycP/zhD6xcuZKAgACOHDnCiRMn6NixY63HclTO2GKxOCw37Kg0sWH4XNpCXeHR1d68TUCgHqv/7E5I/1IXQ/OFrR/qma9+8Q/ne/Ogx+kDgnWaZQsI9M6YBbyjlHpBRMYC74vIQGd3FpE7gTsBunXrVvfGdfS8venaa6/l448/5vjx49XFwxYtWoTFYmHjxo0EBweTmJjosDyxjbPljA2j0SgrhjUv6yyVbq4X66s28Brdq//xb9D3Fw0LvK6oLIdVz+uc/14X1b+9vVZhzWac3pnPTkeAeLufu1qX2bsNWAKglFoHhAKxTu6LUmq+UipJKZUUFxfnfOt9aMaMGSxevJiPP/6Ya6+9FtAlhdu3b09wcDA//PADWVlZdR6jtnLGtZUbdlSa2DB8qromzKP1buqUwCCY+Hs9/Jq+3DPHrMvWxZB/SNe0ceVNJSEZjm7RN4o1Yc4E+g1AbxHpLiKt0BdXa15NOQRcCCAi/dCB3mLdbqaIhIhId6A3sN5TjfelAQMGUFhYSJcuXejUqRMA119/PWlpaQwaNIj33nuPvn371nmM2soZ11Zu2FFpYsPwmfpqwrhq0HSI7g4rntVVLr3F1pvvNFTXyHdF4nhQlXqcvgmrd+hGKVUhIvcCXwOBwEKl1E4ReRpIU0otAx4C3hKR36EvzN6idP3jnSKyBH3htgKYrZRqBPdBu8Z2UdQmNjaWdescX1cuKio6b1lISAhfffWVw+2nTp3K1KlTz1kWHh5+zuQjhuFTG9/VNWGuWeDZ49p69Z/Phr3/hQum1r+PK7YtgVOZMPND14eI4kdBQJAep+/dwKGfRsSpMXql1HJgeY1lT9g93gU4fMtXSv0V+KsbbTQMw9fKS3RvPiFZ15z3tMEzdE79imd13RxPj9VXVujsno6D3XsjadVGT0bSxMfpzZ2xhmGcb9N7uiaMp8bmawoM1r36Y1tg3zeeP/72f+sZriY1IG++Nonj4ehmfdNYE9VkAn1jmwmrqTDPm9Fgtpow3cZC94neO8+QWRDVTWfgePJ1WlWpe/MdBkHfy90/XmIyVFXA4aY7Tt8kAn1oaCi5ubkmaDWQUorc3FxCQ0P93RSjKdn8PhQe9UxvuC6BwTDhITiyEfb/z3PH3fEJ5B3QFTY90f74MSCBTXr4ppFN5OhY165dyc7OxmKx+LspTU5oaChdu3b1dzOMpsJWEyZ+NPSY7P3zDbkOVj4PPz4LvS50PzBXVeqx//b9dZ6+J4SE6zz8JlzgrEkE+uDg4Oq7Rg3D8CJbTZhpL3v/ZiaAoFYw/nfw5YNw4Hsd7N2x8zPI3QfXvuPZEguJ4/WEK2Vn9AXaJqZJDN0YhuEDrtaEcdewGyCyi/tj9bbefFw/6Hel59oHOtBXlcPhJnkbUNPo0TcZxXkQGuW7Yk2eVpwHoW11TRJ/KDqp87ZdJhDbG4JCPNakBjmTozNV3NGuFwS39kx7GmrrB67VhHFXUIju1S//PWz7CDoMcO04WesgJx1+tdDz/4Pxo0EC9Dh9TyfKHLvCkg5h7aBNrMcPbQK9p5QWwUuD4aInYdQd/m5Nw5WXwCvDdO/qUj/c9nD2FLw2Ekry3TvOsBvgytfr387TyophbjIUHXfvOP2mwYz3PdOmhqgsh1Uv6JzxhtaE8YThN+lMn8/ucu84sRfoGa08LTRS32HrrQnDldI3kJWchtmpHn+jNYHeUyzpUFaoc4KbYqA/slEH2fVvwbj7IKL2CpxekTJXn/+KVyAsxrVj7PoctnyoMzlieni0efVKW6iD/NS/Q2Qn146x7xudv358uy6d7UtbP9Q1YS573re9eZugELjlP3Bip3vH6TTUe59IE5MhdZ4uDeHpT10HvofsDXD5i155/k2g9xTLbv09a52+Ky+wiT21masB0fnCa16GKf/nu3OfzYeUN3WWxIibXT9O15Gw+wvdM/Vlr778rLXC40QYfafrx0kcDzuX6nFmX/bqK8t15kvnYdDbj+V4Y3r4/g26IRIn6Fm2sjd49v4CpfT1icgu+hOpFzTRweRGyLJHfy8rhOPb/NsWV2Stho4D9a3paQuh0J2x8gZKnQelBe7fhRnREUbcoisWnsr0RMucU13h0c167a2jYfRv9AxM7vZsG2LbEsjP8n7efFPXbYwep/d0muXBH/XNWON/57XrSybQe4olHcKtwx1NLd+2olRnEySM17elV5bB2ld8c+6SAkh5HS64HDoNdv94yQ/om1tWveD+sZxRXgKrX/Jchccxd0OrCN2r9wX7mjB9pvjmnE1VaFv9PHlynF4pWPE3iOisr1N4iQn0nmLZoz96t+vV9O6gO7IJKkqs7e+py8huWKCzYLwtdb4O9pMe8czxIjvp4Z8tH8CpuucH8IhN7+qxeU/VhAmLgdF36esNJ3d75ph18WRNmJYgcbweuin30IRBmavg0Fqv9ubBBHrPKC3SF7Li+upqf1lrdU5vU2H7BJIwTn+f+DBUlnq/V19yGta9Bn2mQuehnjtu8gP6I/bqFz13TEfKS3SmiKcrPI6drW/K8Xav3tab91RNmJYgcbz+3ziS5pnjrfibHgnwYm8eTKD3jJy9+nvcBfqFUHra8xOYe1PWaugw8Kdsl9heMPBXuld/Jsd7510/X2faeKo3b9O2Cwy7ETYvgvzD9W/vqs3vWys8erj9YTE6c2vnZ3Byj2ePbc/TNWFagm5jAfHM8E3mav2/N/4BCPZuPSoT6D3Bkq6/t++ne3fQdIZvKsqs4/M1xpcn/l5nk6x91TvnLS3Uvfnel0CX4Z4//vjf6e/e6tXbKjzGj9HzqXra2PsgOEz3uL3BVuGx/QDP1YRpCVpH6aSFzFXuH2vFsxDeQScQeJkJ9J5g2a1ni4/urnuT0d2bzgXZo5uhvPj8C4lxF8DAq3Ve/Zlcz593w9v6Jil3M1VqExWvU9U2vQ8F2Z4//uZ/wekjMNlLY9tt2sGo23Wv27LX88e31YSZ9EjTvZPbXxIn6HH6ilLXj5G1Vr9ZJP/WJ3dCm7+wJ1jS9a33ttz5xPHWcfoq/7bLGVm28XkHGSMTH9FvAute8+w5S4v0J4VeF0HXEZ49tr0JD+rvq1/y7HErynRvvuso6OGl2+EBxt2vg8Cq5z17XPsKj/2mefbYLUFCsk5eOLLR9WP8+Ddo0x5G3Oq5dtXBBHpPsOzRF2JtEsfrsecTO/zWJKdlrtZFoBzV12jfFwZcpcfSi/M8d860BVCc673evE1UNxh6nc6MOX3Uc8fdskjXhPFWb96mTSyMvE1nxuTs99xxdy3VNWEmPmx68/VQSlFSXklBcTnHC0rIzDlDeuggFMKhTd/ww56TLN9+jE82ZrMoNYtt2fn1H/RQKmSsgOT7oVWYt38FwNwZ676yYp3GN+S6n5bZj9N7IjfcWyrL9Ytu6HW1bzPxEf0xf93rcOGf3D9n2RlY8wr0/DnEj3T/ePWZ8JAOzKtfgss8kMXi6wqP4+6H9W/rXv0v33T/eFVV8OPfrTVhPFzhsYlRSpF96izbsgvYdiSf7dkFHD9dQml5FWfLKzlbVklJRaXDgppftYond9M33Jp67ms4MED4w2X9+HVyIlJbJ+DHZyEsFpJ+7YXfyjGnAr2ITAFeBgKBt5VSz9ZY/w/A9hk2DGivlIqyrqsEbCkoh5RSzeuzYs5eQOkxbZuoeIhK0L3lMXf7rWn1OroFys/UfaNPh/46IKTOg3H36rs33ZG2EIpzvN+bt4lO0FPWbXxHX6B1tQ6NzdYPoeAQ/MI7NUnOE95e9+pT5uoeeLue7h1v9+f6mtI1C/xXpdRPTpwuYevhfLYfKWBrdgHbs/M5VVwOQHCg0K9TJP06RtK6VSChwQG0Dg6kdXAgIdbvocGBtG4VQGhQIOHbJ9PnwBI+v20koaGtCQ0OIECEv365m2f+s4sdRwr4v6sHERpc4zk+vEHXtbnozz6ta19voBeRQOB14GIgG9ggIsuUUrts2yilfme3/X3AMLtDnFVKDfVYixsbW8aN/dAN6OGb9OW6B9VYPx5Xj8+Pr3u7iY/oG3hS5sLP/uD6+cqKrTVhJkG30a4fp6EmPKRvoFrzMkx9tv7ta1NZrnvWnYf5tsLjuPv1xetVL8BVb7h+nKoqPTYf2wcG/NJz7WuEcotK2XakgO3ZBbrHnp3PyUJ98TQwQOjdPpyL+3dgcNcoBndtywUdIwgJasAbX+DFsPc9hgQchI4/vZbfuH44b6zYzwvf7mXviULm3TiCrtF2wzM/PqtLEY+83VO/qlOc6dGPAvYrpTIARGQxcCWwq5btZwFPeqZ5TYBlDwQEnd/TShyvhwxO7tLpWI1R5mr9ET48ru7tOg7UKXgpb8KYe3SKmSs2/hPOWGCyj3rzNjHdYchMff7xD7hemXPrYn1j3NS/+zbvPKKDvmi3fr5Oe3W18NeeL/Tr8eq3zuvNK6VYtvUoceEhjOvl+XrovvDdrhN8ujmbrYcLOJJ/FtB/ph6xbUjuFcvgrm0Z3LUt/Tu1pXUrNz/N2IZnM1ed02kJCBDu/Xlv+neO5LcfbmHaa2t47bphjOsZC9kbYf93cOGTenpCH3Kmq9kFsL/rJNu67DwikgB0B763WxwqImkikiIiV7na0EbLskeXPQgMPnd5Y8+nr6yAQynO12eZ9KguPJbq4jixrcJj4oSf7sD1pQkP6R75Ghfv9rX15jsNhT6XerRpTkn+re5QuFrDx9abb9cLBl5zzqqyiioe+3Q7v128hesXpPL2qgyUOzM9+cEPe05y5/tpbD6Uz9BuUfzhsr58eMcYtj15Cf97aDL/mDGUW5O7MyIhxv0gDzr9tX3/Wv+/f963A5/fm0xMm1bcuGA9C1YfRP34Nz306Ycy5p4eU5gJfKyUsr//P0EplQRcB7wkIucNMorIndY3g7QmNwG4Zc+54/M20QnQtlvjzac/vhXKivQnD2d0GqwLj6W8oWvTNNTGd/XsUb7uzdu06wmDp1vrxrtQw2f7v3VFTH/VhIns5F5lzvTlOgts4sPn9OZzikq5/u0UFm84zN2Te3Jp/4785cvdPPbpdsoqmkB6MLDjSAGzP9hE/86RfPfgJF6/bjh3TuzJ2J7tiAgNrv8ArkpI1skMleUOV/eIC2fp7GQu6teepV/+B9n3NeWjZ0NIhPfaVAtnAv0RIN7u567WZY7MBD60X6CUOmL9ngGs4Nzxe9s285VSSUqppLi4eoYRGpPys/qfLq6f4/WJyfodvzH2jjKdHJ+3N+kRHeRT5zXsXOUlsOYlfS5n31i8wdUaPvYVHi+Y6p22OWP8A7qGz6oG3u1rq3ce00OXtrDaebSAK19bw/YjBbw6axiPTunLG9cP596f9WLxhsPcuCCVU2fKPPs7eNjR/LPc9u4GoloHs/DmkbQJ8WEiYeJ4ncxwdEutm4SHBDH3+hG83Olr8lUbrts6uHpYyZecCfQbgN4i0l1EWqGD+bKaG4lIXyAaWGe3LFpEQqyPY4Fkah/bb3py94OqctyjB/1CKM79qVZ9Y5K5Btr11uO/zuo8VBcgW/e6LkjmrE3v6Zowkz1U4dFV7XrCoGutlTkb8Mlxx8eQl+H/Co+RnWH4zfraT/4h5/dL/0rPkTDx4eqb+r7cdoxfzV1HlVJ8/JtxXDGkM6DHmH9/6QX8Y8YQNh/K56o31rD/ZJE3fhu3FZaU8+t3NlBcWsnCW0fSPtK79WLOYz9OX4eA41vpkbeKvMF3sCcPrnh1NesOeOFu87raUN8GSqkK4F7ga2A3sEQptVNEnhYR+1TJmcBide7gXj8gTUS2Aj8Az9pn6zR5toJTNTNubKpfCI1s+KaqEg6tc61++uRHrVMOzndue1tNmG7j9Pi8v018WH8SW+dkDR9bTZjGUuFx/O8a1qtXSmd6RCfCoOlUVSle/Ca9eqhj2b3jGdil7Xm7/XJYVz68cwxnSiv45RtrWLm3cQ2plldWcc+iTew/WcTcG0bQt2Ok7xsRHqf/9+u7DvfjcxDalh6XP1g9bn/DglQWrj7os2shTo3RK6WWK6X6KKV6KqX+al32hFJqmd02Tyml5tTYb61SapBSaoj1+wLPNt/PLHv0JBftejleH50IkV0bX6A/vk1X2HQl8HYeBr0v1WURSgvr337Te1B4tPFUSIztrS9Grn/buRo+Oz7Rn9wmPdw42t/WOt3c5n85V5lz79dwbCtM+D1nKuA3/9rIK9/vZ3pSVz64YzRxEbXXQB+REM3S2cl0iWrNre9s4N21mZ77PdyglOJPS3ewal8O/++Xgxjf249ZQgnJOqmhssLx+mPbIP1Lna0W2pYeceF8ds84Luzbnqf/s4uHlmylpNz7Jc0baYJ3E2HZo4cDglo5Xi/SOMfpq8fnXZwRadKjuiDZ+rfq3q66wuNo6DHZtXN5wyRbDZ9ze/XllVXn9rDsa8L0vcLHjazDeFsNn3/UvZ2tNx+VwOH4aVwzdy3f7T7Bk1f052/XDHYqb7xrdBgf3z2OyX3ieHLZTv60dAcVlf69SPvGigMs3nCYe3/Wi+kj4+vfwZsSk3VSw7GtjtevfA5C2uopIq0iQoN584YRPHhxHz7bcoRfvbnW6+P2JtC7o7aMG3sJyTp33FazvjHIXAMxPV2/S7TrCH3D0NpXdYGy2tgqPPp7bLumuAv0DUPr36qu4XOmtIILX/iR//vK7npKY63wGBUPw67X9fALasuLAPZ9C0c3c6Dvb5g2N5VjBSW8++tR3Jrcvfbb8x0IDwli/k1J3DWxB++nZHHLPzdQUOw408Tblm09yt+/TufKoZ156JI+fmnDOWzJDFkOPrUf36Enqx/zm/PuPQkIEO6/sDdv35REVk4x07w8bt+IXr1NTEWpvkBX2/i8jS3LpLEM31RV6qnL3J3fdNIcOJun79h0pLrC40hd16axmfSIrrtjrcz52g/7OZRXzIfrD+mP0rbefFw/6NcIa8KMf1AnAtTWq7f25otCO/OLlV1pFx7C0tnJTOjtWlZbYIDw2GX9eO6awaQezOWXc9dwMOeMG79Aw23IzOP3S7YyKjGG5341uEFvVl4T0UEnNTj6/175HIRE1lkG5cJ+HVh6bzJRYcHcsCCVf67xzri9CfSuqs64qSfQx/SAiE6NJ9Cf2KFTJBuSVulIvDWAr31VB8yatn6gKzxOmtO4evM27ftZa/jMJys7m7dXZdC/UySFJRV8teOYLvmQk67H5htTb94mOqHOypzle7+DIxv5a+FUxvbpxGf3jKN7rPu1VaaPjOf920Zz6kwZV72+hrUHvDgDmZ0MSxF3vJdG15jWzL9pRMPKFXhb4vjzx+lP7NKvodF31Vsfqqc13/7nfduzcq/FK6O8jfAV3ERY6sm4sRGx1qdvJOP0tinQ3O3Rgw7ixTn6JiR7leX6Ds4uI6CXDyo8umrSI1BWyJZ//z9CggJ559aRJLQL46PULGtNmAug/1X+bmXtJjykOxtrXj5ncW5hCRkf/4lsFUtM8q28dVOSR28cGtOjHUtnJxMXEcJNC9bz4foGpHq6ILeolFvf2UCgCO/cMoqosFquiflL9fSh235atvI5aBWhL8I6ISI0mHk3jOCN60cQEOD5jpEJ9K46uUenudWWcWMvIVnfFZrrwZrirspcrbOB2nZ1/1jdrBdZ17ysC5bZbP1Q53k31t68TYcBnOx6KT/L/5SHJ3agfWQo05PiiT70ta7wOOmRxl3hMTrRWsPnHSg8DsDuY6d55pU3uKB8N7lD7+HhywYR6IXAkdCuDZ/eM45xvWJ57NPtPPOfXVRWeb4jU1JeyR3vpXG8oIS3bk6iWzvf1G9vkJrlTk7ugZ1LYfSdP83D7ISAAPFMeQZHx/bKUVsCyx49LOPMpL62NEZ/D99UVekXoyfvTp30qL7YvPGf+ufKclhprfDY+2LPnccLSsormZMzhUg5yw0sB+BXwzvz26BPyQ1NaPQVHssqqjg59F5UZTmHvvg/3l6VwTVz13BrxUeUtenEkCvu9er5I0ODWXhzEreMS2TB6oPc/u4GTpd47iJtVZXioSVb2Xw4n5dmDGV4NzdLZHtLZCed3GD7/175dz3f75jZ/m2XHTPxiKss6fUP29i066knAc5cDUm+mTrMoZM79c1O7o7P20uw3gi15mU9kcKOTyA/C6b+rXH35oG3V2XwfX4HcnpdTOz6N2HcPXQ4spIOAYd5ovx+nlDi83+QqipFXnEZlsJSLIWl5BSVVj+2FJ27zFZL/fngZH6Rvoh520Zxbcd8huTvgUnPQ1DtOfKeEhQYwFPTBtCrfThPLtvJmP/3PyZfEMelAzrys77tiXRjyOhvX+/hy+3H+ONl/Zg6yM15BLwtMRl2fq578zs+0UXo2rTzd6uqmUDviooyyDsA/X7h3PY1x+n9FQA9OT5vb/IceOdynYGzYQF0GgJ9pnj2HB52NP8sr/9wgCkDOhJ70Z9g3kRdmXP3fzgTnsiinJFMSLdwcf8GlIhwg1KKexZt4ptdJxwOgYQGB9A+IpS4iBB6xIYzqnsMceH65048Tsh/p/D92K2E526Dyk4w7EaftNvmhjEJDOzSliVph/l21wmWbz9OcKAwtmcslw7owMX9O9A+wvkSBf9KyWLejxncOCaB2yd092LLPSRxgr458NM79Dy/4+7zd4vOYQK9K/IOQFWF8z160ON4Oz7RKZnuzhLkqsxVeh7VqG6ePW7ieP0p4bun9PMy84NG35v/6/LdVCnFHy/vBzFhcMFl+iN3VQWh0+bS7qswPtpwyGeBftW+HL7acZyrh3VhSHwUcREh+is8hNiIENq0CqwjnbAbHJlOxNYF+vmf+pxzQ4oeNjQ+iqHxUfzlyoFsPnyKr3ee4Oudx/njZzt4fOkORnSL5tIBHbl0QMc6x9p/SD/JE5/v4Od92/PkFf0bRxplfWzj9Me36YliHM3B7Ecm0LvC2Ywbe/b59P4I9FVVkLXWez3tyY/Cu1dAx0E6aDZiaw/k8OW2YzxwUW/iY6wBZ9IjupRvTA8Ch0znmpP7mb8ygxOnS+jgg2JZb6zYT8fIUP7vmkGupQ5OfBi2L4HwjrrwmR8FBAgjEmIYkRDDY1P7kn6ikK936KD/1+W7+evy3fTtGFEd9Pt1iqgO5juPFnDvok306xTJq7OGERTYRC4jtu0C0d110sW4+/3dmvOYQO8KSzogum6Ks2L7QJs4PXwzwg//iJY9+gYnb5UJTpygZ87pPqlR9+YrKqv487JddI1uzW8m2b3hdh4GU57VpYgDg5ieFM/cFQf4eGM2s3/mRGaVGzYdOkVKRh6PX97P9fzw2F5w+Yv6rlk/9OZrIyL07RhJ346R/Pai3hzOK+brncf5ZucJXvl+Hy//bx/xMa25tH9HxvZsxx8+205k62AW3uLjksOecMlfdBns+mZs84Mm9kw2Eid369S24NbO7yOiP95lrvbPOL0tI8DT4/M2IjDhQbcOUVRaQVhwoFfyiG3eT8ki/UQhb94w4vyJm+3uYOwe24bR3WNYknaYuyf19Gqb5q44QNvWwcwa5eaQmj8v9DspPiaM2yf04PYJPcgpKuW7Xbqn/966LN5efZDwkCA+vnusTz5FeZyz1+z8wAR6V1jS9Z2VDZU4HnYt1ZOVxPj4AlPWamgbD1EJvj2vk/LOlHHxiz/Su0M4b988knAv9OZyikp58du9TOitLxDWZ+aoeH730VZSD+Yxtqd3Mij2nijk210nuP/C3k2vB+um2PAQZo7qxsxR3SgsKWfl3hwS2oX5p+RwM9dEBsAakcpyfeNTfcXMHPFX3RuldMZNQnKjHVb5x7d7yT9bzobMU1z/dir5xZ6f2ejv/03nbFklT14xwKkLfFMHdiIiNIiPNnjvzs83fzxA6+BAbh2X6LVzNAURocFcPriTw9r4hvtMoG+ovAyoKm/YhVibuL4Q1s73E4Zb0nWpAn9O41eH9OOFLErN4obR3Zh7/XB2Hz3NzPkpWApLPXaOrYfzWbLxMLcmJ9KrfbhT+4QGB3LV0C4s33HcK9Uas08Vs2zLUWaN6kZ0m0Z2W7/RrJhA31DVGTcu9Ojtx+l9yTbVmbfG592glOIvX+4iPCSIBy7qwyUDOrLgliSycouZMW8dRz1Qp7uqSvHEsp3Ehodw/4UNuIAOzBgZT1lFFZ9vraMcsIveWpmBCE0jT9xo0kygb6jqjBsXAj3oXnXBYTiV5dFm1SlrDURa078ame/3nGTVvhweuKhPda92Qu843rttFJbCUq59cx1Zue6Vw/14UzZbD+fz2NS+DS7uNbBLWwZ2ieTD9Yc9Wj42p6iUxRsOc9XQLnSOasBFfcNwgQn0DWXZo284auVicSXb8Imvhm8a8fh8WUUVf/1yNz3i2nDj2HMvEo9MjOGDO8ZQXFbBtW+uY98JJ6YtdKDgbDl/+2oPIxKi+eWwLi4dY0ZSPLuPnWbHkQZMiF6Pd9ZkUlZZxV2T/HTznNGimEDfUCf3uDY+bxPXT9en9tXwTc4+OHOyUQ7bvJ+SRUbOGf50eX+CHdwYM6hrWz66aywKmD5vHTuOFDT4HC99t5e84jL+PM25C7COTBvahZCgAD5K88xF2cKSct5dl8ml/Ts6fb3AMNzhVKAXkSkiki4i+0VkjoP1/xCRLdavvSKSb7fuZhHZZ/3y7y177qqs0FPLtXcj0AcE+Hac3jbFmSsTgXtR3pkyXv5uLxP7xDH5gtpvMOnTIYJ/3zWWsFZBzJqfQlpmntPnSD9eyHvrspg1qptb2RxtWwdz+aBOfL75KGfL3J/I+YPUQxSWVHD3ZNObN3yj3kAvIoHA68BUoD8wS0T622+jlPqdUmqoUmoo8CrwqXXfGOBJYDQwCnhSRBpprVEnnMqEyjL3evSgh2/ysyD/sEeaVafM1fq2+Jge3j9XA/zj272cKavkT5f3q7ennRjbhn//ZixxESHcuGA9q/fVP6uRUoqnlu0kPCSIhy9x8XqKnekj4yksrWD59mNuHaekvJK3Vx8kuVc7hsRHud0uw3CGMz36UcB+pVSGUqoMWAzUNYnmLOBD6+NLgW+VUnlKqVPAt0DjLmtYF8tu/d2VjBt7vhqnt43PJ45vVOPz9umUvTtEOLVP56jWfHTXWBLahfHrdzbwzc7jdW6/fPtx1mXk8vtL+ngkdXF09xgS24XxUZp7b86fbjqCpbCUeyZ7t6yCYdhzJtB3Aexf3dnWZecRkQSgO/B9Q/dtEmypla5m3Ni0HwChUT+lPXpL7gEoOt6oxudt6ZQRocE8cFGfBu0bFxHC4jvH0K9zJHcv2sTnWxynPBaXVfDXL3fRr1Mk1432zJ3AIsL0kfGsP5hHhqXIpWNUVFYxb+UBhnRtyzgv3WlrGI54+mLsTOBjpVSDBjJF5E4RSRORNIvF4uEmeZAlHdp2gxA3L6BVj9N7uUffCMfnf0qn7O1STzsqrBWLbh9NUkI0D3y0hcUO5iudu+IARwtK+PO0AR6dRu9Xw7sSGCAu9+qX7zhOVm4xd0/u2TRK7xrNhjOB/ggQb/dzV+syR2by07CN0/sqpeYrpZKUUklxcY2v8ls1yx73h21sEpPh1EEo8PyNONUyV0Ob9s7Na+sD9umUN4xxvacdHhLEO7eOYmLvOOZ8up23V2VUrzuUW8y8lRlcObQzo7o7P1+nM9pHhvLzvu35ZOMRyiurGrSvUoq5Kw7QI64Nl/Tv6NF2GUZ9nAn0G4DeItJdRFqhg/mymhuJSF8gGlhnt/hr4BIRibZehL3EuqzpqarUqYqeCvQ1JxT2tOrx+caTP19fOmVDtG4VyPybRjB1YEf+8uVuXvnfPpRSPP2fXQQHCH+4zIWic06YkRRPTlEp3+852aD9Vuy1sPvYaX7j5UqYhuFIvf9tSqkK4F50gN4NLFFK7RSRp0Vkmt2mM4HFyu72QaVUHvAM+s1iA/C0dVnTcyoTKkpcq1rpSMdBENLWe2mWpw5C4dFGU9/G2XTKhggJCuTVWcO4engXXvx2L3e8l8Z3u09w34W9vVbmdvIFcbSPCOGjDQ0bvpm74gCd2oZy1dCme4nKaLqcqouqlFoOLK+x7IkaPz9Vy74LgYUutq/xsKTr7+6mVtoEBELCWO8FettxPTkRuBsakk7ZEEGBATz/qyGEtQrkXymH6BHbhl8ne6/UQ1BgANcmdWXuigMcLyihY9v631A2ZuWx/mAeT/yiP62CzD2Khu+ZV52zbKmVsQ3LFKlT4ng9/+xp93KzHcpcA2GxnhtqcoMr6ZQNERAgPHPlQJ771WDm3jDC68F0elI8VQo+3uhcr/6NHw4QHRbMzFHx9W9sGF5gAr2zLOm6MFioBydF8NY4vVK6R98IxufdSadsCBFhelI8F3T0/BtJTQnt2jC2RzuWpGVTVVV3obM9x0/zvz0nuWVcd8JatayJRYzGwwR6Z1ncrHHjSMfBEBLp+eGb/Cw4nd0o0irdTadsrGaOiudQXjEpGbl1bvfmigOEtQrk5nGNc2Yvo2Uwgd4ZVVVg2ev5QB8YBN3GeD7QV4/P+/dGKU+lUzZGlw7oSGRoEIvruCh7OK+YL7Yd47pR3YgKaz5vckbTYwK9M/KzoOKsd8a7E8frQmmFJzx3zMw1eiYrT78xNZAn0ykbm9DgQH45rAv/3Xm81mkP56/MIEDg9gmNq86Q0fI0r/8+b7Fl3HgqtdKeLSsmy4O9+szVkDBO34HrJ7Z0ykl94vhZ3/Z+a4c3TbfOPrV08/k3vVkKS1mSdpirh3V1KjPHMLzJBHpnVNe48cLFxE5DoFW458oh5B+CgkN+T6u0pVM+frl3blxqDAZ0bsugLm1ZvOH82af+ueagdWIR05s3/M8EemdY9kBEJ2gd5flj28bpPZV5Y3vD8OONUt5Op2xMZoyMZ8/xQrbbTYpyuqSc99dlcdnATvSIMxOLGP5nAr0zPFnjxpGEZH2OIg8UdMtcrWewat+//m29wFfplI3FtKGdCQ0OOOei7L9SsigsNROLGI2HCfT1qc648eIQhC0N0hO9+qzV+o3DhfH53KJSDucVU9HAgl32mms6ZW0iQ4O5bFAnlm05SnFZBSXllSxcncmE3rFuzWplGJ5k7uCoz+lsKD/j3R5956EQ3Eb3xgdc5fpxCrJ1TZ5RdzV4193HTvPLN9ZQUl5FYIDQOSqUbjFhxEeHER9j/YpuTbeYMGLatHJYxqA5p1PWZebIbny66QjLtx/nbHklOUWl3DN5mL+bZRjVTKCvz0nrhVhvpioGBkO30e736F0cnz9TWsHsDzYRGRrME7/ow5H8Yg7lneVwXjHf7jpB7plz0wfDWgXavQG0Jj46jG4xYWzLzicj5wz/vGVks0unrMvIxGh6xLbhg9QsLEWlDI2PYkwPz5ZINgx3mEBfH1vGjbdrxiQkw/fPwJlcaOPi7EOZqyC0LXQY4PQuSikeX7qDzJwzfHDHGMb0OP/cZ0oryD51lkN5xRzOK+bwKev3vGLWHsih2G7C7InNOJ2yNrbZp579Sr9W/nR5fzOxiNGomEBfH0s6hHeAMC/30Gy98OW/hygXi1/t+wa6jdOVMZ3077RsPtt8hAcv7uMwyAO0CQnigo4RDuvIKKXIPVPG4bxijuaXtNie7NXDu/D81+l0j23DRf06+Ls5hnEOE+jrY9ntmwqQnYfruWjTl9e/bW0kAAZe7fTme08U8sSyHST3asfsn7k2C5WIEBseQmx4CMO6uXSIZqF9RCgvTB9CYrs2ZmIRo9Exgb4uSuke/dDrvH+uoFZkzfqBTm1b+6RmeXFZBfcs2kR4SDAvzRjm0blVW6orzaQiRiPVcq6YueL0ESgr8nrNmKoqxT++3cvk51dww4JUikorvHo+gCc+38kBSxEvzxxKXESI189nGIb/mEBfF4v3M27yi8u47d0NvPy/fYzvFcvGrFPctCCV0yXlXjvnJxuz+XhjNvf9rBfJvWK9dh7DMBoHE+jr4uXUyh1HCrjitdWs3p/DM1cN5L1fj+L164az/UgB17+VWmtVRHfsP1nI40t3MLp7DL9tAXeuGoZhAn3dLHugTZzr6Y51+HhjNtfMXUt5heKju8Zy45gERIQpAzsy78YRpJ8oZOb8FHKKSj12zrNllcxetJmwVoG8MsuMyxtGS2ECfV0s6R7vzZdWVPL40u38/t9bGd4tmv/cP57h3aLP2ebnfTuw4OYkMnPPMHN+CidPl3jk3H/+YifpJwp5ccZQOkSa0rmG0VI4FehFZIqIpIvIfhGZU8s200Vkl4jsFJEP7JZXisgW69cyTzXc65TyeDGzYwVnmTEvhX+lHOKuST14/7ZRxIY7vhA6oXcc79w6iqP5Z5k+bx1H88+6de6lm4+weMNh7pnck0l94tw6lmEYTUu9gV5EAoHXgalAf2CWiPSvsU1v4DEgWSk1AHjAbvVZpdRQ69c0j7Xc2wqPQelpj/Xo1+7P4RevrGbfiULmXj+cx6b2I6ieMgFjerTj/dtGkVtUxvR56zicV+zSuQ9YivjDZ9sZmRjNgxebcXnDaGmc6dGPAvYrpTKUUmXAYuDKGtvcAbyulDoFoJQ66dlm+oGHMm6UUsz78QA3LEgluk0rPr93PFMHdXJ6/xEJMSy6YzSFJRVMn7eOgzlnGnT+kvJKZi/aREhQAK/MGlbvm4thGM2PM//1XQD7GZCzrcvs9QH6iMgaEUkRkSl260JFJM26/CpHJxCRO63bpFksHqjJ7gm26QPdCPSFJeXc/a9N/N9Xe5g6sBNLZyfTq33DJ6IY3DWKD+8YQ1lFFdPnrWPfiUKn9336P7vYc7yQF6cPpVPb1g0+t2EYTZ+nundBQG9gMjALeEtEoqzrEpRSScB1wEsict5sDEqp+UqpJKVUUlxcIxk/PrkbWsdAG9fyzPefLOSq19fw7e4TPH55P167bhjhIa7fiNy/cySL7xwDwIz5Kew6errefb7YepQPUg9x18QeLa7QmGEYP3Em0B8B7KtsdbUus5cNLFNKlSulDgJ70YEfpdQR6/cMYAXQNAp1W9L1ZOAuVCH8ctsxpr22hoKz5Sy6fTS3T+jhkWqGvTtEsOSusYQEBTDrrRS2ZefXum1mzhke+3Q7w7tF8ftLfVCrxzCMRsuZQL8B6C0i3UWkFTATqJk9sxTdm0dEYtFDORkiEi0iIXbLk4Fdnmm6F7mYcVNRWcVfv9zF7A820bdjBP+5b0KtFSFd1T22DUvuGktEaBDXv5XKxqxT521TUl7J7A82ERggvHrd8BZVG94wjPPVGwGUUhXAvcDXwG5giVJqp4g8LSK2LJqvgVwR2QX8ADyslMoF+gFpIrLVuvxZpVTjD/RFJ6Akv0Hj8yXlldy0cD1vrTrILeMSWXznWDq29U6uenxMGEvuGktsRAg3LkglJSP3nPX/b/ludh49zfPXDqFLlBmXN4yWzqlBY6XUcmB5jWVP2D1WwIPWL/tt1gKD3G+mj7mQcfPnL3ay9kAuf//VYK5NcrGefAN0jmrNR3eO4bq3U7nln+t566YkJvSOY/n2Y7y3Lovbxnfn4v6mLrphGObOWMcamHHz8cZsPlx/mNk/6+mTIG/TPjKUxXeOIbFdG257N433U7J49ONtDImP4tEp3q24aRhG02ECvSOWPRAaBeH1Z6rsPnaax5duZ1zPdjx4se8vesaGh7D4zjFc0CGCPy3dAQKvzRrmk5r2hmE0DWbiEUdO7tG9+XoyZU6XlHPPIj2p9ssz/VckLCqsFYvuGM0zX+ziiiGdiY8J80s7DMNonEygr0kpPX1g/5o3/9bcTPHox9s4lFfMh3eM8fvkHZGhwfz92iF+bYNhGI2T+Xxf05kcOHuq3vH5BasP8tWO48yZ0pdR3VvmhNiGYTQNJtDXZNmtv9eRQ5+WmcezX+3h0gEduH1Cdx81zDAMwzUm0NdUnXHTz+HqnKJSZn+wiS7Rrfn7tUM8cserYRiGN5kx+poseyCkLUR0PG9VZZXit4s3k19czmf3jCIyNNgPDTQMw2gYE+hrsqTrYRsHPfWXv9vLmv25PPerwfTvHOmHxhmGYTScGbqp6eRuh+PzP6Sf5JXv9zM9qSvTfXhTlGEYhrtMoLd3JgeKc3TVSjvZp4r53Udb6NcpkqevHOinxhmGYbjGBHp71Rdif+rRl1boGZoqKxVzrx9OaHCgnxpnGIbhGjNGb686tfKnHPq/frmbrdkFvHnDCBJj2/ipYYZhGK4zPXp7lnRoFQGReqbEz7cc4b11Wdw5sQdTBp6fhWMYhtEUmEBvzzbZiAj7ThTy2KfbGZkYzcNmhibDMJowE+jtWdIhri9nSiu4e9EmwloF8pqZockwjCbOjNHb5OyHohOo9n2Z8+l2MixF/Ov20XSI9M4sUYZhGL5iuqo2q56HoNb8u2wcX2w9ykOXXMC4nrH+bpVhGIbbTKAHyD0A25Zw8oLr+OO3J/h53/bcPamnv1tlGIbhESbQA6x6ARUYzG37k2kfEcqL04cQ4KdJRAzDMDzNqUAvIlNEJF1E9ovInFq2mS4iu0Rkp4h8YLf8ZhHZZ/262VMN95i8DNi6mBO9Z7G9IJQ/Xt6PqLBW/m6VYRiGx9R7MVZEAoHXgYuBbGCDiCxTSu2y26Y38BiQrJQ6JSLtrctjgCeBJEABG637nvL8r+KiVS9AQBBfRU4HTjG2Rzt/t8gwDMOjnOnRjwL2K6UylFJlwGKg5jx7dwCv2wK4UuqkdfmlwLdKqTzrum+BKZ5pugecyoSti2HELXx/NJC+HSOIbmN684ZhNC/OBPouwGG7n7Oty+z1AfqIyBoRSRGRKQ3YFxG5U0TSRCTNYrE433p3rXoRJIDysfezMesUo82UgIZhNEOeuhgbBPQGJgOzgLdEJMrZnZVS85VSSUqppLi4OA81qR75h2DLIhh+E9sL21BcVsloM2xjGEYz5EygPwLYF2Dval1mLxtYppQqV0odBPaiA78z+/rHqhcBgfG/IzUjD8BM8m0YRrPkTKDfAPQWke4i0gqYCSyrsc1SdG8eEYlFD+VkAF8Dl4hItIhEA5dYl/lX/mHY/C8YfiO07UrqwVx6tQ8nNjzE3y0zDMPwuHqzbpRSFSJyLzpABwILlVI7ReRpIE0ptYyfAvouoBJ4WCmVCyAiz6DfLACeVkrleeMXaZDV/9Dfxz9IRWUVGw7mcdWw8y4dGIZhNAtO1bpRSi0HltdY9oTdYwU8aP2que9CYKF7zfSggiOw+X0Ydj1ExbPzcD5nzPi8YRjNWMu7M3bNS6CqYLx+T0o9mAvAGDM+bxhGM9WyAv3pY7DxXRh6HUQnAJCakUeP2Da0N1UqDcNoplpWoF/zElRVVPfmK6sU6zPzGN3D9OYNw2i+Wk6gLzwOG9+BIbMgpjsAu4+dprCkgtHdzfi8YRjNV8sJ9GtehspymPhQ9aLUgzoByPToDcNozlpGoC88AWkLYfAMiOlRvTg1I5duMWF0atvaj40zDMPwrpYR6Ne+ApVlMPH31YuqbOPzJtvGMIxmrvkH+iILbFgAg6ZDu59mjdp7spD84nKTP28YRrPX/AP92legsvSc3jxQXd/G9OgNw2jumnegP5MDG96GgddAbO9zVqUezKVLVGviY8L81DjDMAzfaN6Bfu2rUH4WJj58zmKlFKkZZnzeMIyWofkG+jO5sP4tGHg1xF1wzqr9J4vIPVNm0ioNw2gRmm+gX/calBfDxEfOW5Viy583N0oZhtECNM9AX5wH6+fDgKugfd/zVqdm5NIhMoSEdmZ83jCM5q95BvqUN6CsyGFvXilF6sE8Rndvh4j4oXGGYRi+1fwC/dlTkDoP+l8JHfqft/pgzhkshaWMMfnzhmG0EM0v0KfMhdLTDnvzYOrbGIbR8jSvQH82H1LehL6/gI4DHW6SmpFLbHgIPWLb+LZthmEYftK8An3qm1BaAJMedbi6eny+R4wZnzcMo8VoPoG+pEBfhL3gcug02OEmh/POcqygxEwbaBhGi+JUoBeRKSKSLiL7RWSOg/W3iIhFRLZYv263W1dpt3yZJxt/jooy6HsFTHI8Ng+QYp0f1hQyMwyjJQmqbwMRCQReBy4GsoENIrJMKbWrxqYfKaXudXCIs0qpoW63tD7hcXDV63VukpqRR0ybVvRuH+715hiGYTQWzvToRwH7lVIZSqkyYDFwpXeb5R2pB3MZlWjG5w3DaFmcCfRdgMN2P2dbl9V0jYhsE5GPRSTebnmoiKSJSIqIXOXoBCJyp3WbNIvF4nTjGyL7VDHZp86atErDMFocT12M/QJIVEoNBr4F3rVbl6CUSgKuA14SkZ41d1ZKzVdKJSmlkuLi4jzUpHP9VH/ejM8bhtGyOBPojwD2PfSu1mXVlFK5SqlS649vAyPs1h2xfs8AVgDD3Givy1IP5tK2dTB9O0b44/SGYRh+40yg3wD0FpHuItIKmAmckz0jIp3sfpwG7LYujxaREOvjWCAZqHkR1ydSD+YxMjGGgAAzPm8YRstSb9aNUqpCRO4FvgYCgYVKqZ0i8jSQppRaBtwvItOACiAPuMW6ez9gnohUod9UnnWQreN1xwtKyMot5sYxCb4+tWEYht/VG+gBlFLLgeU1lj1h9/gx4DEH+60FBrnZRrelWvPnTSEzwzBaouZzZ2wdUjLyiAgNol+nSH83xTAMw+daRKBPPZjLyMQYAs34vGEYLVCzD/QnC0vIsJwxE4EbhtFiNftAv766/rwZnzcMo2Vq9oE+NSOPNq0CGdjZjM8bhtEyNf9AfzCXEYkxBAU2+1/VMAzDoWYd/XKLStl7osiMzxuG0aI160BvG58fYwqZGYbRgjXrQJ96MI/Q4AAGdYnyd1MMwzD8plkH+pSMXEYkRNMqqFn/moZhGHVqthEwv7iM9BOFpiyxYRgtXrMN9OsP5qEU5kKsYRgtXrMN9KkH82gVFMCQ+Ch/N8UwDMOvmnGgz2V4tyhCgwP93RTDMAy/apaB/nRJObuOnjbj84ZhGDTTQJ+WmUeVwkwEbhiGQTMN9KkZebQKDGB4t2h/N8UwDMPvmmWgTzmYx5D4tmZ83jAMg2YY6ItKK9hxpMCMzxuGYVg1u0CflplHZZUy4/OGYRhWTgV6EZkiIukisl9E5jhYf4uIWERki/Xrdrt1N4vIPuvXzZ5svCOpB/MIChBGJJjxecMwDICg+jYQkUDgdeBiIBvYICLLlFK7amz6kVLq3hr7xgBPAkmAAjZa9z3lkdY7kJqRy6CubQlrVe+vZhiG0SI406MfBexXSmUopcqAxcCVTh7/UuBbpVSeNbh/C0xxran1Ky6rYFu2GZ83DMOw50yg7wIctvs527qspmtEZJuIfCwi8Q3ZV0TuFJE0EUmzWCxONv18m7LyqTDj84ZhGOfw1MXYL4BEpdRgdK/93YbsrJSar5RKUkolxcXFudyI1IO5BAgkmfF5wzCMas4E+iNAvN3PXa3LqimlcpVSpdYf3wZGOLuvJ6Vm5DGwS1siQoO9dQrDMIwmx5lAvwHoLSLdRaQVMBNYZr+BiHSy+3EasNv6+GvgEhGJFpFo4BLrMo8rKa9ky+F8xvQw4/OGYRj26k1NUUpViMi96AAdCCxUSu0UkaeBNKXUMuB+EZkGVAB5wC3WffNE5Bn0mwXA00qpPC/8HpwuKWfKwI5M7uP60I9hGEZzJEopf7fhHElJSSotLc3fzTAMw2hSRGSjUirJ0bpmd2esYRiGcS4T6A3DMJo5E+gNwzCaORPoDcMwmjkT6A3DMJo5E+gNwzCaORPoDcMwmjkT6A3DMJq5RnfDlIhYgCw3DhEL5HioOd5g2uce0z73mPa5pzG3L0Ep5bA0QKML9O4SkbTa7g5rDEz73GPa5x7TPvc09vbVxgzdGIZhNHMm0BuGYTRzzTHQz/d3A+ph2uce0z73mPa5p7G3z6FmN0ZvGIZhnKs59ugNwzAMO00y0IvIFBFJF5H9IjLHwfoQEfnIuj5VRBJ92LZ4EflBRHaJyE4R+a2DbSaLSIGIbLF+PeGr9tm1IVNEtlvPf94EAKK9Yn0Ot4nIcB+27QK752aLiJwWkQdqbOPT51BEForISRHZYbcsRkS+FZF91u8OJysWkZut2+wTkZt92L6/i8ge69/vMxGJqmXfOl8LXmzfUyJyxO5veFkt+9b5/+7F9n1k17ZMEdlSy75ef/7cppRqUl/oWa4OAD2AVsBWoH+Nbe4B3rQ+ngl85MP2dQKGWx9HAHsdtG8y8B8/P4+ZQGwd6y8DvgIEGAOk+vHvfRydI+y35xCYCAwHdtgtew6YY308B/ibg/1igAzr92jr42gfte8SIMj6+G+O2ufMa8GL7XsK+L0Tf/86/9+91b4a618AnvDX8+fuV1Ps0Y8C9iulMpRSZcBi4Moa21wJvGt9/DFwoYiILxqnlDqmlNpkfVyInj+3iy/O7WFXAu8pLQWIqjE3sK9cCBxQSrlzE53blFIr0dNk2rN/nb0LXOVg10uBb5VSeUqpU8C3wBRftE8p9Y1SqsL6YwrQ1dPndVYtz58znPl/d1td7bPGjunAh54+r680xUDfBThs93M25wfS6m2sL/QCwOezhluHjIYBqQ5WjxWRrSLylYgM8G3LAFDANyKyUUTudLDemefZF2ZS+z+Yv5/DDkqpY9bHx4EODrZpLM/jr9Gf0Byp77XgTfdah5YW1jL01RievwnACaXUvlrW+/P5c0pTDPRNgoiEA58ADyilTtdYvQk9FDEEeBVY6uPmAYxXSg0HpgKzRWSiH9pQJxFpBUwD/u1gdWN4Dqsp/Rm+UaawicgfgQpgUS2b+Ou1MBfoCQwFjqGHRxqjWdTdm2/0/0tNMdAfAeLtfu5qXeZwGxEJAtoCuT5pnT5nMDrIL1JKfVpzvVLqtFKqyPp4ORAsIrG+ap/1vEes308Cn6E/Ittz5nn2tqnAJqXUiZorGsNzCJywDWdZv590sI1fn0cRuQX4BXC99c3oPE68FrxCKXVCKVWplKoC3qrlvP5+/oKAq4GPatvGX89fQzTFQL8B6C0i3a09vpnAshrbLANs2Q2/Ar6v7UXuadbxvAXAbqXUi7Vs09F2zUBERqH/Dr58I2ojIhG2x+iLdjtqbLYMuMmafTMGKLAbpvCVWntS/n4OrexfZzcDnzvY5mvgEhGJtg5NXGJd5nUiMgV4BJimlCquZRtnXgveap/9NZ9f1nJeZ/7fvekiYI9SKtvRSn8+fw3i76vBrnyhM0L2oq/G/9G67Gn0CxogFP1xfz+wHujhw7aNR3+E3wZssX5dBvwG+I11m3uBnegMghRgnI+fvx7Wc2+1tsP2HNq3UYDXrc/xdiDJx21sgw7cbe2W+e05RL/hHAPK0ePEt6Gv+/wP2Ad8B8RYt00C3rbb99fW1+J+4FYftm8/enzb9jq0ZaJ1BpbX9VrwUfvet762tqGDd6ea7bP+fN7/uy/aZ13+ju01Z7etz58/d7/MnbGGYRjNXFMcujEMwzAawAR6wzCMZs4EesMwjGbOBHrDMIxmzgR6wzCMZs4EesMwjGbOBHrDMIxmzgR6wzCMZu7/A6Q5hVtOA0MDAAAAAElFTkSuQmCC\n", 492 | "text/plain": [ 493 | "
" 494 | ] 495 | }, 496 | "metadata": { 497 | "needs_background": "light" 498 | }, 499 | "output_type": "display_data" 500 | }, 501 | { 502 | "data": { 503 | "text/plain": [ 504 | "
" 505 | ] 506 | }, 507 | "metadata": {}, 508 | "output_type": "display_data" 509 | } 510 | ], 511 | "source": [ 512 | "# plot the loss\n", 513 | "plt.plot(r.history['loss'], label='train loss')\n", 514 | "plt.plot(r.history['val_loss'], label='val loss')\n", 515 | "plt.legend()\n", 516 | "plt.show()\n", 517 | "plt.savefig('LossVal_loss')\n", 518 | "\n", 519 | "# plot the accuracy\n", 520 | "plt.plot(r.history['accuracy'], label='train acc')\n", 521 | "plt.plot(r.history['val_accuracy'], label='val acc')\n", 522 | "plt.legend()\n", 523 | "plt.show()\n", 524 | "plt.savefig('AccVal_acc')" 525 | ] 526 | }, 527 | { 528 | "cell_type": "code", 529 | "execution_count": 34, 530 | "metadata": {}, 531 | "outputs": [], 532 | "source": [ 533 | "# save it as a h5 file\n", 534 | "\n", 535 | "\n", 536 | "from tensorflow.keras.models import load_model\n", 537 | "\n", 538 | "model.save('model_vgg16.h5')" 539 | ] 540 | }, 541 | { 542 | "cell_type": "code", 543 | "execution_count": null, 544 | "metadata": {}, 545 | "outputs": [], 546 | "source": [] 547 | }, 548 | { 549 | "cell_type": "code", 550 | "execution_count": 35, 551 | "metadata": {}, 552 | "outputs": [], 553 | "source": [ 554 | "\n", 555 | "y_pred = model.predict(test_set)\n" 556 | ] 557 | }, 558 | { 559 | "cell_type": "code", 560 | "execution_count": 36, 561 | "metadata": {}, 562 | "outputs": [ 563 | { 564 | "data": { 565 | "text/plain": [ 566 | "array([[1.08071638e-03, 3.28080803e-02, 1.40938358e-02, 9.52017426e-01],\n", 567 | " [6.48212081e-05, 3.76272453e-07, 9.98108983e-01, 1.82576303e-03],\n", 568 | " [9.98069108e-01, 4.38354881e-08, 2.79694970e-04, 1.65126985e-03],\n", 569 | " [1.90574420e-03, 6.20834953e-07, 9.98076916e-01, 1.66221180e-05],\n", 570 | " [2.93544168e-03, 2.18342058e-03, 1.03987521e-02, 9.84482408e-01],\n", 571 | " [1.23585598e-03, 1.37195078e-04, 9.93926585e-01, 4.70046466e-03],\n", 572 | " [5.18485345e-03, 9.52562571e-01, 1.32831134e-04, 4.21197526e-02],\n", 573 | " [4.34744754e-04, 1.28285792e-02, 3.98747995e-03, 9.82749104e-01],\n", 574 | " [8.25350955e-02, 3.11684459e-01, 3.73537302e-01, 2.32243121e-01],\n", 575 | " [7.13894069e-01, 1.14700936e-01, 1.23989824e-02, 1.59005970e-01],\n", 576 | " [1.23955928e-01, 3.05530787e-01, 3.02462336e-02, 5.40267050e-01],\n", 577 | " [2.72632996e-03, 2.09897235e-02, 2.10788921e-02, 9.55205083e-01],\n", 578 | " [5.82802715e-03, 4.64445323e-01, 3.76655348e-02, 4.92061198e-01],\n", 579 | " [2.54945271e-03, 2.06118330e-06, 3.14365199e-04, 9.97134089e-01],\n", 580 | " [1.11564873e-02, 2.96992337e-04, 9.86988664e-01, 1.55796099e-03],\n", 581 | " [4.65637725e-03, 8.08736682e-01, 4.15630117e-02, 1.45043999e-01],\n", 582 | " [3.95378843e-03, 7.04863906e-01, 1.88800885e-04, 2.90993541e-01],\n", 583 | " [1.24013796e-02, 8.02336668e-04, 9.60396826e-01, 2.63994653e-02]],\n", 584 | " dtype=float32)" 585 | ] 586 | }, 587 | "execution_count": 36, 588 | "metadata": {}, 589 | "output_type": "execute_result" 590 | } 591 | ], 592 | "source": [ 593 | "y_pred" 594 | ] 595 | }, 596 | { 597 | "cell_type": "code", 598 | "execution_count": 37, 599 | "metadata": {}, 600 | "outputs": [], 601 | "source": [ 602 | "import numpy as np\n", 603 | "y_pred = np.argmax(y_pred, axis=1)" 604 | ] 605 | }, 606 | { 607 | "cell_type": "code", 608 | "execution_count": 38, 609 | "metadata": {}, 610 | "outputs": [ 611 | { 612 | "data": { 613 | "text/plain": [ 614 | "array([3, 2, 0, 2, 3, 2, 1, 3, 2, 0, 3, 3, 3, 3, 2, 1, 1, 2], dtype=int64)" 615 | ] 616 | }, 617 | "execution_count": 38, 618 | "metadata": {}, 619 | "output_type": "execute_result" 620 | } 621 | ], 622 | "source": [ 623 | "y_pred" 624 | ] 625 | }, 626 | { 627 | "cell_type": "code", 628 | "execution_count": null, 629 | "metadata": {}, 630 | "outputs": [], 631 | "source": [] 632 | }, 633 | { 634 | "cell_type": "code", 635 | "execution_count": 1, 636 | "metadata": {}, 637 | "outputs": [], 638 | "source": [ 639 | "from tensorflow.keras.models import load_model\n", 640 | "from tensorflow.keras.preprocessing import image" 641 | ] 642 | }, 643 | { 644 | "cell_type": "code", 645 | "execution_count": 2, 646 | "metadata": {}, 647 | "outputs": [], 648 | "source": [ 649 | "model=load_model('model_resnet50.h5')" 650 | ] 651 | }, 652 | { 653 | "cell_type": "code", 654 | "execution_count": 39, 655 | "metadata": {}, 656 | "outputs": [ 657 | { 658 | "data": { 659 | "text/plain": [ 660 | "array([[[[ 6.7060997e+01, 5.4221001e+01, 4.7320000e+01],\n", 661 | " [ 6.9060997e+01, 5.6221001e+01, 4.9320000e+01],\n", 662 | " [ 7.3060997e+01, 6.0221001e+01, 5.3320000e+01],\n", 663 | " ...,\n", 664 | " [ 7.4060997e+01, 5.6221001e+01, 4.6320000e+01],\n", 665 | " [ 5.5060997e+01, 3.7221001e+01, 2.7320000e+01],\n", 666 | " [ 4.1060997e+01, 2.3221001e+01, 1.3320000e+01]],\n", 667 | "\n", 668 | " [[ 7.5060997e+01, 6.2221001e+01, 5.5320000e+01],\n", 669 | " [ 7.8060997e+01, 6.5221001e+01, 5.8320000e+01],\n", 670 | " [ 8.1060997e+01, 6.8221001e+01, 6.1320000e+01],\n", 671 | " ...,\n", 672 | " [ 9.7060997e+01, 7.9221001e+01, 6.9320000e+01],\n", 673 | " [ 7.3060997e+01, 5.5221001e+01, 4.5320000e+01],\n", 674 | " [ 4.9060997e+01, 3.1221001e+01, 2.1320000e+01]],\n", 675 | "\n", 676 | " [[ 8.7060997e+01, 7.4221001e+01, 6.7320000e+01],\n", 677 | " [ 9.0060997e+01, 7.7221001e+01, 7.0320000e+01],\n", 678 | " [ 9.3060997e+01, 8.0221001e+01, 7.3320000e+01],\n", 679 | " ...,\n", 680 | " [ 1.0106100e+02, 8.3221001e+01, 7.3320000e+01],\n", 681 | " [ 7.5060997e+01, 5.7221001e+01, 4.7320000e+01],\n", 682 | " [ 5.0060997e+01, 3.2221001e+01, 2.2320000e+01]],\n", 683 | "\n", 684 | " ...,\n", 685 | "\n", 686 | " [[ 1.0406100e+02, 8.9221001e+01, 9.4320000e+01],\n", 687 | " [ 1.0206100e+02, 8.7221001e+01, 9.2320000e+01],\n", 688 | " [ 9.9060997e+01, 8.4221001e+01, 8.9320000e+01],\n", 689 | " ...,\n", 690 | " [-1.0939003e+01, -1.6778999e+01, -1.4680000e+01],\n", 691 | " [-1.0939003e+01, -1.6778999e+01, -1.4680000e+01],\n", 692 | " [-1.0939003e+01, -1.6778999e+01, -1.4680000e+01]],\n", 693 | "\n", 694 | " [[ 1.0606100e+02, 9.1221001e+01, 9.6320000e+01],\n", 695 | " [ 1.0406100e+02, 8.9221001e+01, 9.4320000e+01],\n", 696 | " [ 1.0006100e+02, 8.5221001e+01, 9.0320000e+01],\n", 697 | " ...,\n", 698 | " [-5.9390030e+00, -1.1778999e+01, -9.6800003e+00],\n", 699 | " [-5.9390030e+00, -1.1778999e+01, -9.6800003e+00],\n", 700 | " [-5.9390030e+00, -1.1778999e+01, -9.6800003e+00]],\n", 701 | "\n", 702 | " [[ 1.0806100e+02, 9.4221001e+01, 9.6320000e+01],\n", 703 | " [ 1.0606100e+02, 9.2221001e+01, 9.4320000e+01],\n", 704 | " [ 1.0206100e+02, 8.8221001e+01, 9.0320000e+01],\n", 705 | " ...,\n", 706 | " [ 6.0997009e-02, -5.7789993e+00, -3.6800003e+00],\n", 707 | " [ 6.0997009e-02, -5.7789993e+00, -3.6800003e+00],\n", 708 | " [ 6.0997009e-02, -5.7789993e+00, -3.6800003e+00]]]],\n", 709 | " dtype=float32)" 710 | ] 711 | }, 712 | "execution_count": 39, 713 | "metadata": {}, 714 | "output_type": "execute_result" 715 | } 716 | ], 717 | "source": [ 718 | "img_data" 719 | ] 720 | }, 721 | { 722 | "cell_type": "code", 723 | "execution_count": 11, 724 | "metadata": {}, 725 | "outputs": [], 726 | "source": [ 727 | "img=image.load_img('Datasets/Test/Coffee/download (2).jpg',target_size=(224,224))\n", 728 | "\n" 729 | ] 730 | }, 731 | { 732 | "cell_type": "code", 733 | "execution_count": 12, 734 | "metadata": {}, 735 | "outputs": [ 736 | { 737 | "data": { 738 | "text/plain": [ 739 | "array([[[254., 254., 254.],\n", 740 | " [254., 254., 254.],\n", 741 | " [254., 254., 254.],\n", 742 | " ...,\n", 743 | " [254., 254., 254.],\n", 744 | " [255., 255., 255.],\n", 745 | " [255., 255., 255.]],\n", 746 | "\n", 747 | " [[254., 254., 254.],\n", 748 | " [254., 254., 254.],\n", 749 | " [254., 254., 254.],\n", 750 | " ...,\n", 751 | " [254., 254., 254.],\n", 752 | " [255., 255., 255.],\n", 753 | " [255., 255., 255.]],\n", 754 | "\n", 755 | " [[254., 254., 254.],\n", 756 | " [254., 254., 254.],\n", 757 | " [254., 254., 254.],\n", 758 | " ...,\n", 759 | " [254., 254., 254.],\n", 760 | " [255., 255., 255.],\n", 761 | " [255., 255., 255.]],\n", 762 | "\n", 763 | " ...,\n", 764 | "\n", 765 | " [[255., 255., 255.],\n", 766 | " [255., 255., 255.],\n", 767 | " [255., 255., 255.],\n", 768 | " ...,\n", 769 | " [255., 255., 255.],\n", 770 | " [255., 255., 255.],\n", 771 | " [255., 255., 255.]],\n", 772 | "\n", 773 | " [[255., 255., 255.],\n", 774 | " [255., 255., 255.],\n", 775 | " [255., 255., 255.],\n", 776 | " ...,\n", 777 | " [255., 255., 255.],\n", 778 | " [255., 255., 255.],\n", 779 | " [255., 255., 255.]],\n", 780 | "\n", 781 | " [[255., 255., 255.],\n", 782 | " [255., 255., 255.],\n", 783 | " [255., 255., 255.],\n", 784 | " ...,\n", 785 | " [255., 255., 255.],\n", 786 | " [255., 255., 255.],\n", 787 | " [255., 255., 255.]]], dtype=float32)" 788 | ] 789 | }, 790 | "execution_count": 12, 791 | "metadata": {}, 792 | "output_type": "execute_result" 793 | } 794 | ], 795 | "source": [ 796 | "x=image.img_to_array(img)\n", 797 | "x" 798 | ] 799 | }, 800 | { 801 | "cell_type": "code", 802 | "execution_count": 13, 803 | "metadata": {}, 804 | "outputs": [ 805 | { 806 | "data": { 807 | "text/plain": [ 808 | "(224, 224, 3)" 809 | ] 810 | }, 811 | "execution_count": 13, 812 | "metadata": {}, 813 | "output_type": "execute_result" 814 | } 815 | ], 816 | "source": [ 817 | "x.shape" 818 | ] 819 | }, 820 | { 821 | "cell_type": "code", 822 | "execution_count": 14, 823 | "metadata": {}, 824 | "outputs": [], 825 | "source": [ 826 | "x=x/255" 827 | ] 828 | }, 829 | { 830 | "cell_type": "code", 831 | "execution_count": 15, 832 | "metadata": {}, 833 | "outputs": [ 834 | { 835 | "data": { 836 | "text/plain": [ 837 | "(1, 224, 224, 3)" 838 | ] 839 | }, 840 | "execution_count": 15, 841 | "metadata": {}, 842 | "output_type": "execute_result" 843 | } 844 | ], 845 | "source": [ 846 | "import numpy as np\n", 847 | "x=np.expand_dims(x,axis=0)\n", 848 | "img_data=preprocess_input(x)\n", 849 | "img_data.shape" 850 | ] 851 | }, 852 | { 853 | "cell_type": "code", 854 | "execution_count": 16, 855 | "metadata": {}, 856 | "outputs": [ 857 | { 858 | "data": { 859 | "text/plain": [ 860 | "array([[0.9745471, 0.0254529]], dtype=float32)" 861 | ] 862 | }, 863 | "execution_count": 16, 864 | "metadata": {}, 865 | "output_type": "execute_result" 866 | } 867 | ], 868 | "source": [ 869 | "model.predict(img_data)" 870 | ] 871 | }, 872 | { 873 | "cell_type": "code", 874 | "execution_count": 17, 875 | "metadata": {}, 876 | "outputs": [], 877 | "source": [ 878 | "a=np.argmax(model.predict(img_data), axis=1)" 879 | ] 880 | }, 881 | { 882 | "cell_type": "code", 883 | "execution_count": 102, 884 | "metadata": {}, 885 | "outputs": [ 886 | { 887 | "data": { 888 | "text/plain": [ 889 | "array([ True])" 890 | ] 891 | }, 892 | "execution_count": 102, 893 | "metadata": {}, 894 | "output_type": "execute_result" 895 | } 896 | ], 897 | "source": [ 898 | "a==1" 899 | ] 900 | }, 901 | { 902 | "cell_type": "code", 903 | "execution_count": 18, 904 | "metadata": {}, 905 | "outputs": [], 906 | "source": [ 907 | "import tensorflow as tf" 908 | ] 909 | }, 910 | { 911 | "cell_type": "code", 912 | "execution_count": 19, 913 | "metadata": {}, 914 | "outputs": [ 915 | { 916 | "data": { 917 | "text/plain": [ 918 | "'2.2.0'" 919 | ] 920 | }, 921 | "execution_count": 19, 922 | "metadata": {}, 923 | "output_type": "execute_result" 924 | } 925 | ], 926 | "source": [ 927 | "tf.__version__" 928 | ] 929 | }, 930 | { 931 | "cell_type": "code", 932 | "execution_count": null, 933 | "metadata": {}, 934 | "outputs": [], 935 | "source": [] 936 | } 937 | ], 938 | "metadata": { 939 | "kernelspec": { 940 | "display_name": "Python 3", 941 | "language": "python", 942 | "name": "python3" 943 | }, 944 | "language_info": { 945 | "codemirror_mode": { 946 | "name": "ipython", 947 | "version": 3 948 | }, 949 | "file_extension": ".py", 950 | "mimetype": "text/x-python", 951 | "name": "python", 952 | "nbconvert_exporter": "python", 953 | "pygments_lexer": "ipython3", 954 | "version": "3.7.7" 955 | } 956 | }, 957 | "nbformat": 4, 958 | "nbformat_minor": 2 959 | } 960 | -------------------------------------------------------------------------------- /img/alex3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krishnaik06/Advanced-CNN-Architectures/7d0d717836e8f8153896352e57a22909feb21b8c/img/alex3.jpg -------------------------------------------------------------------------------- /img/alex4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krishnaik06/Advanced-CNN-Architectures/7d0d717836e8f8153896352e57a22909feb21b8c/img/alex4.jpg -------------------------------------------------------------------------------- /img/alex512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krishnaik06/Advanced-CNN-Architectures/7d0d717836e8f8153896352e57a22909feb21b8c/img/alex512.png --------------------------------------------------------------------------------