From 3ae1a7761ecf28ba364b0f41174d553a11438a36 Mon Sep 17 00:00:00 2001 From: Pranjal <65755220+reachpranjal@users.noreply.github.com> Date: Sun, 27 Sep 2020 02:09:41 +0530 Subject: [PATCH] Add files via upload --- ..._147]_5_3_using_a_pretrained_convnet.ipynb | 1536 +++++++++++++++++ 1 file changed, 1536 insertions(+) create mode 100644 [Issue_147]_5_3_using_a_pretrained_convnet.ipynb diff --git a/[Issue_147]_5_3_using_a_pretrained_convnet.ipynb b/[Issue_147]_5_3_using_a_pretrained_convnet.ipynb new file mode 100644 index 0000000000..df919628df --- /dev/null +++ b/[Issue_147]_5_3_using_a_pretrained_convnet.ipynb @@ -0,0 +1,1536 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + }, + "colab": { + "name": "[Issue #147] 5.3-using-a-pretrained-convnet.ipynb", + "provenance": [], + "toc_visible": true + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "code", + "metadata": { + "id": "qDKqXZDgGKM5", + "outputId": "af0fcbac-98d8-4068-c6d6-f9f49b7e1523" + }, + "source": [ + "import keras\n", + "keras.__version__" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ], + "name": "stderr" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'2.0.8'" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 1 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ia7lo8A8GKNB" + }, + "source": [ + "# Using a pre-trained convnet\n", + "\n", + "This notebook contains the code sample found in Chapter 5, Section 3 of [Deep Learning with Python](https://www.manning.com/books/deep-learning-with-python?a_aid=keras&a_bid=76564dff). Note that the original text features far more content, in particular further explanations and figures: in this notebook, you will only find source code and related comments.\n", + "\n", + "----\n", + "\n", + "A common and highly effective approach to deep learning on small image datasets is to leverage a pre-trained network. A pre-trained network \n", + "is simply a saved network previously trained on a large dataset, typically on a large-scale image classification task. If this original \n", + "dataset is large enough and general enough, then the spatial feature hierarchy learned by the pre-trained network can effectively act as a \n", + "generic model of our visual world, and hence its features can prove useful for many different computer vision problems, even though these \n", + "new problems might involve completely different classes from those of the original task. For instance, one might train a network on \n", + "ImageNet (where classes are mostly animals and everyday objects) and then re-purpose this trained network for something as remote as \n", + "identifying furniture items in images. Such portability of learned features across different problems is a key advantage of deep learning \n", + "compared to many older shallow learning approaches, and it makes deep learning very effective for small-data problems.\n", + "\n", + "In our case, we will consider a large convnet trained on the ImageNet dataset (1.4 million labeled images and 1000 different classes). \n", + "ImageNet contains many animal classes, including different species of cats and dogs, and we can thus expect to perform very well on our cat \n", + "vs. dog classification problem.\n", + "\n", + "We will use the VGG16 architecture, developed by Karen Simonyan and Andrew Zisserman in 2014, a simple and widely used convnet architecture \n", + "for ImageNet. Although it is a bit of an older model, far from the current state of the art and somewhat heavier than many other recent \n", + "models, we chose it because its architecture is similar to what you are already familiar with, and easy to understand without introducing \n", + "any new concepts. This may be your first encounter with one of these cutesie model names -- VGG, ResNet, Inception, Inception-ResNet, \n", + "Xception... you will get used to them, as they will come up frequently if you keep doing deep learning for computer vision.\n", + "\n", + "There are two ways to leverage a pre-trained network: *feature extraction* and *fine-tuning*. We will cover both of them. Let's start with \n", + "feature extraction." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vgMxES_5GKNC" + }, + "source": [ + "## Feature extraction\n", + "\n", + "Feature extraction consists of using the representations learned by a previous network to extract interesting features from new samples. \n", + "These features are then run through a new classifier, which is trained from scratch.\n", + "\n", + "As we saw previously, convnets used for image classification comprise two parts: they start with a series of pooling and convolution \n", + "layers, and they end with a densely-connected classifier. The first part is called the \"convolutional base\" of the model. In the case of \n", + "convnets, \"feature extraction\" will simply consist of taking the convolutional base of a previously-trained network, running the new data \n", + "through it, and training a new classifier on top of the output.\n", + "\n", + "![swapping FC classifiers](https://s3.amazonaws.com/book.keras.io/img/ch5/swapping_fc_classifier.png)\n", + "\n", + "Why only reuse the convolutional base? Could we reuse the densely-connected classifier as well? In general, it should be avoided. The \n", + "reason is simply that the representations learned by the convolutional base are likely to be more generic and therefore more reusable: the \n", + "feature maps of a convnet are presence maps of generic concepts over a picture, which is likely to be useful regardless of the computer \n", + "vision problem at hand. On the other end, the representations learned by the classifier will necessarily be very specific to the set of \n", + "classes that the model was trained on -- they will only contain information about the presence probability of this or that class in the \n", + "entire picture. Additionally, representations found in densely-connected layers no longer contain any information about _where_ objects are \n", + "located in the input image: these layers get rid of the notion of space, whereas the object location is still described by convolutional \n", + "feature maps. For problems where object location matters, densely-connected features would be largely useless.\n", + "\n", + "Note that the level of generality (and therefore reusability) of the representations extracted by specific convolution layers depends on \n", + "the depth of the layer in the model. Layers that come earlier in the model extract local, highly generic feature maps (such as visual \n", + "edges, colors, and textures), while layers higher-up extract more abstract concepts (such as \"cat ear\" or \"dog eye\"). So if your new \n", + "dataset differs a lot from the dataset that the original model was trained on, you may be better off using only the first few layers of the \n", + "model to do feature extraction, rather than using the entire convolutional base.\n", + "\n", + "In our case, since the ImageNet class set did contain multiple dog and cat classes, it is likely that it would be beneficial to reuse the \n", + "information contained in the densely-connected layers of the original model. However, we will chose not to, in order to cover the more \n", + "general case where the class set of the new problem does not overlap with the class set of the original model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mi1wImtdGKNE" + }, + "source": [ + "Let's put this in practice by using the convolutional base of the VGG16 network, trained on ImageNet, to extract interesting features from \n", + "our cat and dog images, and then training a cat vs. dog classifier on top of these features.\n", + "\n", + "The VGG16 model, among others, comes pre-packaged with Keras. You can import it from the `keras.applications` module. Here's the list of \n", + "image classification models (all pre-trained on the ImageNet dataset) that are available as part of `keras.applications`:\n", + "\n", + "* Xception\n", + "* InceptionV3\n", + "* ResNet50\n", + "* VGG16\n", + "* VGG19\n", + "* MobileNet\n", + "\n", + "Let's instantiate the VGG16 model:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2Q_Eu1ZZGKNF" + }, + "source": [ + "from keras.applications import VGG16\n", + "\n", + "conv_base = VGG16(weights='imagenet',\n", + " include_top=False,\n", + " input_shape=(150, 150, 3))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7RHJHE3NGKNP" + }, + "source": [ + "We passed three arguments to the constructor:\n", + "\n", + "* `weights`, to specify which weight checkpoint to initialize the model from\n", + "* `include_top`, which refers to including or not the densely-connected classifier on top of the network. By default, this \n", + "densely-connected classifier would correspond to the 1000 classes from ImageNet. Since we intend to use our own densely-connected \n", + "classifier (with only two classes, cat and dog), we don't need to include it.\n", + "* `input_shape`, the shape of the image tensors that we will feed to the network. This argument is purely optional: if we don't pass it, \n", + "then the network will be able to process inputs of any size.\n", + "\n", + "Here's the detail of the architecture of the VGG16 convolutional base: it's very similar to the simple convnets that you are already \n", + "familiar with." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "2HlG8Gi7GKNQ", + "outputId": "e5453ec4-770c-48d1-d04e-01b132346499" + }, + "source": [ + "conv_base.summary()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_1 (InputLayer) (None, 150, 150, 3) 0 \n", + "_________________________________________________________________\n", + "block1_conv1 (Conv2D) (None, 150, 150, 64) 1792 \n", + "_________________________________________________________________\n", + "block1_conv2 (Conv2D) (None, 150, 150, 64) 36928 \n", + "_________________________________________________________________\n", + "block1_pool (MaxPooling2D) (None, 75, 75, 64) 0 \n", + "_________________________________________________________________\n", + "block2_conv1 (Conv2D) (None, 75, 75, 128) 73856 \n", + "_________________________________________________________________\n", + "block2_conv2 (Conv2D) (None, 75, 75, 128) 147584 \n", + "_________________________________________________________________\n", + "block2_pool (MaxPooling2D) (None, 37, 37, 128) 0 \n", + "_________________________________________________________________\n", + "block3_conv1 (Conv2D) (None, 37, 37, 256) 295168 \n", + "_________________________________________________________________\n", + "block3_conv2 (Conv2D) (None, 37, 37, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_conv3 (Conv2D) (None, 37, 37, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_pool (MaxPooling2D) (None, 18, 18, 256) 0 \n", + "_________________________________________________________________\n", + "block4_conv1 (Conv2D) (None, 18, 18, 512) 1180160 \n", + "_________________________________________________________________\n", + "block4_conv2 (Conv2D) (None, 18, 18, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_conv3 (Conv2D) (None, 18, 18, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_pool (MaxPooling2D) (None, 9, 9, 512) 0 \n", + "_________________________________________________________________\n", + "block5_conv1 (Conv2D) (None, 9, 9, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv2 (Conv2D) (None, 9, 9, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv3 (Conv2D) (None, 9, 9, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_pool (MaxPooling2D) (None, 4, 4, 512) 0 \n", + "=================================================================\n", + "Total params: 14,714,688\n", + "Trainable params: 14,714,688\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "SZRW_pIcGKNX" + }, + "source": [ + "The final feature map has shape `(4, 4, 512)`. That's the feature on top of which we will stick a densely-connected classifier.\n", + "\n", + "At this point, there are two ways we could proceed: \n", + "\n", + "* Running the convolutional base over our dataset, recording its output to a Numpy array on disk, then using this data as input to a \n", + "standalone densely-connected classifier similar to those you have seen in the first chapters of this book. This solution is very fast and \n", + "cheap to run, because it only requires running the convolutional base once for every input image, and the convolutional base is by far the \n", + "most expensive part of the pipeline. However, for the exact same reason, this technique would not allow us to leverage data augmentation at \n", + "all.\n", + "* Extending the model we have (`conv_base`) by adding `Dense` layers on top, and running the whole thing end-to-end on the input data. This \n", + "allows us to use data augmentation, because every input image is going through the convolutional base every time it is seen by the model. \n", + "However, for this same reason, this technique is far more expensive than the first one.\n", + "\n", + "We will cover both techniques. Let's walk through the code required to set-up the first one: recording the output of `conv_base` on our \n", + "data and using these outputs as inputs to a new model.\n", + "\n", + "We will start by simply running instances of the previously-introduced `ImageDataGenerator` to extract images as Numpy arrays as well as \n", + "their labels. We will extract features from these images simply by calling the `predict` method of the `conv_base` model." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "sB33ReMxGKNY", + "outputId": "2ab95250-8113-4109-b9a2-205118be2d8f" + }, + "source": [ + "import os\n", + "import numpy as np\n", + "from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", + "from keras.applications.vgg16 import VGG16\n", + "\n", + "base_dir = '/Users/fchollet/Downloads/cats_and_dogs_small'\n", + "\n", + "train_dir = os.path.join(base_dir, 'train')\n", + "validation_dir = os.path.join(base_dir, 'validation')\n", + "test_dir = os.path.join(base_dir, 'test')\n", + "\n", + "datagen = ImageDataGenerator(rescale=1./255)\n", + "batch_size = 20\n", + "Image_Size = 200\n", + "\n", + "conv_base = VGG16(weights='imagenet', include_top=False, input_shape= (Image_Size, Image_Size, 3))\n", + "\n", + "def extract_features(directory, sample_count):\n", + " features = np.zeros(shape=(sample_count, 4, 4, 512))\n", + " labels = np.zeros(shape=(sample_count))\n", + " generator = datagen.flow_from_directory(\n", + " directory,\n", + " target_size=(150, 150),\n", + " batch_size=batch_size,\n", + " class_mode='binary')\n", + " i = 0\n", + " for inputs_batch, labels_batch in generator:\n", + " features_batch = conv_base.predict(inputs_batch) # error !\n", + " features[i * batch_size : (i + 1) * batch_size] = features_batch\n", + " labels[i * batch_size : (i + 1) * batch_size] = labels_batch\n", + " i += 1\n", + " if i * batch_size >= sample_count:\n", + " # Note that since generators yield data indefinitely in a loop,\n", + " # we must `break` after every image has been seen once.\n", + " break\n", + " return features, labels\n", + "\n", + "train_features, train_labels = extract_features(train_dir, 2000)\n", + "validation_features, validation_labels = extract_features(validation_dir, 1000)\n", + "test_features, test_labels = extract_features(test_dir, 1000)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Found 2000 images belonging to 2 classes.\n", + "Found 1000 images belonging to 2 classes.\n", + "Found 1000 images belonging to 2 classes.\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fqROtEC8GKNe" + }, + "source": [ + "The extracted features are currently of shape `(samples, 4, 4, 512)`. We will feed them to a densely-connected classifier, so first we must \n", + "flatten them to `(samples, 8192)`:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "410kczohGKNf" + }, + "source": [ + "train_features = np.reshape(train_features, (2000, 4 * 4 * 512))\n", + "validation_features = np.reshape(validation_features, (1000, 4 * 4 * 512))\n", + "test_features = np.reshape(test_features, (1000, 4 * 4 * 512))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Yi3HHRMEGKNk" + }, + "source": [ + "At this point, we can define our densely-connected classifier (note the use of dropout for regularization), and train it on the data and \n", + "labels that we just recorded:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "St32lHoQGKNk", + "outputId": "53f7942b-a1c8-4472-c9bf-d001c904abbf" + }, + "source": [ + "from keras import models\n", + "from keras import layers\n", + "from keras import optimizers\n", + "\n", + "model = models.Sequential()\n", + "model.add(layers.Dense(256, activation='relu', input_dim=4 * 4 * 512))\n", + "model.add(layers.Dropout(0.5))\n", + "model.add(layers.Dense(1, activation='sigmoid'))\n", + "\n", + "model.compile(optimizer=optimizers.RMSprop(lr=2e-5),\n", + " loss='binary_crossentropy',\n", + " metrics=['acc'])\n", + "\n", + "history = model.fit(train_features, train_labels,\n", + " epochs=30,\n", + " batch_size=20,\n", + " validation_data=(validation_features, validation_labels))" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Train on 2000 samples, validate on 1000 samples\n", + "Epoch 1/30\n", + "2000/2000 [==============================] - 1s - loss: 0.6253 - acc: 0.6455 - val_loss: 0.4526 - val_acc: 0.8300\n", + "Epoch 2/30\n", + "2000/2000 [==============================] - 0s - loss: 0.4490 - acc: 0.7965 - val_loss: 0.3784 - val_acc: 0.8450\n", + "Epoch 3/30\n", + "2000/2000 [==============================] - 0s - loss: 0.3670 - acc: 0.8490 - val_loss: 0.3327 - val_acc: 0.8660\n", + "Epoch 4/30\n", + "2000/2000 [==============================] - 0s - loss: 0.3176 - acc: 0.8705 - val_loss: 0.3115 - val_acc: 0.8820\n", + "Epoch 5/30\n", + "2000/2000 [==============================] - 0s - loss: 0.3017 - acc: 0.8800 - val_loss: 0.2926 - val_acc: 0.8820\n", + "Epoch 6/30\n", + "2000/2000 [==============================] - 0s - loss: 0.2674 - acc: 0.8960 - val_loss: 0.2799 - val_acc: 0.8880\n", + "Epoch 7/30\n", + "2000/2000 [==============================] - 0s - loss: 0.2510 - acc: 0.9040 - val_loss: 0.2732 - val_acc: 0.8890\n", + "Epoch 8/30\n", + "2000/2000 [==============================] - 0s - loss: 0.2414 - acc: 0.9030 - val_loss: 0.2644 - val_acc: 0.8950\n", + "Epoch 9/30\n", + "2000/2000 [==============================] - 0s - loss: 0.2307 - acc: 0.9070 - val_loss: 0.2583 - val_acc: 0.8890\n", + "Epoch 10/30\n", + "2000/2000 [==============================] - 0s - loss: 0.2174 - acc: 0.9205 - val_loss: 0.2577 - val_acc: 0.8930\n", + "Epoch 11/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1997 - acc: 0.9235 - val_loss: 0.2500 - val_acc: 0.8970\n", + "Epoch 12/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1962 - acc: 0.9280 - val_loss: 0.2470 - val_acc: 0.8950\n", + "Epoch 13/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1864 - acc: 0.9275 - val_loss: 0.2460 - val_acc: 0.8980\n", + "Epoch 14/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1796 - acc: 0.9325 - val_loss: 0.2473 - val_acc: 0.8950\n", + "Epoch 15/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1760 - acc: 0.9380 - val_loss: 0.2450 - val_acc: 0.8960\n", + "Epoch 16/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1612 - acc: 0.9400 - val_loss: 0.2543 - val_acc: 0.8940\n", + "Epoch 17/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1595 - acc: 0.9425 - val_loss: 0.2392 - val_acc: 0.9010\n", + "Epoch 18/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1534 - acc: 0.9470 - val_loss: 0.2385 - val_acc: 0.9000\n", + "Epoch 19/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1494 - acc: 0.9490 - val_loss: 0.2453 - val_acc: 0.9000\n", + "Epoch 20/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1409 - acc: 0.9515 - val_loss: 0.2394 - val_acc: 0.9030\n", + "Epoch 21/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1304 - acc: 0.9535 - val_loss: 0.2379 - val_acc: 0.9010\n", + "Epoch 22/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1294 - acc: 0.9550 - val_loss: 0.2376 - val_acc: 0.9010\n", + "Epoch 23/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1269 - acc: 0.9535 - val_loss: 0.2473 - val_acc: 0.8970\n", + "Epoch 24/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1234 - acc: 0.9635 - val_loss: 0.2372 - val_acc: 0.9020\n", + "Epoch 25/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1159 - acc: 0.9635 - val_loss: 0.2380 - val_acc: 0.9030\n", + "Epoch 26/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1093 - acc: 0.9665 - val_loss: 0.2409 - val_acc: 0.9030\n", + "Epoch 27/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1069 - acc: 0.9605 - val_loss: 0.2477 - val_acc: 0.9000\n", + "Epoch 28/30\n", + "2000/2000 [==============================] - 0s - loss: 0.1071 - acc: 0.9670 - val_loss: 0.2486 - val_acc: 0.9010\n", + "Epoch 29/30\n", + "2000/2000 [==============================] - 0s - loss: 0.0988 - acc: 0.9695 - val_loss: 0.2437 - val_acc: 0.9030\n", + "Epoch 30/30\n", + "2000/2000 [==============================] - 0s - loss: 0.0968 - acc: 0.9680 - val_loss: 0.2428 - val_acc: 0.9030\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "L7izg8toGKNp" + }, + "source": [ + "Training is very fast, since we only have to deal with two `Dense` layers -- an epoch takes less than one second even on CPU.\n", + "\n", + "Let's take a look at the loss and accuracy curves during training:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "11z2X8wwGKNq", + "outputId": "b8eaf3e6-c2d8-4953-b1ea-bb441c8390bb" + }, + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "acc = history.history['acc']\n", + "val_acc = history.history['val_acc']\n", + "loss = history.history['loss']\n", + "val_loss = history.history['val_loss']\n", + "\n", + "epochs = range(len(acc))\n", + "\n", + "plt.plot(epochs, acc, 'bo', label='Training acc')\n", + "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n", + "plt.title('Training and validation accuracy')\n", + "plt.legend()\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(epochs, loss, 'bo', label='Training loss')\n", + "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n", + "plt.title('Training and validation loss')\n", + "plt.legend()\n", + "\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\nTxwfuPtF7j4YuDWa9nH0vSb6XkG4yTs4pbOSSA6IU23THFUxqTZvbI426Nnerj3XxAn6c4HeZtbL\nzNoB44HZyQnMrJuZJdZ1M/BwNL2LmbVPpAGGA7WfJmrlTj/99FoPWt1///1861vfanC5Qw45BIAP\nPviAcePG1Zlm5MiRlJeXN7ie+++/n6qka/kxY8bw8ccfx8m6NKN01783R1UMKOhKDXEuB4AxwDJC\nK55bo2lTgfN9fxXQO1GaXwDto+lfABYR6vwXAV9vbFutsXrn5z//uU+aNKnatJNOOslfeeWVBpfr\n1KlTo+s+7bTTqnXYVpfi4mKvrKxsPKOtQKaPVTqku5OsuNU2raEqRrIX6Wyn35Kf1hj0N2zY4IWF\nhf7pp5+6u/vKlSu9R48evnfvXt+6daufccYZPnjwYO/Xr58/9dRT+5ZLBP2VK1d637593d29qqrK\nL7nkEu/Tp49fcMEFPmzYsH1B/+qrr/ahQ4d6aWmp33777e7u/sADD3jbtm29X79+PnLkSHevfhK4\n9957vW/fvt63b999PXSuXLnS+/Tp41dddZWXlpb6qFGj9vWgmWz27Nk+bNgwHzRokH/xi1/0Dz/8\n0N3dt27d6pMmTfJ+/fp5//79/fHHH3d392eeecYHDx7sAwYM8DPOOKPO3yrTx+pANccDSqk0W1Qg\nl6bK2aB//fXup52W3s/11zf+g37pS1/aF9Dvvvtu/853vuPu4QnZzZs3u7t7ZWWlH3vssb537153\nrzvo33vvvX7FFVe4u/uCBQu8oKBgX9BPdGm8e/duP+2003zBggXuXruknxgvLy/3fv36+bZt23zr\n1q1eWlrqb7zxhq9cudILCgr2dbl88cUX+yOPPFJrnzZu3Lgvrw899JDfeOON7u7+ve99z69P+lE2\nbtzo69ev96KiIl+xYkW1vNaU7UE/3x9QkuwVN+jnXN87zWXChAnMnDkTgJkzZzJhwgQgnDRvueUW\nBgwYwJlnnsmaNWtYt25dvet59dVXueyyywAYMGAAAwYM2Ddv1qxZDBkyhMGDB7N48eI6O1NLNmfO\nHC688EI6derEIYccwkUXXcRrr70GQK9evRg0aBBQf/fNFRUVnH322fTv35977rmHxYsXA/D8889z\nzTXX7EvXpUsXXn/9dU499VR69eoF5G73y3FvpjZX/btIczso0xlIVfRiqRY3duxYbrjhBt544w2q\n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\nJI/8f8VPE/svVwa/AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nfRFJyI9/DKm+wVC/fhCJi3EdddRRDBw4kFdffZWRI0cya9YsxowZg5mRl5fHc889xze+8Q22bdvG\n6aefzogRIyq8j+hDDz1Es2bNWLlyJcuWLTtkyN6pU6dy1FFHceDAAc455xyWLVvGjTfeyPTp05k3\nbx5t27Y9ZF2LFy/m0UcfZcGCBbg7p512GkOGDOHII49k9erVPPXUU/z+979nzJgxPPvss5WOz371\n1Vfz4IMPMmTIEO644w5++ctfcv/99zNt2jQ+/vhjmjZtWpYKuvfee5kxYwaDBg1i9+7d5OXlJfFt\nV00tdxGpM7GpmdiUjLtz66230qdPH84991w2btzIli1bKlzP/Pnzy4Jsnz596NOnT9lrs2fPZsCA\nAfTv358VK1ZUOSjY22+/zahRo2jevDktWrTgsssu46233gKga9eu9OvXD6h8WGEI48vv2LGDIUOG\nAHDNNdcwf/78sjqOHz+eJ554ouxK2EGDBnHTTTfxwAMPsGPHjpRfIauWu0gOqqyFXZtGjhzJT37y\nE5YsWcKePXs45ZRTACgsLKS4uJjFixfTuHFj8vPz4w7zW5WPP/6Ye++9l4ULF3LkkUcyYcKEaq0n\nKjpcMIQhg6tKy1Tk5ZdfZv78+bz44otMnTqV5cuXM3nyZC6++GJeeeUVBg0axNy5czn55JOrXdfy\n1HIXkTrTokULhg0bxn/8x38cciJ1586dfPOb36Rx48bMmzeP9fFumBzjrLPO4sknnwTg/fffZ9my\nZUAYLrh58+a0atWKLVu28Oqrr5a9p2XLlnHz2oMHD+b5559nz549fPnllzz33HMMHjw46W1r1aoV\nRx55ZFmr//HHH2fIkCGUlpbyySefMGzYMO6++2527tzJ7t27+eijj+jduze33HILp556Kh9++GHS\nn1kZtdxFpE6NGzeOUaNGHdJzZvz48VxyySX07t2bgoKCKluw119/PRMnTqR79+5079697BdA3759\n6d+/PyeffDKdOnU6ZLjgSZMmMXz4cNq3b8+8efPKlg8YMIAJEyYwcOBAAK699lr69+9faQqmIo89\n9hjXXXcde/bs4bjjjuPRRx/lwIEDXHnllezcuRN358Ybb6R169b8/Oc/Z968eTRo0ICePXuW3VUq\nVaoc8re2aMhfkbqlIX8zT02G/FVaRkQkCym4i4hkIQV3kRySrjSsJK+m+0rBXSRH5OXlsX37dgX4\n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\nVgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EXISVUpXGKNu" + }, + "source": [ + "\n", + "We reach a validation accuracy of about 90%, much better than what we could achieve in the previous section with our small model trained from \n", + "scratch. However, our plots also indicate that we are overfitting almost from the start -- despite using dropout with a fairly large rate. \n", + "This is because this technique does not leverage data augmentation, which is essential to preventing overfitting with small image datasets.\n", + "\n", + "Now, let's review the second technique we mentioned for doing feature extraction, which is much slower and more expensive, but which allows \n", + "us to leverage data augmentation during training: extending the `conv_base` model and running it end-to-end on the inputs. Note that this \n", + "technique is in fact so expensive that you should only attempt it if you have access to a GPU: it is absolutely intractable on CPU. If you \n", + "cannot run your code on GPU, then the previous technique is the way to go.\n", + "\n", + "Because models behave just like layers, you can add a model (like our `conv_base`) to a `Sequential` model just like you would add a layer. \n", + "So you can do the following:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "4pNF5St1GKNv" + }, + "source": [ + "from keras import models\n", + "from keras import layers\n", + "\n", + "model = models.Sequential()\n", + "model.add(conv_base)\n", + "model.add(layers.Flatten())\n", + "model.add(layers.Dense(256, activation='relu'))\n", + "model.add(layers.Dense(1, activation='sigmoid'))" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "B3IlZ-ecGKNz" + }, + "source": [ + "This is what our model looks like now:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "lCQFXD7VGKN0", + "outputId": "2f261ea3-2d64-45a2-8cdc-0972bd86c79b" + }, + "source": [ + "model.summary()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "vgg16 (Model) (None, 4, 4, 512) 14714688 \n", + "_________________________________________________________________\n", + "flatten_1 (Flatten) (None, 8192) 0 \n", + "_________________________________________________________________\n", + "dense_3 (Dense) (None, 256) 2097408 \n", + "_________________________________________________________________\n", + "dense_4 (Dense) (None, 1) 257 \n", + "=================================================================\n", + "Total params: 16,812,353\n", + "Trainable params: 16,812,353\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1NIDngPCGKN4" + }, + "source": [ + "As you can see, the convolutional base of VGG16 has 14,714,688 parameters, which is very large. The classifier we are adding on top has 2 \n", + "million parameters.\n", + "\n", + "Before we compile and train our model, a very important thing to do is to freeze the convolutional base. \"Freezing\" a layer or set of \n", + "layers means preventing their weights from getting updated during training. If we don't do this, then the representations that were \n", + "previously learned by the convolutional base would get modified during training. Since the `Dense` layers on top are randomly initialized, \n", + "very large weight updates would be propagated through the network, effectively destroying the representations previously learned.\n", + "\n", + "In Keras, freezing a network is done by setting its `trainable` attribute to `False`:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0imD63DvGKN4", + "outputId": "b1dd51f2-8f12-4592-bbb8-d5c7e5d5fdb0" + }, + "source": [ + "print('This is the number of trainable weights '\n", + " 'before freezing the conv base:', len(model.trainable_weights))" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "This is the number of trainable weights before freezing the conv base: 30\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "FA2yKfY7GKN8" + }, + "source": [ + "conv_base.trainable = False" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "M_pV3_IbGKOC", + "outputId": "02601680-0776-4ada-e7c1-a8c1be62aeb8" + }, + "source": [ + "print('This is the number of trainable weights '\n", + " 'after freezing the conv base:', len(model.trainable_weights))" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "This is the number of trainable weights after freezing the conv base: 4\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IVlOi9ClGKOG" + }, + "source": [ + "With this setup, only the weights from the two `Dense` layers that we added will be trained. That's a total of four weight tensors: two per \n", + "layer (the main weight matrix and the bias vector). Note that in order for these changes to take effect, we must first compile the model. \n", + "If you ever modify weight trainability after compilation, you should then re-compile the model, or these changes would be ignored.\n", + "\n", + "Now we can start training our model, with the same data augmentation configuration that we used in our previous example:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uIkdZ9aFGKOH", + "outputId": "0d7733f1-5d89-4a34-d2c0-21cb882f3ea9" + }, + "source": [ + "from keras.preprocessing.image import ImageDataGenerator\n", + "\n", + "train_datagen = ImageDataGenerator(\n", + " rescale=1./255,\n", + " rotation_range=40,\n", + " width_shift_range=0.2,\n", + " height_shift_range=0.2,\n", + " shear_range=0.2,\n", + " zoom_range=0.2,\n", + " horizontal_flip=True,\n", + " fill_mode='nearest')\n", + "\n", + "# Note that the validation data should not be augmented!\n", + "test_datagen = ImageDataGenerator(rescale=1./255)\n", + "\n", + "train_generator = train_datagen.flow_from_directory(\n", + " # This is the target directory\n", + " train_dir,\n", + " # All images will be resized to 150x150\n", + " target_size=(150, 150),\n", + " batch_size=20,\n", + " # Since we use binary_crossentropy loss, we need binary labels\n", + " class_mode='binary')\n", + "\n", + "validation_generator = test_datagen.flow_from_directory(\n", + " validation_dir,\n", + " target_size=(150, 150),\n", + " batch_size=20,\n", + " class_mode='binary')\n", + "\n", + "model.compile(loss='binary_crossentropy',\n", + " optimizer=optimizers.RMSprop(lr=2e-5),\n", + " metrics=['acc'])\n", + "\n", + "history = model.fit_generator(\n", + " train_generator,\n", + " steps_per_epoch=100,\n", + " epochs=30,\n", + " validation_data=validation_generator,\n", + " validation_steps=50,\n", + " verbose=2)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Found 2000 images belonging to 2 classes.\n", + "Found 1000 images belonging to 2 classes.\n", + "Epoch 1/30\n", + "74s - loss: 0.4465 - acc: 0.7810 - val_loss: 0.2056 - val_acc: 0.9120\n", + "Epoch 2/30\n", + "72s - loss: 0.2738 - acc: 0.8905 - val_loss: 0.1239 - val_acc: 0.9550\n", + "Epoch 3/30\n", + "72s - loss: 0.2088 - acc: 0.9145 - val_loss: 0.1194 - val_acc: 0.9560\n", + "Epoch 4/30\n", + "72s - loss: 0.1835 - acc: 0.9280 - val_loss: 0.1025 - val_acc: 0.9550\n", + "Epoch 5/30\n", + "72s - loss: 0.1642 - acc: 0.9330 - val_loss: 0.0903 - val_acc: 0.9680\n", + "Epoch 6/30\n", + "72s - loss: 0.1360 - acc: 0.9410 - val_loss: 0.0794 - val_acc: 0.9740\n", + "Epoch 7/30\n", + "72s - loss: 0.1426 - acc: 0.9465 - val_loss: 0.0968 - val_acc: 0.9560\n", + "Epoch 8/30\n", + "72s - loss: 0.1013 - acc: 0.9580 - val_loss: 0.1411 - val_acc: 0.9430\n", + "Epoch 9/30\n", + "72s - loss: 0.1177 - acc: 0.9500 - val_loss: 0.2105 - val_acc: 0.9310\n", + "Epoch 10/30\n", + "72s - loss: 0.0949 - acc: 0.9620 - val_loss: 0.0900 - val_acc: 0.9710\n", + "Epoch 11/30\n", + "72s - loss: 0.0915 - acc: 0.9655 - val_loss: 0.1204 - val_acc: 0.9630\n", + "Epoch 12/30\n", + "72s - loss: 0.0782 - acc: 0.9645 - val_loss: 0.0995 - val_acc: 0.9650\n", + "Epoch 13/30\n", + "72s - loss: 0.0717 - acc: 0.9755 - val_loss: 0.1269 - val_acc: 0.9580\n", + "Epoch 14/30\n", + "72s - loss: 0.0670 - acc: 0.9715 - val_loss: 0.0994 - val_acc: 0.9680\n", + "Epoch 15/30\n", + "71s - loss: 0.0718 - acc: 0.9735 - val_loss: 0.0558 - val_acc: 0.9790\n", + "Epoch 16/30\n", + "72s - loss: 0.0612 - acc: 0.9780 - val_loss: 0.0870 - val_acc: 0.9690\n", + "Epoch 17/30\n", + "71s - loss: 0.0693 - acc: 0.9765 - val_loss: 0.0972 - val_acc: 0.9720\n", + "Epoch 18/30\n", + "71s - loss: 0.0596 - acc: 0.9785 - val_loss: 0.0832 - val_acc: 0.9730\n", + "Epoch 19/30\n", + "71s - loss: 0.0497 - acc: 0.9800 - val_loss: 0.1160 - val_acc: 0.9610\n", + "Epoch 20/30\n", + "71s - loss: 0.0546 - acc: 0.9780 - val_loss: 0.1057 - val_acc: 0.9660\n", + "Epoch 21/30\n", + "71s - loss: 0.0568 - acc: 0.9825 - val_loss: 0.2012 - val_acc: 0.9500\n", + "Epoch 22/30\n", + "71s - loss: 0.0493 - acc: 0.9830 - val_loss: 0.1384 - val_acc: 0.9610\n", + "Epoch 23/30\n", + "71s - loss: 0.0328 - acc: 0.9905 - val_loss: 0.1281 - val_acc: 0.9640\n", + "Epoch 24/30\n", + "71s - loss: 0.0524 - acc: 0.9860 - val_loss: 0.0846 - val_acc: 0.9760\n", + "Epoch 25/30\n", + "71s - loss: 0.0422 - acc: 0.9845 - val_loss: 0.1002 - val_acc: 0.9670\n", + "Epoch 26/30\n", + "71s - loss: 0.0617 - acc: 0.9825 - val_loss: 0.0858 - val_acc: 0.9760\n", + "Epoch 27/30\n", + "71s - loss: 0.0568 - acc: 0.9830 - val_loss: 0.0889 - val_acc: 0.9700\n", + "Epoch 28/30\n", + "71s - loss: 0.0296 - acc: 0.9915 - val_loss: 0.1406 - val_acc: 0.9620\n", + "Epoch 29/30\n", + "71s - loss: 0.0432 - acc: 0.9890 - val_loss: 0.1535 - val_acc: 0.9650\n", + "Epoch 30/30\n", + "71s - loss: 0.0354 - acc: 0.9885 - val_loss: 0.1832 - val_acc: 0.9510\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Vma7xi8YGKOL" + }, + "source": [ + "model.save('cats_and_dogs_small_3.h5')" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "UXEeP5hzGKOV" + }, + "source": [ + "Let's plot our results again:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "xT5V6_zZGKOW", + "outputId": "07151fc2-cddf-48e1-fba4-93badd401bcb" + }, + "source": [ + "acc = history.history['acc']\n", + "val_acc = history.history['val_acc']\n", + "loss = history.history['loss']\n", + "val_loss = history.history['val_loss']\n", + "\n", + "epochs = range(len(acc))\n", + "\n", + "plt.plot(epochs, acc, 'bo', label='Training acc')\n", + "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n", + "plt.title('Training and validation accuracy')\n", + "plt.legend()\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(epochs, loss, 'bo', label='Training loss')\n", + "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n", + "plt.title('Training and validation loss')\n", + "plt.legend()\n", + "\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEICAYAAACzliQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4FdX5wPHvCwIh7CQIArKoVERljaAVBFzRirjgAnGv\nxVpRsdr+VKhQFbu41KVWxYpLjSBqqdAKFAMWlaqEQkBABBUwbIZFZFMIeX9/nElyE+9N5ib35m7v\n53nuk3tnzsw9M3PzzplzzpwRVcUYY0xqqBPrDBhjjKk9FvSNMSaFWNA3xpgUYkHfGGNSiAV9Y4xJ\nIRb0jTEmhVjQT0EiUldE9ohIh0imjSUROUZEIt7/WETOFJF1AZ9Xi8gAP2mr8V1/FZF7qru8MX4c\nFusMmKqJyJ6Aj+nA98Ah7/ONqpoTzvpU9RDQONJpU4GqHhuJ9YjIDcCVqjooYN03RGLdxlTGgn4C\nUNXSoOuVJG9Q1XdCpReRw1S1qDbyZkxV7PcYX6x6JwmIyAMi8pqITBGR3cCVInKKiHwoIt+IyGYR\neUJE6nnpDxMRFZFO3udXvPmzRGS3iPxXRDqHm9abf66IfCYiu0TkSRH5QESuDZFvP3m8UUTWishO\nEXkiYNm6IvInEdkuIl8AQyrZP2NFZGqFaU+JyKPe+xtEZJW3PZ97pfBQ6yoQkUHe+3QR+ZuXtxVA\nnwppx4nIF956V4jIBd70E4E/AwO8qrNtAft2QsDyP/e2fbuI/ENEjvCzb8LZzyX5EZF3RGSHiGwR\nkV8HfM9vvH3yrYjkiUjbYFVpIvJ+yXH29ucC73t2AONEpIuIzPe+Y5u335oFLN/R28ZCb/7jIpLm\n5fm4gHRHiMg+EckItb2mCqpqrwR6AeuAMytMewA4AAzFncgbAicB/XBXc0cBnwGjvfSHAQp08j6/\nAmwDsoB6wGvAK9VIeziwGxjmzfslcBC4NsS2+MnjW0AzoBOwo2TbgdHACqA9kAEscD/noN9zFLAH\naBSw7q+BLO/zUC+NAKcD+4Hu3rwzgXUB6yoABnnvHwbeBVoAHYGVFdJeBhzhHZORXh5ae/NuAN6t\nkM9XgAne+7O9PPYE0oC/APP87Jsw93MzYCtwG9AAaAr09ebdDeQDXbxt6Am0BI6puK+B90uOs7dt\nRcBNQF3c7/FHwBlAfe938gHwcMD2fOLtz0Ze+lO9eZOAiQHfcwcwPdb/h4n8inkG7BXmAQsd9OdV\nsdydwOve+2CB/JmAtBcAn1Qj7fXAewHzBNhMiKDvM48nB8z/O3Cn934BrpqrZN55FQNRhXV/CIz0\n3p8LrK4k7T+Bm733lQX9DYHHAvhFYNog6/0E+In3vqqg/xLwYMC8prh2nPZV7Zsw9/NVwKIQ6T4v\nyW+F6X6C/hdV5GF4yfcCA4AtQN0g6U4FvgTE+7wUuDjS/1ep9LLqneTxVeAHEekqIv/yLte/Be4D\nMitZfkvA+31U3ngbKm3bwHyo+y8tCLUSn3n09V3A+kryC/AqMMJ7P9L7XJKP80XkI6/q4RtcKbuy\nfVXiiMryICLXiki+V0XxDdDV53rBbV/p+lT1W2An0C4gja9jVsV+PhIX3IOpbF5VKv4e24jINBHZ\n6OXhxQp5WKeu00A5qvoB7qqhv4icAHQA/lXNPBmsTj+ZVOyu+CyuZHmMqjYF7sWVvKNpM64kCoCI\nCOWDVEU1yeNmXLAoUVWX0mnAmSLSDlf99KqXx4bAG8DvcFUvzYF/+8zHllB5EJGjgKdxVRwZ3no/\nDVhvVd1LN+GqjErW1wRXjbTRR74qqmw/fwUcHWK5UPP2enlKD5jWpkKaitv3B1yvsxO9PFxbIQ8d\nRaRuiHy8DFyJuyqZpqrfh0hnfLCgn7yaALuAvV5D2I218J3/BHqLyFAROQxXT9wqSnmcBowRkXZe\no97/VZZYVbfgqiBexFXtrPFmNcDVMxcCh0TkfFzds9883CMizcXdxzA6YF5jXOArxJ3/foYr6ZfY\nCrQPbFCtYArwUxHpLiINcCel91Q15JVTJSrbzzOADiIyWkQaiEhTEenrzfsr8ICIHC1OTxFpiTvZ\nbcF1GKgrIqMIOEFVkoe9wC4RORJXxVTiv8B24EFxjeMNReTUgPl/w1UHjcSdAEwNWNBPXncA1+Aa\nVp/FNbhGlapuBS4HHsX9Ex8NLMGV8CKdx6eBXGA5sAhXWq/Kq7g6+tKqHVX9BrgdmI5rDB2OO3n5\nMR53xbEOmEVAQFLVZcCTwMdemmOBjwKWnQusAbaKSGA1Tcnys3HVMNO95TsA2T7zVVHI/ayqu4Cz\ngEtwJ6LPgIHe7IeAf+D287e4RtU0r9ruZ8A9uEb9YypsWzDjgb64k88M4M2APBQB5wPH4Ur9G3DH\noWT+Otxx/l5VF4a57aaCksYRYyLOu1zfBAxX1fdinR+TuETkZVzj8IRY5yXR2c1ZJqJEZAiup8x+\nXJe/g7jSrjHV4rWPDANOjHVekoFV75hI6w98gavLPge4yBreTHWJyO9w9wo8qKobYp2fZGDVO8YY\nk0KqLOmLyGQR+VpEPgkxX7zbrdeKyDIR6R0w7xoRWeO9rolkxo0xxoSvypK+iJyGu338ZVU9Icj8\n84BbcHdE9gMeV9V+XteuPNzt+gosBvqo6s7Kvi8zM1M7depUjU0xxpjUtXjx4m2qWlkXacBHQ66q\nLhBvsK0QhuFOCAp86PVZPgIYBMxV1R0AIjIXNyjWlMq+r1OnTuTl5VWVLWOMMQFEpKq70oHINOS2\no/wt1wXetFDTf0BERnkj+OUVFhZGIEvGGGOCiYveO6o6SVWzVDWrVasqr06MMcZUUySC/kbKjz/S\n3psWaroxxpgYiUTQnwFc7fXiORnYpaqbgTnA2SLSQkRa4EYunBOB7zPGGFNNVTbkisgUXKNspogU\n4MbQqAegqs8Ab+N67qzFDe96nTdvh4jcjxsXBeC+kkZdY4wxseGn986IKuYrcHOIeZOBydXLmjHG\nxJ+cHBg7FjZsgA4dYOJEyK7uUHgxEBcNucaY5JWTA506QZ067m9OTqxzVH05OTBqFKxfD6ru76hR\nibVNFvSNMVGTDEEy0NixsG9f+Wn79rnpicKCvjEmapIhSAbaEGLIt1DT/V7l1ObVkA2tbIyJmnCD\nZLzr0MFdrQSbXlHJVU7JSa/kKgfKtwH4TRcpVtI3xkRNsGAYanoi1P1PnAjp6eWnpae76RX5vcqp\n7ashC/rGmKjxGyQTpe4/OxsmTYKOHUHE/Z00KXiJ3O9VTm1fDVnQN8ZEjd8gGW5pN5ZXBdnZsG4d\nFBe7v6GqYPxe5YRzNRQJFvSNMWELJ+j6CZLhlHajdVUQ6ROJ36uccKqMIkJV4+rVp08fNcbExiuv\nqHbsqCri/r7ySvA06emqLuS6V3p68LR+dexYfn0lr44da5bWz/ZEa5vC/X4/6SoD5KmPGBvzIF/x\nZUHfmNjwG/jCCbqR/m5VFxiDfb9I9dcZjW2qbX6DvlXvGJOgIl0d4bdePRoNj+E0kPqtAw+nnSDZ\nupZWxoK+MXEknJt5Il2v7TfwRavh0W8Dqd868HACeW03psaSBX1jqinSJe1wAnk4pVi/+fQb+Gq9\n4bECv1cF4QTyWG9TrfJTB1SbL6vTN7G2fr3qpZeqzp8fOk24DX9+GurCqVeORr12uGlr2vAYbdE4\nRvEMa8g1qSDS/6hffqnaqZP7z6hfX/W114KnC7cHiZ/g4zeQh/P94TZQJnrgqyjZtqcyFvRN0ot0\nN7vPP1ft0EG1RQvVuXNVTz3VBYvHHvth2lgH6GicSExi8xv0rU7fJKxIjlmydi0MHAh798Kdd8IN\nN8AHH0BaGowZA7/+tWtgLBFOfbHfBsVw6pWjUa8da0VFcPXVcPrpsDFCT9PeuRMuvBD69oU5c9wp\nL+X5OTPU5stK+mWKi1WLimKdi/gVqVLs6tWqbduqZmaqPvjgD0vQhx3m/mZnq37/vVsmWn3AI10d\nEa2bjiKtuFj1uutc/ho0UG3TRvWDD2q2zk8+UT3mGNV69VSPPNKte/Bg1Y8/jkye4w1WvZO4iotV\nZ85UPfFE1R/9SHXPnljnKD5FIpiuXOkCzOGHqy5fHnqdzZu7v2eeqfrtt5WvM9h3+w28RUWqW7eq\nfvddDXeOj22PF8XFqr/8pdsv48e7YH300S5YT5pUvXVOn67auLFq69aq77/v9ufjj7sTO6gOH+5O\n9snEgn6CWrhQdcCAsuAFqr/6VaxzFZ/8BtNQ6X7/exfs27RxwV+18quHF15QrVtXtVcv1c2bw8vr\nyy+rHnGEW1dGhuoVV7hAl53tTiTdu7sAVaeOS9Ohg+q6dRHZTXHvgQfcNt96qzsBqKru2KF6zjlu\n+s9/XnaFVZVDh1Tvvdct17evakFB+fm7drn5jRq5Y3njjaqbNkV2e2LFgn6CWblS9cIL3RFp3Vr1\nL39RPXBA9ac/dT/O/PxY5zC0b79V3bgxNt9dk66Qdeq4QPzpp1WnLbl6ePttd8Lo3LnqkuKXX7qS\n6qWXukBfcZ0l6zn5ZNVhw1RHjVIdN0714YfdlUWXLq7Un8z+/Ge3L66+2gXsQEVFqv/3f25+//6q\nW7ZUvq5du1QvuMClv/Za1f37Q6fdskV19GhXdZeernrPParffFPz7YklC/oJ4quvXGCvU0e1SRPV\n++9X3b27bP62be6S9OSTf/hPES+uvtpdij/8cHzmMVTpHVQ/+6x8Wj9XDx9/rNqqlTsuH35YNn3H\nDtU333Ql06OPLlu+bVvVa65xpf0PPlBdu7b8MQ7mgw9UGzZU7dlTdefOiO2KuPLKK27/XHCB6sGD\nodNNmeL2Rbt2oevjV69W7drVFZCeeKLsiqEqa9eqjhjh8tGypeojj7jCViKyoB/ntm931TZpaa4/\n+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\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nFrcfLVkSnfIUFrrG51Tp/liSpWXi5F//ct0lwdVMYtHtq6BA9YEH3A+8R4+KG3VjkXMv74AR6vgc\n7cbcqliyxJXvz3+O/bqCvVa+853i77ply+LapteU1YYNbkiF730v9YKNF8ePq551lvv9VrR9a9e6\nK2xB9Sc/KW4/Wb68uI//2LGRp0TffrvyilKyimZwrwVsB9qXaFDtXM681S64q7oa6N/+5nLQoHrV\nVdHLEx48WBw4Ro92F4dUJtoB1muqJxYHlqooLHQXQZ15ZuwaV/PzXY7/ggu0qL/5lCmuLeLwYdU7\n73TfT6tWqi+/XPGyjh9X7dnTXc0brfRUMgoOZfHiiye/l5/vrmpNS3Pdbv/1r5PnOXZMddIk17ul\nZcvIuidfe61LNXr5f0o20e4KeQXwUaDXzKTAtCnAVYHn5wO5wJfAAWBjZcv0U3APystzvRUaNXI/\nwFtvjaznwvvvuy5+tWq59EWianReUz2xSAlV1euvu3XPmBHd5R475mp7557rln/WWe4MIVQf6Xfe\ncWPtgOrVV5ffTfP++908yXQtRSycOKH6zW+676RkCjMnp/iq8BEjii/IKs9777kzgOD3unt3eOX4\n5BP3/3n33WFvQlKwi5gSaO9eN85KWpr7y8wMv6vV7NlujJvTT0/8xTnBslRWI49VY25VFBa6gHHa\nadG5WvPzz914LS1bum3KyHADeuXnV/y548dVf/c71wPmlFNUZ84sHdjee88dvEeNiryMqSAry31/\n8+e717Nnu++lUSNXs/dagTlxwrVR1KnjauBPP33yZ7/6yp1BL1yo+uij7n/y2992Z3Qiqtu3R3XT\n4saCexLYsUP1Rz9yudRatVwvm61bK/7M11+7XC24K/uSpdfE7Nkux15RqieZau6qrv0DXL/xSOzY\n4dIu4IZhWLo0/LOobdvcUMXghg7YsMHt627d3AEoEd1qEyE/3+XUO3ZUHTnSfR99+1Y90G7e7K6Q\nBneF8623usdgWrLk77BxY3dQHjkytRutLbgnkdxc1/pft27xRT+heojs2uUu9gheZRhpv+94S5ac\ne0kDB7oBrKqaW83PdwfZhg1VV62KrCyFhe6CrebN3cH+oovUcw8SP5k/3213rVqqv/mN93sFlKeg\nwKXGGjd2322fPqpjxqj++tfut/fOOy7V45eGagvuSWjPHncnofr1Xa1i5EjXfU7VXe3ZsqXrS/7c\n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\ngrsxxvjQ/wPcz2v1dLH/YgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MNMR36xpGKOa" + }, + "source": [ + "As you can see, we reach a validation accuracy of about 96%. This is much better than our small convnet trained from scratch." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9qejhqOUGKOb" + }, + "source": [ + "## Fine-tuning\n", + "\n", + "Another widely used technique for model reuse, complementary to feature extraction, is _fine-tuning_. \n", + "Fine-tuning consists in unfreezing a few of the top layers \n", + "of a frozen model base used for feature extraction, and jointly training both the newly added part of the model (in our case, the \n", + "fully-connected classifier) and these top layers. This is called \"fine-tuning\" because it slightly adjusts the more abstract \n", + "representations of the model being reused, in order to make them more relevant for the problem at hand.\n", + "\n", + "![fine-tuning VGG16](https://s3.amazonaws.com/book.keras.io/img/ch5/vgg16_fine_tuning.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dhCPgg5wGKOb" + }, + "source": [ + "We have stated before that it was necessary to freeze the convolution base of VGG16 in order to be able to train a randomly initialized \n", + "classifier on top. For the same reason, it is only possible to fine-tune the top layers of the convolutional base once the classifier on \n", + "top has already been trained. If the classified wasn't already trained, then the error signal propagating through the network during \n", + "training would be too large, and the representations previously learned by the layers being fine-tuned would be destroyed. Thus the steps \n", + "for fine-tuning a network are as follow:\n", + "\n", + "* 1) Add your custom network on top of an already trained base network.\n", + "* 2) Freeze the base network.\n", + "* 3) Train the part you added.\n", + "* 4) Unfreeze some layers in the base network.\n", + "* 5) Jointly train both these layers and the part you added.\n", + "\n", + "We have already completed the first 3 steps when doing feature extraction. Let's proceed with the 4th step: we will unfreeze our `conv_base`, \n", + "and then freeze individual layers inside of it.\n", + "\n", + "As a reminder, this is what our convolutional base looks like:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "9zOiTevPGKOc", + "outputId": "e503eca5-7f7d-4358-cc54-8ef5bcfc82b6" + }, + "source": [ + "conv_base.summary()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_1 (InputLayer) (None, 150, 150, 3) 0 \n", + "_________________________________________________________________\n", + "block1_conv1 (Conv2D) (None, 150, 150, 64) 1792 \n", + "_________________________________________________________________\n", + "block1_conv2 (Conv2D) (None, 150, 150, 64) 36928 \n", + "_________________________________________________________________\n", + "block1_pool (MaxPooling2D) (None, 75, 75, 64) 0 \n", + "_________________________________________________________________\n", + "block2_conv1 (Conv2D) (None, 75, 75, 128) 73856 \n", + "_________________________________________________________________\n", + "block2_conv2 (Conv2D) (None, 75, 75, 128) 147584 \n", + "_________________________________________________________________\n", + "block2_pool (MaxPooling2D) (None, 37, 37, 128) 0 \n", + "_________________________________________________________________\n", + "block3_conv1 (Conv2D) (None, 37, 37, 256) 295168 \n", + "_________________________________________________________________\n", + "block3_conv2 (Conv2D) (None, 37, 37, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_conv3 (Conv2D) (None, 37, 37, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_pool (MaxPooling2D) (None, 18, 18, 256) 0 \n", + "_________________________________________________________________\n", + "block4_conv1 (Conv2D) (None, 18, 18, 512) 1180160 \n", + "_________________________________________________________________\n", + "block4_conv2 (Conv2D) (None, 18, 18, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_conv3 (Conv2D) (None, 18, 18, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_pool (MaxPooling2D) (None, 9, 9, 512) 0 \n", + "_________________________________________________________________\n", + "block5_conv1 (Conv2D) (None, 9, 9, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv2 (Conv2D) (None, 9, 9, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv3 (Conv2D) (None, 9, 9, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_pool (MaxPooling2D) (None, 4, 4, 512) 0 \n", + "=================================================================\n", + "Total params: 14,714,688\n", + "Trainable params: 0\n", + "Non-trainable params: 14,714,688\n", + "_________________________________________________________________\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "X9v05WbjGKOg" + }, + "source": [ + "\n", + "We will fine-tune the last 3 convolutional layers, which means that all layers up until `block4_pool` should be frozen, and the layers \n", + "`block5_conv1`, `block5_conv2` and `block5_conv3` should be trainable.\n", + "\n", + "Why not fine-tune more layers? Why not fine-tune the entire convolutional base? We could. However, we need to consider that:\n", + "\n", + "* Earlier layers in the convolutional base encode more generic, reusable features, while layers higher up encode more specialized features. It is \n", + "more useful to fine-tune the more specialized features, as these are the ones that need to be repurposed on our new problem. There would \n", + "be fast-decreasing returns in fine-tuning lower layers.\n", + "* The more parameters we are training, the more we are at risk of overfitting. The convolutional base has 15M parameters, so it would be \n", + "risky to attempt to train it on our small dataset.\n", + "\n", + "Thus, in our situation, it is a good strategy to only fine-tune the top 2 to 3 layers in the convolutional base.\n", + "\n", + "Let's set this up, starting from where we left off in the previous example:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "SogZGQjBGKOh" + }, + "source": [ + "conv_base.trainable = True\n", + "\n", + "set_trainable = False\n", + "for layer in conv_base.layers:\n", + " if layer.name == 'block5_conv1':\n", + " set_trainable = True\n", + " if set_trainable:\n", + " layer.trainable = True\n", + " else:\n", + " layer.trainable = False" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "J6lVoCWNGKOk" + }, + "source": [ + "Now we can start fine-tuning our network. We will do this with the RMSprop optimizer, using a very low learning rate. The reason for using \n", + "a low learning rate is that we want to limit the magnitude of the modifications we make to the representations of the 3 layers that we are \n", + "fine-tuning. Updates that are too large may harm these representations.\n", + "\n", + "Now let's proceed with fine-tuning:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Jxir4zTZGKOl", + "outputId": "9cee37b7-9128-48cb-d0b4-e2645c60ba4a" + }, + "source": [ + "model.compile(loss='binary_crossentropy',\n", + " optimizer=optimizers.RMSprop(lr=1e-5),\n", + " metrics=['acc'])\n", + "\n", + "history = model.fit_generator(\n", + " train_generator,\n", + " steps_per_epoch=100,\n", + " epochs=100,\n", + " validation_data=validation_generator,\n", + " validation_steps=50)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "100/100 [==============================] - 32s - loss: 0.0215 - acc: 0.9935 - val_loss: 0.0980 - val_acc: 0.9720\n", + "Epoch 2/100\n", + "100/100 [==============================] - 32s - loss: 0.0131 - acc: 0.9960 - val_loss: 0.1247 - val_acc: 0.9700\n", + "Epoch 3/100\n", + "100/100 [==============================] - 32s - loss: 0.0140 - acc: 0.9940 - val_loss: 0.1044 - val_acc: 0.9790\n", + "Epoch 4/100\n", + "100/100 [==============================] - 33s - loss: 0.0102 - acc: 0.9965 - val_loss: 0.1259 - val_acc: 0.9770\n", + "Epoch 5/100\n", + "100/100 [==============================] - 33s - loss: 0.0137 - acc: 0.9945 - val_loss: 0.1036 - val_acc: 0.9800\n", + "Epoch 6/100\n", + "100/100 [==============================] - 33s - loss: 0.0183 - acc: 0.9935 - val_loss: 0.1260 - val_acc: 0.9750\n", + "Epoch 7/100\n", + "100/100 [==============================] - 33s - loss: 0.0141 - acc: 0.9945 - val_loss: 0.1575 - val_acc: 0.9690\n", + "Epoch 8/100\n", + "100/100 [==============================] - 33s - loss: 0.0094 - acc: 0.9965 - val_loss: 0.0935 - val_acc: 0.9780\n", + "Epoch 9/100\n", + "100/100 [==============================] - 33s - loss: 0.0079 - acc: 0.9985 - val_loss: 0.1452 - val_acc: 0.9760\n", + "Epoch 10/100\n", + "100/100 [==============================] - 33s - loss: 0.0127 - acc: 0.9970 - val_loss: 0.1027 - val_acc: 0.9790\n", + "Epoch 11/100\n", + "100/100 [==============================] - 33s - loss: 0.0097 - acc: 0.9965 - val_loss: 0.1463 - val_acc: 0.9720\n", + "Epoch 12/100\n", + "100/100 [==============================] - 33s - loss: 0.0055 - acc: 0.9980 - val_loss: 0.1361 - val_acc: 0.9720\n", + "Epoch 13/100\n", + "100/100 [==============================] - 33s - loss: 0.0274 - acc: 0.9955 - val_loss: 0.1446 - val_acc: 0.9740\n", + "Epoch 14/100\n", + "100/100 [==============================] - 33s - loss: 0.0043 - acc: 0.9985 - val_loss: 0.1123 - val_acc: 0.9790\n", + "Epoch 15/100\n", + "100/100 [==============================] - 33s - loss: 0.0057 - acc: 0.9975 - val_loss: 0.1912 - val_acc: 0.9700\n", + "Epoch 16/100\n", + "100/100 [==============================] - 33s - loss: 0.0144 - acc: 0.9960 - val_loss: 0.1415 - val_acc: 0.9780\n", + "Epoch 17/100\n", + "100/100 [==============================] - 33s - loss: 0.0048 - acc: 0.9990 - val_loss: 0.1231 - val_acc: 0.9780\n", + "Epoch 18/100\n", + "100/100 [==============================] - 33s - loss: 0.0188 - acc: 0.9965 - val_loss: 0.1551 - val_acc: 0.9720\n", + "Epoch 19/100\n", + "100/100 [==============================] - 33s - loss: 0.0160 - acc: 0.9970 - val_loss: 0.2155 - val_acc: 0.9740\n", + "Epoch 20/100\n", + "100/100 [==============================] - 33s - loss: 0.0047 - acc: 0.9965 - val_loss: 0.1559 - val_acc: 0.9730\n", + "Epoch 21/100\n", + "100/100 [==============================] - 33s - loss: 0.0132 - acc: 0.9980 - val_loss: 0.1518 - val_acc: 0.9740\n", + "Epoch 22/100\n", + "100/100 [==============================] - 33s - loss: 0.0086 - acc: 0.9965 - val_loss: 0.1517 - val_acc: 0.9790\n", + "Epoch 23/100\n", + "100/100 [==============================] - 33s - loss: 0.0070 - acc: 0.9980 - val_loss: 0.1887 - val_acc: 0.9670\n", + "Epoch 24/100\n", + "100/100 [==============================] - 33s - loss: 0.0044 - acc: 0.9985 - val_loss: 0.1818 - val_acc: 0.9740\n", + "Epoch 25/100\n", + "100/100 [==============================] - 33s - loss: 0.0159 - acc: 0.9970 - val_loss: 0.1860 - val_acc: 0.9680\n", + "Epoch 26/100\n", + "100/100 [==============================] - 33s - loss: 0.0056 - acc: 0.9980 - val_loss: 0.1657 - val_acc: 0.9740\n", + "Epoch 27/100\n", + "100/100 [==============================] - 33s - loss: 0.0118 - acc: 0.9980 - val_loss: 0.1542 - val_acc: 0.9760\n", + "Epoch 28/100\n", + "100/100 [==============================] - 33s - loss: 0.0031 - acc: 0.9990 - val_loss: 0.1493 - val_acc: 0.9770\n", + "Epoch 29/100\n", + "100/100 [==============================] - 33s - loss: 0.0114 - acc: 0.9965 - val_loss: 0.1921 - val_acc: 0.9680\n", + "Epoch 30/100\n", + "100/100 [==============================] - 33s - loss: 0.0031 - acc: 0.9990 - val_loss: 0.1188 - val_acc: 0.9830\n", + "Epoch 31/100\n", + "100/100 [==============================] - 33s - loss: 0.0068 - acc: 0.9985 - val_loss: 0.1814 - val_acc: 0.9740\n", + "Epoch 32/100\n", + "100/100 [==============================] - 33s - loss: 0.0096 - acc: 0.9985 - val_loss: 0.2034 - val_acc: 0.9760\n", + "Epoch 33/100\n", + "100/100 [==============================] - 33s - loss: 0.0072 - acc: 0.9985 - val_loss: 0.1970 - val_acc: 0.9730\n", + "Epoch 34/100\n", + "100/100 [==============================] - 33s - loss: 0.0047 - acc: 0.9990 - val_loss: 0.2349 - val_acc: 0.9680\n", + "Epoch 35/100\n", + "100/100 [==============================] - 33s - loss: 0.0066 - acc: 0.9990 - val_loss: 0.1865 - val_acc: 0.9740\n", + "Epoch 36/100\n", + "100/100 [==============================] - 33s - loss: 0.0115 - acc: 0.9975 - val_loss: 0.1933 - val_acc: 0.9750\n", + "Epoch 37/100\n", + "100/100 [==============================] - 33s - loss: 0.0101 - acc: 0.9980 - val_loss: 0.1779 - val_acc: 0.9780\n", + "Epoch 38/100\n", + "100/100 [==============================] - 33s - loss: 0.0101 - acc: 0.9975 - val_loss: 0.1887 - val_acc: 0.9700\n", + "Epoch 39/100\n", + "100/100 [==============================] - 33s - loss: 0.0093 - acc: 0.9980 - val_loss: 0.2159 - val_acc: 0.9720\n", + "Epoch 40/100\n", + "100/100 [==============================] - 33s - loss: 0.0049 - acc: 0.9990 - val_loss: 0.1412 - val_acc: 0.9790\n", + "Epoch 41/100\n", + "100/100 [==============================] - 33s - loss: 0.0052 - acc: 0.9985 - val_loss: 0.2066 - val_acc: 0.9690\n", + "Epoch 42/100\n", + "100/100 [==============================] - 33s - loss: 0.0043 - acc: 0.9990 - val_loss: 0.1860 - val_acc: 0.9770\n", + "Epoch 43/100\n", + "100/100 [==============================] - 33s - loss: 0.0031 - acc: 0.9985 - val_loss: 0.2361 - val_acc: 0.9680\n", + "Epoch 44/100\n", + "100/100 [==============================] - 33s - loss: 0.0012 - acc: 0.9995 - val_loss: 0.2440 - val_acc: 0.9680\n", + "Epoch 45/100\n", + "100/100 [==============================] - 33s - loss: 0.0035 - acc: 0.9985 - val_loss: 0.1428 - val_acc: 0.9820\n", + "Epoch 46/100\n", + "100/100 [==============================] - 33s - loss: 0.0111 - acc: 0.9970 - val_loss: 0.1822 - val_acc: 0.9720\n", + "Epoch 47/100\n", + "100/100 [==============================] - 33s - loss: 0.0047 - acc: 0.9990 - val_loss: 0.1726 - val_acc: 0.9720\n", + "Epoch 48/100\n", + "100/100 [==============================] - 33s - loss: 0.0039 - acc: 0.9995 - val_loss: 0.2164 - val_acc: 0.9730\n", + "Epoch 49/100\n", + "100/100 [==============================] - 33s - loss: 0.0060 - acc: 0.9970 - val_loss: 0.1856 - val_acc: 0.9810\n", + "Epoch 50/100\n", + "100/100 [==============================] - 33s - loss: 0.0126 - acc: 0.9980 - val_loss: 0.1824 - val_acc: 0.9720\n", + "Epoch 51/100\n", + "100/100 [==============================] - 33s - loss: 0.0155 - acc: 0.9965 - val_loss: 0.1867 - val_acc: 0.9710\n", + "Epoch 52/100\n", + "100/100 [==============================] - 33s - loss: 0.0059 - acc: 0.9985 - val_loss: 0.2287 - val_acc: 0.9700\n", + "Epoch 53/100\n", + "100/100 [==============================] - 33s - loss: 0.0046 - acc: 0.9980 - val_loss: 0.2337 - val_acc: 0.9650\n", + "Epoch 54/100\n", + "100/100 [==============================] - 33s - loss: 0.0087 - acc: 0.9970 - val_loss: 0.1168 - val_acc: 0.9820\n", + "Epoch 55/100\n", + "100/100 [==============================] - 33s - loss: 0.0046 - acc: 0.9985 - val_loss: 0.1496 - val_acc: 0.9790\n", + "Epoch 56/100\n", + "100/100 [==============================] - 33s - loss: 0.0067 - acc: 0.9985 - val_loss: 0.1615 - val_acc: 0.9750\n", + "Epoch 57/100\n", + "100/100 [==============================] - 33s - loss: 0.0066 - acc: 0.9975 - val_loss: 0.2520 - val_acc: 0.9630\n", + "Epoch 58/100\n", + "100/100 [==============================] - 33s - loss: 0.0017 - acc: 0.9990 - val_loss: 0.1899 - val_acc: 0.9740\n", + "Epoch 59/100\n", + "100/100 [==============================] - 33s - loss: 0.0022 - acc: 0.9990 - val_loss: 0.2321 - val_acc: 0.9680\n", + "Epoch 60/100\n", + "100/100 [==============================] - 33s - loss: 0.0091 - acc: 0.9975 - val_loss: 0.1416 - val_acc: 0.9790\n", + "Epoch 61/100\n", + "100/100 [==============================] - 33s - loss: 0.0054 - acc: 0.9985 - val_loss: 0.1749 - val_acc: 0.9720\n", + "Epoch 62/100\n", + "100/100 [==============================] - 33s - loss: 0.0028 - acc: 0.9995 - val_loss: 0.2065 - val_acc: 0.9740\n", + "Epoch 63/100\n", + "100/100 [==============================] - 33s - loss: 0.0058 - acc: 0.9985 - val_loss: 0.1749 - val_acc: 0.9750\n", + "Epoch 64/100\n", + "100/100 [==============================] - 33s - loss: 0.0076 - acc: 0.9980 - val_loss: 0.1542 - val_acc: 0.9760\n", + "Epoch 65/100\n", + "100/100 [==============================] - 33s - loss: 0.0081 - acc: 0.9980 - val_loss: 0.2627 - val_acc: 0.9660\n", + "Epoch 66/100\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "100/100 [==============================] - 33s - loss: 0.0107 - acc: 0.9980 - val_loss: 0.1748 - val_acc: 0.9740\n", + "Epoch 67/100\n", + "100/100 [==============================] - 33s - loss: 5.1450e-04 - acc: 1.0000 - val_loss: 0.1922 - val_acc: 0.9710\n", + "Epoch 68/100\n", + "100/100 [==============================] - 33s - loss: 0.0054 - acc: 0.9985 - val_loss: 0.2299 - val_acc: 0.9680\n", + "Epoch 69/100\n", + "100/100 [==============================] - 33s - loss: 0.0091 - acc: 0.9965 - val_loss: 0.1533 - val_acc: 0.9730\n", + "Epoch 70/100\n", + "100/100 [==============================] - 33s - loss: 0.0190 - acc: 0.9965 - val_loss: 0.2232 - val_acc: 0.9690\n", + "Epoch 71/100\n", + "100/100 [==============================] - 33s - loss: 0.0058 - acc: 0.9985 - val_loss: 0.1773 - val_acc: 0.9710\n", + "Epoch 72/100\n", + "100/100 [==============================] - 33s - loss: 0.0072 - acc: 0.9990 - val_loss: 0.1660 - val_acc: 0.9760\n", + "Epoch 73/100\n", + "100/100 [==============================] - 33s - loss: 0.0036 - acc: 0.9990 - val_loss: 0.2354 - val_acc: 0.9700\n", + "Epoch 74/100\n", + "100/100 [==============================] - 33s - loss: 0.0023 - acc: 0.9995 - val_loss: 0.1904 - val_acc: 0.9700\n", + "Epoch 75/100\n", + "100/100 [==============================] - 33s - loss: 0.0137 - acc: 0.9955 - val_loss: 0.1363 - val_acc: 0.9810\n", + "Epoch 76/100\n", + "100/100 [==============================] - 33s - loss: 0.0055 - acc: 0.9990 - val_loss: 0.2119 - val_acc: 0.9710\n", + "Epoch 77/100\n", + "100/100 [==============================] - 33s - loss: 9.2985e-04 - acc: 1.0000 - val_loss: 0.1777 - val_acc: 0.9760\n", + "Epoch 78/100\n", + "100/100 [==============================] - 33s - loss: 0.0032 - acc: 0.9990 - val_loss: 0.2568 - val_acc: 0.9710\n", + "Epoch 79/100\n", + "100/100 [==============================] - 33s - loss: 0.0112 - acc: 0.9970 - val_loss: 0.2066 - val_acc: 0.9720\n", + "Epoch 80/100\n", + "100/100 [==============================] - 33s - loss: 0.0055 - acc: 0.9975 - val_loss: 0.1793 - val_acc: 0.9700\n", + "Epoch 81/100\n", + "100/100 [==============================] - 33s - loss: 0.0045 - acc: 0.9980 - val_loss: 0.2082 - val_acc: 0.9690\n", + "Epoch 82/100\n", + "100/100 [==============================] - 33s - loss: 0.0095 - acc: 0.9985 - val_loss: 0.1985 - val_acc: 0.9700\n", + "Epoch 83/100\n", + "100/100 [==============================] - 33s - loss: 0.0032 - acc: 0.9985 - val_loss: 0.1992 - val_acc: 0.9710\n", + "Epoch 84/100\n", + "100/100 [==============================] - 33s - loss: 0.0019 - acc: 0.9995 - val_loss: 0.2285 - val_acc: 0.9690\n", + "Epoch 85/100\n", + "100/100 [==============================] - 33s - loss: 0.0066 - acc: 0.9970 - val_loss: 0.1833 - val_acc: 0.9760\n", + "Epoch 86/100\n", + "100/100 [==============================] - 33s - loss: 0.0066 - acc: 0.9990 - val_loss: 0.2054 - val_acc: 0.9690\n", + "Epoch 87/100\n", + "100/100 [==============================] - 33s - loss: 0.0072 - acc: 0.9980 - val_loss: 0.2084 - val_acc: 0.9730\n", + "Epoch 88/100\n", + "100/100 [==============================] - 33s - loss: 0.0043 - acc: 0.9980 - val_loss: 0.1840 - val_acc: 0.9690\n", + "Epoch 89/100\n", + "100/100 [==============================] - 33s - loss: 0.0101 - acc: 0.9980 - val_loss: 0.1953 - val_acc: 0.9700\n", + "Epoch 90/100\n", + "100/100 [==============================] - 33s - loss: 0.0092 - acc: 0.9990 - val_loss: 0.1996 - val_acc: 0.9740\n", + "Epoch 91/100\n", + "100/100 [==============================] - 33s - loss: 0.0081 - acc: 0.9965 - val_loss: 0.2136 - val_acc: 0.9750\n", + "Epoch 92/100\n", + "100/100 [==============================] - 33s - loss: 0.0055 - acc: 0.9985 - val_loss: 0.1775 - val_acc: 0.9790\n", + "Epoch 93/100\n", + "100/100 [==============================] - 33s - loss: 3.4598e-04 - acc: 1.0000 - val_loss: 0.2102 - val_acc: 0.9760\n", + "Epoch 94/100\n", + "100/100 [==============================] - 33s - loss: 0.0109 - acc: 0.9985 - val_loss: 0.2081 - val_acc: 0.9760\n", + "Epoch 95/100\n", + "100/100 [==============================] - 33s - loss: 0.0028 - acc: 0.9985 - val_loss: 0.2033 - val_acc: 0.9720\n", + "Epoch 96/100\n", + "100/100 [==============================] - 33s - loss: 0.0074 - acc: 0.9990 - val_loss: 0.2118 - val_acc: 0.9750\n", + "Epoch 97/100\n", + "100/100 [==============================] - 33s - loss: 0.0034 - acc: 0.9990 - val_loss: 0.2621 - val_acc: 0.9740\n", + "Epoch 98/100\n", + "100/100 [==============================] - 33s - loss: 0.0054 - acc: 0.9975 - val_loss: 0.2589 - val_acc: 0.9650\n", + "Epoch 99/100\n", + "100/100 [==============================] - 33s - loss: 0.0060 - acc: 0.9990 - val_loss: 0.2242 - val_acc: 0.9700\n", + "Epoch 100/100\n", + "100/100 [==============================] - 33s - loss: 0.0010 - acc: 0.9995 - val_loss: 0.2403 - val_acc: 0.9750\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "tqno4NhzGKOo" + }, + "source": [ + "model.save('cats_and_dogs_small_4.h5')" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y2ojxkmWGKOs" + }, + "source": [ + "Let's plot our results using the same plotting code as before:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "KZFQmJqwGKOs", + "outputId": "561c3cd4-1533-4bd0-b673-6085364a466c" + }, + "source": [ + "acc = history.history['acc']\n", + "val_acc = history.history['val_acc']\n", + "loss = history.history['loss']\n", + "val_loss = history.history['val_loss']\n", + "\n", + "epochs = range(len(acc))\n", + "\n", + "plt.plot(epochs, acc, 'bo', label='Training acc')\n", + "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n", + "plt.title('Training and validation accuracy')\n", + "plt.legend()\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(epochs, loss, 'bo', label='Training loss')\n", + "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n", + "plt.title('Training and validation loss')\n", + "plt.legend()\n", + "\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\nfDjDh2ccGI8++ihTp06ltraW6upq3n777Trrw/z73//m4x//+IERVydMmMALL7zABRdcwJAhQxg5\nciQQP8R2VVUVn/70p6murmbPnj0MGTIEgH/84x91XGTdu3fn6aef5sMf/vCBbXqUYHRCP9qpx9PE\naOouo8biwgsvZObMmbz++uvs2LGD4447DtDB4mpqanjttdd444036N27d9ahpuN4//33ueOOO5g5\ncybz58/nYx/7WF7HsbR3uhzHDZ/91a9+lWuuuYYFCxZw3333FXS+YuAFweNpYlghaKoWQmPRuXNn\nzjjjDK644oo6jcmbN2/mkEMOoW3btsyaNYvly5dnPc6HP/xh/vjHPwLw5ptvMn/+fECHzj744IPp\n1q0ba9euZYYzsmCXLl3Yauc1dTjttNP4y1/+wo4dO9i+fTtPPPEEp9nRCROwefNm+vXTfr4PPvjg\ngeVnn302995774H/Gzdu5MQTT+T555/n/fffB0ozRLYXBI+nidG5sw501phj2jRVJk6cyLx58+oI\nwmWXXcacOXM49thjeeihhxg6dGjWY1x99dVs27aNo446iptvvvmApTFixAhGjRrF0KFDufTSS+sM\nnT1p0iTGjx/PGWecUedYo0eP5vLLL2fs2LGccMIJXHnllYxKMW7597//fT75yU9y3HHH1WmfuOmm\nm9i4cSPHHHMMI0aMYNasWfTq1YupU6cyYcIERowYwac//enE50mKH/7a42lizJ0LL7wAgZu7SeCH\nv24+lHz4a4/H03CMGlXayXE8nji8y8jj8Xg8gBcEj8eTkObkXm6tFHqPvCB4PJ6cdOjQgfXr13tR\naMIYY1i/fj0dkk7PF4FvQ/B4PDnp378/VVVV+DlJmjYdOnSgf//+ee/vBcHj8eSkbdu2B3rIelou\n3mXk8Xg8HsALgsfj8XgCvCB4PB6PB2hmPZVFpAbIPlBJPBXAuiImp7nQGq+7NV4ztM7r9tecjEHG\nmJyT0jcrQSgEEZmTpOt2S6M1XndrvGZondftr7m4eJeRx+PxeAAvCB6Px+MJaE2CMLWxE9BItMbr\nbo3XDK3zuv01F5FW04bg8Xg8nuy0JgvB4/F4PFnwguDxeDweoJUIgoiMF5FFIrJERK5v7PSUAhEZ\nICKzRORtEXlLRL4eLO8hIn8XkcXBd/fGTmuxEZEyEZkrIn8N/g8RkVeC+/0nEWnX2GksNiJSLiKP\nicg7IrJQRE5q6fdaRK4Nnu03ReRhEenQEu+1iNwvIh+IyJvOssh7K8ovguufLyKjCzl3ixcEESkD\n7gXOAYYBE0VkWOOmqiTUAv9ljBkGnAh8JbjO64GZxphKYGbwv6XxdWCh8//HwM+NMUcAG4EvNkqq\nSsvdwN+MMUOBEej1t9h7LSL9gK8BY4wxxwBlwP9v535CraqiOI5/NmiSBqkNJH2BBuJUHYRQSJgD\ns8gGDYQgB0HjRkE0ah7RzIlSJlGQiT4a9gcaZWVERUZpRT55/oHQoolGq8HeDy5PLpS964F91xc2\n9+x9Nuy1+F3O75x1Nme/PrV+A3sWjY3T9lFsbu05HPw/C3dvCHgAZyPip4i4jnewb+CYlpyImI+I\nL9vxH+oFYoOa65E27QieHCbCyVBKmcFjONT6BbtwrE3pMee7sROHISKuR8RVnWutfp35zlLKMqzE\nvA61johP8Nui4XHa7sObUfkUq0sp997q2tNgCBtwfqQ/18a6pZSyEdtwCusiYr6duoh1A4U1KV7D\nC/i79e/B1Yj4q/V71HsTruD1Vio7VEpZpWOtI+ICXsGvqhFcw2n9a73AOG2X9Po2DYYwVZRS7sJ7\neD4ifh89F3WPcTf7jEspj+NyRJweOpbbzDJsx8GI2IY/LSoPdaj1GvVueBPWY5WbyypTwSS1nQZD\nuID7Rvozbaw7SinLVTN4KyKOt+FLC4+Q7ffyUPFNgAfxRCnlF7UUuEutra9uZQX61HsOcxFxqvWP\nqQbRs9a78XNEXImIGziu6t+71guM03ZJr2/TYAifY3PbjXCH+iJqduCYlpxWOz+MMxHx6sipWRxo\nxwdw8nbHNiki4sWImImIjaquH0XE0/gYT7VpXeUMEXER50spW9rQI/hOx1qrpaIdpZSV7b++kHPX\nWo8wTttZPNN2G+3AtZHS0n8nIrpv2IsfcA4vDR3PhHJ8SH2M/BpftbZXral/iB/xAdYOHeuE8n8Y\n77fj+/EZzuJdrBg6vgnkuxVfNL1PYE3vWuNlfI9vcRQretQab6vvSW6oT4PPjtMWRd1FeQ7fqLuw\nbnnt/HRFkiRJgukoGSVJkiT/gjSEJEmSBGkISZIkSSMNIUmSJEEaQpIkSdJIQ0iSJEmQhpAkSZI0\n/gGf4tf8rNh9SgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LSRyvnXoGKOx" + }, + "source": [ + "\n", + "These curves look very noisy. To make them more readable, we can smooth them by replacing every loss and accuracy with exponential moving \n", + "averages of these quantities. Here's a trivial utility function to do this:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "4yDsQfqZGKOy", + "outputId": "5056755d-148d-47a1-a276-4f95d53e60b8" + }, + "source": [ + "def smooth_curve(points, factor=0.8):\n", + " smoothed_points = []\n", + " for point in points:\n", + " if smoothed_points:\n", + " previous = smoothed_points[-1]\n", + " smoothed_points.append(previous * factor + point * (1 - factor))\n", + " else:\n", + " smoothed_points.append(point)\n", + " return smoothed_points\n", + "\n", + "plt.plot(epochs,\n", + " smooth_curve(acc), 'bo', label='Smoothed training acc')\n", + "plt.plot(epochs,\n", + " smooth_curve(val_acc), 'b', label='Smoothed validation acc')\n", + "plt.title('Training and validation accuracy')\n", + "plt.legend()\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(epochs,\n", + " smooth_curve(loss), 'bo', label='Smoothed training loss')\n", + "plt.plot(epochs,\n", + " smooth_curve(val_loss), 'b', label='Smoothed validation loss')\n", + "plt.title('Training and validation loss')\n", + "plt.legend()\n", + "\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\nGTKEG2+sdE9tIOEBIeh02vWRBQRj0kw6Tn8NbuqLxYsXl70eMGAABQUF/Pe//6VPnz4cffTRHH/8\n8SxbtqzStqG1lpUrV9KnTx9ycnIq3EcQbdrqG2+8ka+//rpsyuvQ6bR37tzJxRdfTE5ODkcffTSz\nZs0qe79o02yHGjduHMcccwzdu3dnzJgx+CPvV6xYwcknn0yPHj3o2bNn2bQed999Nzk5OfTo0SPp\nABdTkClR68rDpr829UHo9MNXXaXav39qH1ddFfv903X66/vuu09vu+02VVVdv369Hn744aqqumnT\nJt2zZ4+qqr7zzjt67rnnqqpWKFfo1Nm/+MUvdMqUKaqq+tBDD+k+++yjqtGnrQ6dPlu14nTa9957\nr1588cWqqrp06VLt0KGD7tixI+Y026H8KbBVVUeNGqUzZsxQVdXevXvrSy+9pKqqO3bs0G3btukb\nb7yhffr00W3btlXaNlRVpr+2GoIxacaf/nrSpEm0adOG4cOHM3ny5LL1odNfH3vssbRo0YI2bdok\nPf11JP4U082aNSubYvrjjz8um/46Ly+PKVOmsHr16grTX4sIo0aNipjn+eefX9ZU88ILL5S142/a\ntIlhw4bRvXt3rr766gq1iEg++OADRowYAVD2IzVQPm11bm4uJ598ctm01bG8//77ZeXt2rUr2dnZ\nZdNuRzoG4WbNmsWxxx5LTk4OM2fOZPHixWzZsoV169ZxzjnnANCsWTMyMzN59913ufjii8n0ZkP0\np89OJZv+2phq9MADtfO+6Tj9dfv27WnVqhWLFi1i+vTpZU1ct956KwMHDuTll19m1apVDBgwIG5e\nkX6MPtXTVsebZnvnzp1cccUVFBQU0KFDB+64445anybbagjGpJl0nf4a3NQR99xzD5s2bSI3Nxdw\nNYT27dsDVKgJRdO3b9+yqaunhfxWabRpq2PtX79+/cryWL58OWvWrOGII46IWwag7OTfunVrtm7d\nWlb7adGiBVlZWbzyyisA7Nq1i+3bt3PKKafw1FNPsX37dqB8+uxUsoBgTJpJ1+mvAYYOHcrzzz/P\n+eefX7bs+uuv56abbuLoo48OVMOZOHEiDz/8MDk5OaxbVz7pQrRpq1u1akXfvn3p3r071113XYW8\nrrjiCkpLS8nJySlrmgutGcTSsmVLLr30Urp3785pp53GMcccU7bu6aef5sEHHyQ3N5fjjz+e7777\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\nvLHAdNdccw1paWmFXn9u27Zto0WLFsVeT6RY0A+DzEzo3RsWLIBHH4VffnFv2k6b5trFj4+PdA5N\nSZoyxR3zM85wn1OmFG99ixcvZvbs2axYsYLVq1czb948GjZsWPCCRZQ76IdLfkE/MzMz4HK//e1v\nmTlzZoHr//DDD6lpHU1b0A+1rCwYPBhmzYIXX3TFO/PmuS4PFy+2q/xYM2WK+3vYvt0909m+3Y0X\nJ/Dv3buXOnXqUNF70aNOnTr89re/BSA+Pp6HHnqI5ORkUlJSWLFiBVdddRXnnXcer7zyCuAeBt5/\n//20aNGCxMREpk+fnu/0Bx98kAULFpCcnMyzXrsge/bsoWvXrjRp0oQHHnggO28ff/wxbdu2pXXr\n1vTq1YvDXlsjc+bMoWnTprRu3Zq33377tH06ceIEI0aMYPr06SQnJzN9+nQee+wx+vfvT7t27ejf\nvz/btm2jffv2tG7dmtatW7PIa4bW/8p7woQJXH/99XnmLT4+nn379rFt2zYuuugiBg0aRPPmzenS\npQtHjx4FYOnSpdl3T77fIj/Hjh3jtttuIzExkVatWvH5558DsGbNGtq0aUNycjJJSUls2rSJI0eO\n0K1bN1q2bEmLFi2yf98Sp6qlarj44ou1rNq3T7VbN1VQffTRnPOWL1dNTlZduDAiWTMhtHbt2qDT\nNm7s/h5yD40bF337hw4d0pYtW2qTJk30zjvv1Pnz5/ttr7G+/PLLqqr6l7/8RRMTE/XgwYP6888/\n61lnnaWqqjNnztQrrrhCMzMz9ccff9SGDRvqnj17Ak7//PPPtVu3btnb+O9//6sJCQmalpamR48e\n1UaNGumOHTs0NTVV27dvr4cPH1ZV1bFjx+rIkSP16NGj2qBBA924caNmZWVpr169cqzPf71DhgzJ\nHn/00Ue1devW+uuvv6qq6pEjR/To0aOqqrpx40b1xYoffvhBmzdvnm/efL9Namqq/vDDDxoXF6ff\nfvutqqr26tVLJ02apKqqzZs310WLFqmq6vDhw7PX689/e08//bTedtttqqq6bt06bdiwoR49elSH\nDh2qkydPVlXV48eP66+//qozZ87U22+/PXs9aWlp+R/ofOT1Nwgs0yBirF3ph8jXX7smkD/+2F3h\nP/pozvmtW8O331oH57Fmx47CTQ9GtWrVWL58OePGjaNu3brcfPPNTJgwIXt+jx49AEhMTOSSSy6h\n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\ny6VyEc4AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Jccp5r_YGKO3" + }, + "source": [ + "\n", + "These curves look much cleaner and more stable. We are seeing a nice 1% absolute improvement.\n", + "\n", + "Note that the loss curve does not show any real improvement (in fact, it is deteriorating). You may wonder, how could accuracy improve if the \n", + "loss isn't decreasing? The answer is simple: what we display is an average of pointwise loss values, but what actually matters for accuracy \n", + "is the distribution of the loss values, not their average, since accuracy is the result of a binary thresholding of the class probability \n", + "predicted by the model. The model may still be improving even if this isn't reflected in the average loss.\n", + "\n", + "We can now finally evaluate this model on the test data:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Rke62Ob9GKO4", + "outputId": "c52832a1-ef47-4e62-8075-43fbed1f6b82" + }, + "source": [ + "test_generator = test_datagen.flow_from_directory(\n", + " test_dir,\n", + " target_size=(150, 150),\n", + " batch_size=20,\n", + " class_mode='binary')\n", + "\n", + "test_loss, test_acc = model.evaluate_generator(test_generator, steps=50)\n", + "print('test acc:', test_acc)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Found 1000 images belonging to 2 classes.\n", + "test acc: 0.967999992371\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JRO93dJEGKO8" + }, + "source": [ + "\n", + "Here we get a test accuracy of 97%. In the original Kaggle competition around this dataset, this would have been one of the top results. \n", + "However, using modern deep learning techniques, we managed to reach this result using only a very small fraction of the training data \n", + "available (about 10%). There is a huge difference between being able to train on 20,000 samples compared to 2,000 samples!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nQtBlYd8GKO8" + }, + "source": [ + "## Take-aways: using convnets with small datasets\n", + "\n", + "Here's what you should take away from the exercises of these past two sections:\n", + "\n", + "* Convnets are the best type of machine learning models for computer vision tasks. It is possible to train one from scratch even on a very \n", + "small dataset, with decent results.\n", + "* On a small dataset, overfitting will be the main issue. Data augmentation is a powerful way to fight overfitting when working with image \n", + "data.\n", + "* It is easy to reuse an existing convnet on a new dataset, via feature extraction. This is a very valuable technique for working with \n", + "small image datasets.\n", + "* As a complement to feature extraction, one may use fine-tuning, which adapts to a new problem some of the representations previously \n", + "learned by an existing model. This pushes performance a bit further.\n", + "\n", + "Now you have a solid set of tools for dealing with image classification problems, in particular with small datasets." + ] + } + ] +} \ No newline at end of file