{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Loading Data\n", "**[Fashion-MNIST](https://github.com/zalandoresearch/fashion-mnist)** is a dataset of Zalando's article images—consisting of a training set of 60,000 examples and a test set of 10,000 examples. Each example is a 28x28 grayscale image, associated with a label from 10 classes. The dataset serves as a direct drop-in replacement for the original [MNIST dataset](http://yann.lecun.com/exdb/mnist/) for benchmarking machine learning algorithms. It shares the same image size and structure of training and testing splits.\n", "\n", "After downloading the dataset, I checked to make sure they are in the appropriate folder." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "fashion-mnist_test.csv\n", "fashion-mnist_train.csv\n", "t10k-images-idx3-ubyte\n", "t10k-labels-idx1-ubyte\n", "train-images-idx3-ubyte\n", "train-labels-idx1-ubyte\n", "\n" ] } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "# Input data files are available in the \"data/\" directory.\n", "# For example, running this will list the files in the input directory\n", "from subprocess import check_output\n", "print(check_output([\"ls\", \"data\"]).decode(\"utf8\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Approach\n", "In this work, I will train a very simple Convolutional Neural Network classifier with 1 convolution layer using the Keras deep learning library. The model is first trained for 10 epochs with batch size of 256, compiled with `categorical_crossentropy` loss function and `Adam` optimizer. Then, I added **data augmentation**, which generates new training samples by rotating, shifting and zooming on the training samples, and trained for another 50 epochs.\n", "\n", "I will first split the original training data (60,000 images) into 80% training (48,000 images) and 20% validation (12000 images) optimize the classifier, while keeping the test data (10,000 images) to finally evaluate the accuracy of the model on the data it has never seen. This helps to see whether I'm over-fitting on the training data and whether I should lower the learning rate and train for more epochs if validation accuracy is higher than training accuracy or stop over-training if training accuracy shift higher than the validation." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", " from ._conv import register_converters as _register_converters\n", "Using TensorFlow backend.\n" ] } ], "source": [ "# Import libraries\n", "from keras.utils import to_categorical\n", "from sklearn.model_selection import train_test_split\n", "\n", "# Load training and test data into dataframes\n", "data_train = pd.read_csv('data/fashion-mnist_train.csv')\n", "data_test = pd.read_csv('data/fashion-mnist_test.csv')\n", "\n", "# X forms the training images, and y forms the training labels\n", "X = np.array(data_train.iloc[:, 1:])\n", "y = to_categorical(np.array(data_train.iloc[:, 0]))\n", "\n", "# Here I split original training data to sub-training (80%) and validation data (20%)\n", "X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=13)\n", "\n", "# X_test forms the test images, and y_test forms the test labels\n", "X_test = np.array(data_test.iloc[:, 1:])\n", "y_test = to_categorical(np.array(data_test.iloc[:, 0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Processing Data\n", "After loading and splitting the data, I preprocess them by reshaping them into the shape the network expects and scaling them so that all values are in the [0, 1] interval. Previously, for instance, the training data were stored in an array of shape (60000, 28, 28) of type uint8 with values in the [0, 255] interval. I transform it into a float32 array of shape (60000, 28 * 28) with values between 0 and 1." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Each image's dimension is 28 x 28\n", "img_rows, img_cols = 28, 28\n", "input_shape = (img_rows, img_cols, 1)\n", "\n", "# Prepare the training images\n", "X_train = X_train.reshape(X_train.shape[0], img_rows, img_cols, 1)\n", "X_train = X_train.astype('float32')\n", "X_train /= 255\n", "\n", "# Prepare the test images\n", "X_test = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1)\n", "X_test = X_test.astype('float32')\n", "X_test /= 255\n", "\n", "# Prepare the validation images\n", "X_val = X_val.reshape(X_val.shape[0], img_rows, img_cols, 1)\n", "X_val = X_val.astype('float32')\n", "X_val /= 255" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CNN with 1 Convolutional Layer\n", "This CNN takes as input tensors of shape *(image_height, image_width, image_channels)*. In this case, I configure the CNN to process inputs of size *(28, 28, 1)*, which is the format of the FashionMNIST images. I do this by passing the argument *input_shape=(28, 28, 1)* to the first layer.\n", "\n", "* The 1st layer is a *Conv2D* layer for the **convolution** operation that extracts features from the input images by sliding a convolution filter over the input to produce a feature map. Here I choose feature map with size 3 x 3. \n", "* The 2nd layer is a *MaxPooling2D* layer for the **max-pooling** operation that reduces the dimensionality of each feature, which helps shorten training time and reduce number of parameters. Here I choose the pooling window with size 2 x 2.\n", "* To combat overfititng, I add a *Dropout* layer as the 3rd layer, a powerful regularization technique. **Dropout** is the method used to reduce overfitting. It forces the model to learn multiple independent representations of the same data by randomly disabling neurons in the learning phase. In this model, dropout will randomnly disable 20% of the neurons.\n", "* The next step is to feed the last output tensor into a stack of *Dense* layers, otherwise known as **fully-connected** layers. These densely connected classifiers process vectors, which are 1D, whereas the current output is a 3D tensor. Thus, I need to **flatten** the 3D outputs to 1D, and then add 2 *Dense* layers on top.\n", "* I do a 10-way classification (as there are 10 classes of fashion images), using a final layer with 10 outputs and a softmax activation. **Softmax** activation enables me to calculate the output based on the probabilities. Each class is assigned a probability and the class with the maximum probability is the model’s output for the input." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import Keras libraries\n", "import keras\n", "from keras.models import Sequential\n", "from keras.layers import Dense, Dropout, Flatten\n", "from keras.layers import Conv2D, MaxPooling2D\n", "\n", "cnn1 = Sequential()\n", "cnn1.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))\n", "cnn1.add(MaxPooling2D(pool_size=(2, 2)))\n", "cnn1.add(Dropout(0.2))\n", "\n", "cnn1.add(Flatten())\n", "\n", "cnn1.add(Dense(128, activation='relu'))\n", "cnn1.add(Dense(10, activation='softmax'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When compiling the model, I choose **categorical_crossentropy** as the loss function (which is relevent for multiclass, single-label classification problem) and **Adam** optimizer.\n", "* The cross-entropy loss calculates the error rate between the predicted value and the original value. The formula for calculating cross-entropy loss is given [here](https://en.wikipedia.org/wiki/Cross_entropy). Categorical is used because there are 10 classes to predict from. If there were 2 classes, I would have used binary_crossentropy.\n", "* The Adam optimizer is an improvement over SGD(Stochastic Gradient Descent). The optimizer is responsible for updating the weights of the neurons via backpropagation. It calculates the derivative of the loss function with respect to each weight and subtracts it from the weight. That is how a neural network learns." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "cnn1.compile(loss=keras.losses.categorical_crossentropy,\n", " optimizer=keras.optimizers.Adam(),\n", " metrics=['accuracy'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's display the architecture of this simple CNN model:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "conv2d_1 (Conv2D) (None, 26, 26, 32) 320 \n", "_________________________________________________________________\n", "max_pooling2d_1 (MaxPooling2 (None, 13, 13, 32) 0 \n", "_________________________________________________________________\n", "dropout_1 (Dropout) (None, 13, 13, 32) 0 \n", "_________________________________________________________________\n", "flatten_1 (Flatten) (None, 5408) 0 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 128) 692352 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 10) 1290 \n", "=================================================================\n", "Total params: 693,962\n", "Trainable params: 693,962\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "cnn1.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* 693,962 parameters are available to be trained.\n", "* The output of the *Conv2D* and *MaxPooling2D* layers are 3D tensors of shape *(height, width, channels)*.\n", "* The number of channels is controlled by the 1st argument passed to the *Conv2D* layer (32).\n", "* The (13, 13, 32) outputs from *Dropout* layer are flattened into vectors of shape (5408,) before going through 2 *Dense* layers.\n", "\n", "## Training the Model\n", "As previously mentioned, I train the model with batch size of 256 and 10 epochs on both training and validation data." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 48000 samples, validate on 12000 samples\n", "Epoch 1/10\n", "48000/48000 [==============================] - 30s 621us/step - loss: 0.5460 - acc: 0.8085 - val_loss: 0.3817 - val_acc: 0.8690\n", "Epoch 2/10\n", "48000/48000 [==============================] - 31s 649us/step - loss: 0.3627 - acc: 0.8712 - val_loss: 0.3390 - val_acc: 0.8828\n", "Epoch 3/10\n", "48000/48000 [==============================] - 30s 635us/step - loss: 0.3191 - acc: 0.8868 - val_loss: 0.3118 - val_acc: 0.8906\n", "Epoch 4/10\n", "48000/48000 [==============================] - 31s 645us/step - loss: 0.2957 - acc: 0.8940 - val_loss: 0.3012 - val_acc: 0.8938\n", "Epoch 5/10\n", "48000/48000 [==============================] - 42s 865us/step - loss: 0.2718 - acc: 0.9034 - val_loss: 0.2881 - val_acc: 0.8968\n", "Epoch 6/10\n", "48000/48000 [==============================] - 38s 800us/step - loss: 0.2587 - acc: 0.9087 - val_loss: 0.2890 - val_acc: 0.8938\n", "Epoch 7/10\n", "48000/48000 [==============================] - 30s 623us/step - loss: 0.2461 - acc: 0.9108 - val_loss: 0.2727 - val_acc: 0.9018\n", "Epoch 8/10\n", "48000/48000 [==============================] - 32s 670us/step - loss: 0.2318 - acc: 0.9159 - val_loss: 0.2592 - val_acc: 0.9048\n", "Epoch 9/10\n", "48000/48000 [==============================] - 32s 671us/step - loss: 0.2200 - acc: 0.9210 - val_loss: 0.2691 - val_acc: 0.9046\n", "Epoch 10/10\n", "48000/48000 [==============================] - 33s 688us/step - loss: 0.2109 - acc: 0.9241 - val_loss: 0.2559 - val_acc: 0.9081\n" ] } ], "source": [ "history1 = cnn1.fit(X_train, y_train,\n", " batch_size=256,\n", " epochs=10,\n", " verbose=1,\n", " validation_data=(X_val, y_val))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test loss: 0.2484699842095375\n", "Test accuracy: 0.9104\n" ] } ], "source": [ "score1 = cnn1.evaluate(X_test, y_test, verbose=0)\n", "print('Test loss:', score1[0])\n", "print('Test accuracy:', score1[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "My accuracy is 91.04%, pretty powerful!\n", "\n", "## Data Augmentation\n", "Overfitting can be caused by having too few samples to learn from, making me unable to train a model that can generalize to new data. Given infinite data, my model would be exposed to every possible aspect of the data distribution at hand: I would never overfit. \n", "\n", "**Data augmentation** takes the approach of generating more training data from existing training samples, by augmenting the samples via a number of random transformations that yield believable-looking images. The goal is that at training time, my model will never see the exact same picture twice. This helps expose the model to more aspects of the data and generalize better.\n", "\n", "In Keras, this can be done by configuring a number of random transformations to be performed on the images read by the ImageDataGenerator instance.\n", "* *rotation_range* is a value in degrees (0–180), a range within which to randomly rotate pictures.\n", "* *width_shift* and *height_shift* are ranges (as a fraction of total width or height) within which to randomly translate pictures vertically or horizontally.\n", "* *shear_range* is for randomly applying shearing transformations.\n", "* *zoom_range* is for randomly zooming inside pictures." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from keras.preprocessing.image import ImageDataGenerator\n", "gen = ImageDataGenerator(rotation_range=8, width_shift_range=0.08, shear_range=0.3,\n", " height_shift_range=0.08, zoom_range=0.08)\n", "batches = gen.flow(X_train, y_train, batch_size=256)\n", "val_batches = gen.flow(X_val, y_val, batch_size=256)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's train the network using data augmentation." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/50\n", "187/187 [==============================] - 35s 188ms/step - loss: 0.3706 - acc: 0.8633 - val_loss: 0.3606 - val_acc: 0.8665\n", "Epoch 2/50\n", "187/187 [==============================] - 40s 214ms/step - loss: 0.3636 - acc: 0.8654 - val_loss: 0.3414 - val_acc: 0.8747\n", "Epoch 3/50\n", "187/187 [==============================] - 45s 243ms/step - loss: 0.3503 - acc: 0.8685 - val_loss: 0.3401 - val_acc: 0.8750\n", "Epoch 4/50\n", "187/187 [==============================] - 38s 205ms/step - loss: 0.3487 - acc: 0.8709 - val_loss: 0.3428 - val_acc: 0.8755\n", "Epoch 5/50\n", "187/187 [==============================] - 36s 195ms/step - loss: 0.3351 - acc: 0.8756 - val_loss: 0.3373 - val_acc: 0.8718\n", "Epoch 6/50\n", "187/187 [==============================] - 38s 202ms/step - loss: 0.3314 - acc: 0.8778 - val_loss: 0.3354 - val_acc: 0.8736\n", "Epoch 7/50\n", "187/187 [==============================] - 38s 201ms/step - loss: 0.3313 - acc: 0.8758 - val_loss: 0.3363 - val_acc: 0.8735\n", "Epoch 8/50\n", "187/187 [==============================] - 37s 198ms/step - loss: 0.3204 - acc: 0.8811 - val_loss: 0.3083 - val_acc: 0.8890\n", "Epoch 9/50\n", "187/187 [==============================] - 36s 193ms/step - loss: 0.3211 - acc: 0.8803 - val_loss: 0.3400 - val_acc: 0.8722\n", "Epoch 10/50\n", "187/187 [==============================] - 37s 200ms/step - loss: 0.3129 - acc: 0.8832 - val_loss: 0.3087 - val_acc: 0.8896\n", "Epoch 11/50\n", "187/187 [==============================] - 36s 194ms/step - loss: 0.3109 - acc: 0.8839 - val_loss: 0.3187 - val_acc: 0.8836\n", "Epoch 12/50\n", "187/187 [==============================] - 36s 192ms/step - loss: 0.3070 - acc: 0.8857 - val_loss: 0.3119 - val_acc: 0.8828\n", "Epoch 13/50\n", "187/187 [==============================] - 36s 192ms/step - loss: 0.3056 - acc: 0.8869 - val_loss: 0.3072 - val_acc: 0.8882\n", "Epoch 14/50\n", "187/187 [==============================] - 35s 185ms/step - loss: 0.3050 - acc: 0.8873 - val_loss: 0.2996 - val_acc: 0.8890\n", "Epoch 15/50\n", "187/187 [==============================] - 35s 190ms/step - loss: 0.2994 - acc: 0.8879 - val_loss: 0.2954 - val_acc: 0.8923\n", "Epoch 16/50\n", "187/187 [==============================] - 37s 198ms/step - loss: 0.2980 - acc: 0.8895 - val_loss: 0.2917 - val_acc: 0.8928\n", "Epoch 17/50\n", "187/187 [==============================] - 41s 217ms/step - loss: 0.2929 - acc: 0.8915 - val_loss: 0.2911 - val_acc: 0.8916\n", "Epoch 18/50\n", "187/187 [==============================] - 40s 215ms/step - loss: 0.2922 - acc: 0.8909 - val_loss: 0.3008 - val_acc: 0.8914\n", "Epoch 19/50\n", "187/187 [==============================] - 42s 227ms/step - loss: 0.2893 - acc: 0.8928 - val_loss: 0.3009 - val_acc: 0.8868\n", "Epoch 20/50\n", "187/187 [==============================] - 34s 181ms/step - loss: 0.2879 - acc: 0.8938 - val_loss: 0.3089 - val_acc: 0.8833\n", "Epoch 21/50\n", "187/187 [==============================] - 33s 178ms/step - loss: 0.2868 - acc: 0.8933 - val_loss: 0.2967 - val_acc: 0.8924\n", "Epoch 22/50\n", "187/187 [==============================] - 36s 192ms/step - loss: 0.2838 - acc: 0.8941 - val_loss: 0.2970 - val_acc: 0.8894\n", "Epoch 23/50\n", "187/187 [==============================] - 33s 178ms/step - loss: 0.2801 - acc: 0.8957 - val_loss: 0.2927 - val_acc: 0.8893\n", "Epoch 24/50\n", "187/187 [==============================] - 36s 195ms/step - loss: 0.2798 - acc: 0.8958 - val_loss: 0.2862 - val_acc: 0.8967\n", "Epoch 25/50\n", "187/187 [==============================] - 39s 209ms/step - loss: 0.2756 - acc: 0.8982 - val_loss: 0.2792 - val_acc: 0.8962\n", "Epoch 26/50\n", "187/187 [==============================] - 34s 179ms/step - loss: 0.2759 - acc: 0.8973 - val_loss: 0.2884 - val_acc: 0.8941\n", "Epoch 27/50\n", "187/187 [==============================] - 32s 173ms/step - loss: 0.2734 - acc: 0.8989 - val_loss: 0.2854 - val_acc: 0.8968\n", "Epoch 28/50\n", "187/187 [==============================] - 31s 167ms/step - loss: 0.2719 - acc: 0.8981 - val_loss: 0.2764 - val_acc: 0.8990\n", "Epoch 29/50\n", "187/187 [==============================] - 31s 166ms/step - loss: 0.2689 - acc: 0.8999 - val_loss: 0.2792 - val_acc: 0.8974\n", "Epoch 30/50\n", "187/187 [==============================] - 32s 169ms/step - loss: 0.2687 - acc: 0.9005 - val_loss: 0.2861 - val_acc: 0.8942\n", "Epoch 31/50\n", "187/187 [==============================] - 31s 166ms/step - loss: 0.2666 - acc: 0.9008 - val_loss: 0.2900 - val_acc: 0.8925\n", "Epoch 32/50\n", "187/187 [==============================] - 32s 169ms/step - loss: 0.2685 - acc: 0.9015 - val_loss: 0.2995 - val_acc: 0.8928\n", "Epoch 33/50\n", "187/187 [==============================] - 31s 166ms/step - loss: 0.2672 - acc: 0.8990 - val_loss: 0.2657 - val_acc: 0.8990\n", "Epoch 34/50\n", "187/187 [==============================] - 32s 170ms/step - loss: 0.2633 - acc: 0.9029 - val_loss: 0.2790 - val_acc: 0.8967\n", "Epoch 35/50\n", "187/187 [==============================] - 31s 167ms/step - loss: 0.2597 - acc: 0.9027 - val_loss: 0.2928 - val_acc: 0.8921\n", "Epoch 36/50\n", "187/187 [==============================] - 38s 204ms/step - loss: 0.2600 - acc: 0.9036 - val_loss: 0.2731 - val_acc: 0.8997\n", "Epoch 37/50\n", "187/187 [==============================] - 34s 182ms/step - loss: 0.2613 - acc: 0.9036 - val_loss: 0.2764 - val_acc: 0.8984\n", "Epoch 38/50\n", "187/187 [==============================] - 31s 167ms/step - loss: 0.2540 - acc: 0.9055 - val_loss: 0.2819 - val_acc: 0.8982\n", "Epoch 39/50\n", "187/187 [==============================] - 31s 164ms/step - loss: 0.2568 - acc: 0.9043 - val_loss: 0.2724 - val_acc: 0.9000\n", "Epoch 40/50\n", "187/187 [==============================] - 31s 167ms/step - loss: 0.2586 - acc: 0.9037 - val_loss: 0.2722 - val_acc: 0.9008\n", "Epoch 41/50\n", "187/187 [==============================] - 31s 164ms/step - loss: 0.2486 - acc: 0.9077 - val_loss: 0.2671 - val_acc: 0.9004\n", "Epoch 42/50\n", "187/187 [==============================] - 31s 167ms/step - loss: 0.2527 - acc: 0.9047 - val_loss: 0.2738 - val_acc: 0.9002\n", "Epoch 43/50\n", "187/187 [==============================] - 31s 163ms/step - loss: 0.2525 - acc: 0.9061 - val_loss: 0.2790 - val_acc: 0.8988\n", "Epoch 44/50\n", "187/187 [==============================] - 31s 168ms/step - loss: 0.2529 - acc: 0.9067 - val_loss: 0.2718 - val_acc: 0.9017\n", "Epoch 45/50\n", "187/187 [==============================] - 31s 166ms/step - loss: 0.2517 - acc: 0.9052 - val_loss: 0.2798 - val_acc: 0.8977\n", "Epoch 46/50\n", "187/187 [==============================] - 31s 164ms/step - loss: 0.2511 - acc: 0.9066 - val_loss: 0.2810 - val_acc: 0.8921\n", "Epoch 47/50\n", "187/187 [==============================] - 31s 166ms/step - loss: 0.2515 - acc: 0.9070 - val_loss: 0.2657 - val_acc: 0.9015\n", "Epoch 48/50\n", "187/187 [==============================] - 31s 164ms/step - loss: 0.2479 - acc: 0.9079 - val_loss: 0.2715 - val_acc: 0.9014\n", "Epoch 49/50\n", "187/187 [==============================] - 32s 170ms/step - loss: 0.2486 - acc: 0.9061 - val_loss: 0.2755 - val_acc: 0.8988\n", "Epoch 50/50\n", "187/187 [==============================] - 31s 166ms/step - loss: 0.2439 - acc: 0.9103 - val_loss: 0.2682 - val_acc: 0.9004\n" ] } ], "source": [ "history1 = cnn1.fit_generator(batches, steps_per_epoch=48000//256, epochs=50,\n", " validation_data=val_batches, validation_steps=12000//256, use_multiprocessing=True)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test loss: 0.22102486880123615\n", "Test accuracy: 0.9229\n" ] } ], "source": [ "score1 = cnn1.evaluate(X_test, y_test, verbose=0)\n", "print('Test loss:', score1[0])\n", "print('Test accuracy:', score1[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Okay, I improved the accuracy to 92.29%!\n", "\n", "## Results\n", "Let's plot training and validation accuracy as well as training and validation loss." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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h06dOvHee0Xum+eff55OnTqRnZ3NNddcw65duzjhhBPIz88HYMeOHcW2DSPdmDABatUq3larlmsvEzwNNdQLOA2Y7rc9Fhgbpn8dYG1AWx/gvUjXUlW6du2qgSxZsqREWyhatlR14r74q2XLqE8RlnvuuUcfeughVVVdvny5iojOnj27cP+2bdtUVfXw4cPaq1cvXbx4saqq9uzZU7/99ls9fPiwAvr++++rquqtt96qDz74oKqqjhs3Th999NHC/nfccYeqqr799tt61llnqarqgw8+qDfeeKOqqs6fP1+rVKmi3377bYlxeuMoKCjQK664ovB6OTk5+s4776iq6oEDB3Tfvn36zjvvaK9evXT//v3FjvXGrKq6YcMGPfHEE1VV9ZlnntEWLVro9u3bVVX10KFDumvXLlVV3bRpk7Zp06ZwfG3bti08n/c+fPhwfffdd1VV9fHHHy+cZzzE8tswjMrKSy85GSXi3l96KfZzAHM0ChkbjaY/GzhJRFqLSHXgClyNy0JEpLGIeOcaCzxXyntR3JS3fezEE08kNze3cPuVV14hJyeHnJwcli5dypIlS0ocU7NmTc4++2wAunbtWqhtBzJkyJASfT777DOuuOIKALKzs2nfvn3QY2fMmEG3bt3Izs7mf//7H4sXL2bHjh1s3bqV888/H3CLm2rVqsVHH33EtddeS82aNQE46qijIs570KBBNGzYEHCKw5133kmnTp0YNGgQa9asYevWrXz88cdcfvnlhefz3keNGlVo7nr++ee55pprIl7PMFKZYcMgLw8KCtx7aczRkYgo9NUVLR4DTAeWAtNUdbGI3CciF/i69QGWicgPwNFA4YOJiMwC/gX0F5G1InJWgudQjFB2sLKyj9WuXbvw8/Lly3nsscf4+OOPWbhwIYMHDw4aR169evXCzxkZGSFNGzVq1IjYJxj79+9nzJgxvPnmmyxcuJBrr702rnj2qlWrUlBQAFDieP95T548mV27djFv3jzmz59P48aNw16vd+/e/PDDD8ycOZNq1apxyimnxDw2wzDiIyqbvqq+r6onq+qJqjrB13a3qr7j+/yaqp7k6zNK/crjqeoZqtpEVWuqanNVnV42U3GUu33Mj927d1O3bl3q1avHhg0bmD498VPt2bMn06ZNA+C7774L+iRx4MABqlSpQuPGjdmzZw+vv/46AA0bNqRJkya8++67gBPk+/fvZ+DAgTz33HMcOHAAgO3btwMuzfXcuXMBeO2110KOadeuXTRt2pSqVavy4Ycfsm7dOgD69evHq6++Wng+7x1g+PDhDBs2zLR8wyhnkmJFbiwMGwZPPw0tW4KIe3/66bJ9XPLIyckhKyuLU045hauvvpqePXsm/Bo333wz69atIysri3vvvZesrCzq169frE+jRo0YMWIEWVlZnH322XTvXhRsNWXKFP7617/SqVMnevXqxZYtWzjvvPMYPHgwubm5dO7cmUcffRSA3/3udzz22GPk5OSwY8eOkGO66qqr+OKLL+jYsSNTp07lpJNOApz56Y477uDMM8+kc+fO/O53vys8ZtiwYezatYvLL788kV+PYRgRqHQ1cnNzczWwiMrSpUtp165dBY2ocpGfn09+fj6ZmZksX76cQYMGsXz58qQLm5w6dSrTp0+PKpQ1HPbbMCojiQ4bjwYRmauquZH6JZekMNi7dy/9+/cnPz8fVeWpp55KOoF/ww038NFHH/Gf//ynoodiJAkVIUTjxQsb91bZemHjUDnGbJq+kdTYbyP1CRSi4Px05WW2jZVWrYIvtmrZ0kXmlBXRavopZ9M3DCO1KO/cNNESKjNmeYeNx0py2QUMw0g7KqMQDWfCKe+0CrFimr5hGJWaRK+9iTV3fbD+4Z4+KjJsPBpM6BuGUalJpBCNNTdXqP7BNHlwTx8VGTYeDSb0o6Bv374lFlpNnDiRG264IexxderUAWD9+vVceumlQfv06dOHQMd1IBMnTmS/n1pxzjnnsHPnzmiGbhhJT7xCNFYNPRih+mdkBO/vPX2UZ1qFWDGhHwVDhw5l6tSpxdqmTp3K0KFDozr+uOOOC7uiNRKBQv/999+nQYMGcZ+vvFHVwnQOhhEPsQrReDT0WNqPHInv6aM8yyKGwoR+FFx66aX8+9//LiyYkpeXx/r16znjjDMK4+ZzcnLo2LEjb7/9donj8/Ly6NChA+BSJFxxxRW0a9eOiy++uDD1Abj4dS8t8z333APA3/72N9avX0/fvn3p27cv4NIjbN26FYBHHnmEDh060KFDh8K0zHl5ebRr147rr7+e9u3bM2jQoGLX8Xj33Xfp3r07Xbp0YcCAAWzatAlwawGuueYaOnbsSKdOnQrTOPznP/8hJyeH7Oxs+vfvD7j6Ag8//HDhOTt06EBeXh55eXm0bduWq6++mg4dOrBmzZqg8wOYPXs2p59+OtnZ2XTr1o09e/Zw5plnFksZ3atXLxYsWBDT381IX+LV0KNt9542Ynn6KO+yiCGJJhVneb4ipVa+5RbV3r0T+7rllpJpSgM599xz9a233lJVl974tttuU1WXQtlLK7xlyxY98cQTtaCgQFVVa9euraqqq1at0vbt26uq6l//+le95pprVFV1wYIFmpGRUZia2Us9nJ+fr71799YFCxaoqmrLli11y5YthWPxtufMmaMdOnTQvXv36p49ezQrK0vnzZunq1at0oyMjMK0yJdddpm++OKLJea0ffv2wrE+88wz+tvf/lZVVe+44w69xe9L2b59u27evFmbN2+uK1euLDZW/1TTqqrt27fXVatW6apVq1RE9MsvvyzcF2x+P//8s7Zu3Vq/+eYbVVXdtWuXHj58WCdNmlQ4hmXLlmmw34WqpVauzCQiXXC8iARPsQ6qtWqV3A41tpdeiq1/OMo67TsJTK1sUNzE42/aUVX+8Ic/0KlTJwYMGMC6desKNeZgfPrppwwfPhyATp060alTp8J906ZNIycnhy5durB48eKgydT8+eyzz7j44oupXbs2derUYciQIcyaNQuA1q1b07lzZyB0+ua1a9dy1lln0bFjRx566CEWL14MwEcffVSsilfDhg356quvOPPMM2ndujUQXfrlli1b0qNHj7DzW7ZsGcceeyynnnoqAPXq1aNq1apcdtllvPfeexw+fJjnnnuOkSNHRryeUXmoaK02Hg09mOklkU7ZyhJ6mnRx+j4LRrlz4YUXcuuttzJv3jz2799P165dAZfAbMuWLcydO5dq1arRqlWruNIYr1q1iocffpjZs2fTsGFDRo4cGdd5PLy0zOBSMwcz79x888389re/5YILLuCTTz5h/PjxMV/HP/0yFE/B7J9+Odb51apVi4EDB/L2228zbdq0wmyfRnIQzmFaHk7NCROCr+L10jcEjiFS6oREjLmyxO+bph8lderUoW/fvlx77bXFHLheWuFq1aoxc+ZMfgrlKfJx5pln8vLLLwOwaNEiFi5cCLi0zLVr16Z+/fps2rSJDz74oPCYunXrsmdPydryZ5xxBm+99Rb79+9n3759vPnmm5xxxhlRz2nXrl00a9YMgBdeeKGwfeDAgTz++OOF2zt27KBHjx58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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEICAYAAACzliQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJztnXl4VFXysN8i7IsiixtIgoIKCLJE0I9BRFERFYYZdMA44oobg7sy4LiguDAuuDAq+tNRiTKO+4I6LjiI48IigoAIaNAAsikogkBIfX9UN+kk3Z3upNOddOp9nvv0veeee0/d7qTuOXXqVImq4jiO49QMaqVaAMdxHCd5uNJ3HMepQbjSdxzHqUG40nccx6lBuNJ3HMepQbjSdxzHqUG40nfiQkQyRGSLiLRJZN1UIiLtRCThvssi0l9E8kKOl4pIn1jqlqOtx0RkbHmvj3LfW0Xkn4m+r5M6aqdaAKdyEZEtIYcNge3ArsDxhaqaG8/9VHUX0DjRdWsCqnpIIu4jIucDZ6rqMSH3Pj8R93bSH1f6aY6q7la6gZ7k+ar6bqT6IlJbVQuSIZvjOMnHzTs1nMDw/V8i8qyI/AKcKSJHicgnIrJJRNaIyP0iUidQv7aIqIhkBY6nBs6/KSK/iMjHItI23rqB8yeJyNcisllEHhCRj0Tk7AhyxyLjhSKyXER+EpH7Q67NEJF7RWSjiHwDDIjy/YwTkWklyiaLyD2B/fNFZEngeVYEeuGR7pUvIscE9huKyNMB2RYBPUrUvV5Evgncd5GIDAqUdwYeBPoETGcbQr7bm0Kuvyjw7BtF5GUR2S+W76YsRGRIQJ5NIvK+iBwScm6siKwWkZ9F5KuQZz1SROYFyteKyN9jbc+pBFTVtxqyAXlA/xJltwI7gFOxTkAD4AigFzYSPBD4GhgVqF8bUCArcDwV2ABkA3WAfwFTy1F3b+AXYHDg3JXATuDsCM8Si4yvAHsCWcCPwWcHRgGLgNZAc2Cm/SuEbedAYAvQKOTe64DswPGpgToCHAtsA7oEzvUH8kLulQ8cE9i/C/gA2AvIBBaXqHs6sF/gNzkjIMM+gXPnAx+UkHMqcFNg/4SAjF2B+sA/gPdj+W7CPP+twD8D+x0Cchwb+I3GAksD+52AlcC+gbptgQMD+7OB4YH9JkCvVP8v1OTNe/oOwCxVfU1VC1V1m6rOVtVPVbVAVb8BpgB9o1z/vKrOUdWdQC6mbOKtewowX1VfCZy7F3tBhCVGGW9X1c2qmocp2GBbpwP3qmq+qm4E7ojSzjfAl9jLCOB44CdVnRM4/5qqfqPG+8B7QNjJ2hKcDtyqqj+p6kqs9x7a7nOquibwmzyDvbCzY7gvQA7wmKrOV9XfgDFAXxFpHVIn0ncTjWHAq6r6fuA3ugN7cfQCCrAXTKeAifDbwHcH9vJuLyLNVfUXVf00xudwKgFX+g7A96EHInKoiLwhIj+IyM/AeKBFlOt/CNnfSvTJ20h19w+VQ1UV6xmHJUYZY2oL66FG4xlgeGD/jMBxUI5TRORTEflRRDZhvexo31WQ/aLJICJni8gXATPKJuDQGO8L9ny776eqPwM/Aa1C6sTzm0W6byH2G7VS1aXAVdjvsC5gLtw3UPUcoCOwVEQ+E5GBMT6HUwm40nfAhvuhPIL1btup6h7ADZj5ojJZg5lbABARobiSKklFZFwDHBByXJZL6XNAfxFphfX4nwnI2AB4HrgdM700Bf4Toxw/RJJBRA4EHgIuBpoH7vtVyH3Lci9djZmMgvdrgpmRVsUgVzz3rYX9ZqsAVHWqqvbGTDsZ2PeCqi5V1WGYCe9u4AURqV9BWZxy4krfCUcTYDPwq4h0AC5MQpuvA91F5FQRqQ1cBrSsJBmfAy4XkVYi0hy4LlplVf0BmAX8E1iqqssCp+oBdYH1wC4ROQU4Lg4ZxopIU7F1DKNCzjXGFPt67P13AdbTD7IWaB2cuA7Ds8B5ItJFROphyvdDVY04copD5kEickyg7WuweZhPRaSDiPQLtLctsBViD/BnEWkRGBlsDjxbYQVlccqJK30nHFcBI7B/6EewCddKRVXXAn8C7gE2AgcBn2PrChIt40OY7X0hNsn4fAzXPINNzO427ajqJuAK4CVsMnQo9vKKhRuxEUce8CbwVMh9FwAPAJ8F6hwChNrB3wGWAWtFJNRME7z+LczM8lLg+jaYnb9CqOoi7Dt/CHshDQAGBez79YCJ2DzMD9jIYlzg0oHAEjHvsLuAP6nqjorK45QPMdOp41QtRCQDMycMVdUPUy2P46QL3tN3qgwiMiBg7qgH/A3z+vgsxWI5TlrhSt+pSvwO+AYzHZwIDFHVSOYdx3HKgZt3HMdxahDe03ccx6lBVLmAay1atNCsrKxUi+E4jlOtmDt37gZVjebmDFRBpZ+VlcWcOXNSLYbjOE61QkTKWlkOuHnHcRynRuFK33EcpwbhSt9xHKcGUeVs+o7jJJedO3eSn5/Pb7/9lmpRnBioX78+rVu3pk6dSKGXouNK33FqOPn5+TRp0oSsrCwsuKlTVVFVNm7cSH5+Pm3bti37gjCkjXknNxeysqBWLfvMjSvdt+PUXH777TeaN2/uCr8aICI0b968QqOytOjp5+bCyJGwdasdr1xpxwA5FY4t6Djpjyv86kNFf6u06OmPG1ek8INs3WrljuM4ThFpofS/+y6+csdxqg4bN26ka9eudO3alX333ZdWrVrtPt6xI7aw++eccw5Lly6NWmfy5MnkJsju+7vf/Y758+cn5F7JJi3MO23amEknXLnjOIklN9dG0d99Z/9jEyZUzIzavHnz3Qr0pptuonHjxlx99dXF6qgqqkqtWuH7qU888USZ7Vx66aXlFzKNSIue/oQJ0LBh8bKGDa3ccZzEEZw/W7kSVIvmzyrDcWL58uV07NiRnJwcOnXqxJo1axg5ciTZ2dl06tSJ8ePH764b7HkXFBTQtGlTxowZw+GHH85RRx3FunXrALj++uuZNGnS7vpjxoyhZ8+eHHLIIfzvf/8D4Ndff+WPf/wjHTt2ZOjQoWRnZ5fZo586dSqdO3fmsMMOY+zYsQAUFBTw5z//eXf5/fffD8C9995Lx44d6dKlC2eeeWbCv7NYSIuefrCXkcjeh+M4pYk2f1YZ/29fffUVTz31FNnZ2QDccccdNGvWjIKCAvr168fQoUPp2LFjsWs2b95M3759ueOOO7jyyit5/PHHGTNmTKl7qyqfffYZr776KuPHj+ett97igQceYN999+WFF17giy++oHv37lHly8/P5/rrr2fOnDnsueee9O/fn9dff52WLVuyYcMGFi5cCMCmTZsAmDhxIitXrqRu3bq7y5JNWvT0wf7g8vKgsNA+XeE7TuJJ9vzZQQcdtFvhAzz77LN0796d7t27s2TJEhYvXlzqmgYNGnDSSScB0KNHD/Ly8sLe+w9/+EOpOrNmzWLYsGEAHH744XTq1CmqfJ9++inHHnssLVq0oE6dOpxxxhnMnDmTdu3asXTpUkaPHs3bb7/NnnvuCUCnTp0488wzyc3NLffiqoqSNkrfcZzKJ9I8WWXNnzVq1Gj3/rJly7jvvvt4//33WbBgAQMGDAjrr163bt3d+xkZGRQUFIS9d7169cqsU16aN2/OggUL6NOnD5MnT+bCCy8E4O233+aiiy5i9uzZ9OzZk127diW03Vhwpe84Tsykcv7s559/pkmTJuyxxx6sWbOGt99+O+Ft9O7dm+eeew6AhQsXhh1JhNKrVy9mzJjBxo0bKSgoYNq0afTt25f169ejqpx22mmMHz+eefPmsWvXLvLz8zn22GOZOHEiGzZsYGtJW1kSSAubvuM4ySGV82fdu3enY8eOHHrooWRmZtK7d++Et/GXv/yFs846i44dO+7egqaZcLRu3ZpbbrmFY445BlXl1FNP5eSTT2bevHmcd955qCoiwp133klBQQFnnHEGv/zyC4WFhVx99dU0adIk4c9QFlUuR252drYmMolKot3LHCfdWLJkCR06dEi1GFWCgoICCgoKqF+/PsuWLeOEE05g2bJl1K5dtfrH4X4zEZmrqtkRLtlN1XqSBOPhGRzHiYctW7Zw3HHHUVBQgKryyCOPVDmFX1HS62lKkGz3MsdxqjdNmzZl7ty5qRajUknriVwPz+A4jlOctFb6yXYvcxzHqeqktdL38AyO4zjFiUnpi8gAEVkqIstFpNR6ZhG5SEQWish8EZklIh1DznURkY9FZFGgTv1EPkA0cnJgyhTIzAQR+5wyxe35juPUXMpU+iKSAUwGTgI6AsNDlXqAZ1S1s6p2BSYC9wSurQ1MBS5S1U7AMcDOxIlfxOrV0Ls3vPxy8XIPz+A4VZt+/fqVWmg1adIkLr744qjXNW7cGIDVq1czdOjQsHWOOeYYynIBnzRpUrFFUgMHDkxIXJybbrqJu+66q8L3STSx9PR7AstV9RtV3QFMAwaHVlDVn0MOGwFB5/8TgAWq+kWg3kZVrZR1xy1awNy5MGtWZdzdcZzKYvjw4UybNq1Y2bRp0xg+fHhM1++///48//zz5W6/pNKfPn06TZs2Lff9qjqxKP1WwPchx/mBsmKIyKUisgLr6Y8OFB8MqIi8LSLzROTacA2IyEgRmSMic9avXx/fEwSoWxe6doXZs8t1ueM4KWLo0KG88cYbuxOm5OXlsXr1avr06bPbb7579+507tyZV155pdT1eXl5HHbYYQBs27aNYcOG0aFDB4YMGcK2bdt217v44ot3h2W+8cYbAbj//vtZvXo1/fr1o1+/fgBkZWWxYcMGAO655x4OO+wwDjvssN1hmfPy8ujQoQMXXHABnTp14oQTTijWTjjmz5/PkUceSZcuXRgyZAg//fTT7vaDoZaDgd7++9//7k4i061bN3755Zdyf7fhSJifvqpOBiaLyBnA9cCIwP1/BxwBbAXeC6wae6/EtVOAKWArcssrwxFHwBNPwK5dkJFR3rs4Ts3l8ssh0QmhunaFgL4MS7NmzejZsydvvvkmgwcPZtq0aZx++umICPXr1+ell15ijz32YMOGDRx55JEMGjQoYp7Yhx56iIYNG7JkyRIWLFhQLDTyhAkTaNasGbt27eK4445jwYIFjB49mnvuuYcZM2bQokWLYveaO3cuTzzxBJ9++imqSq9evejbty977bUXy5Yt49lnn+XRRx/l9NNP54UXXogaH/+ss87igQceoG/fvtxwww3cfPPNTJo0iTvuuINvv/2WevXq7TYp3XXXXUyePJnevXuzZcsW6tdP7DRoLD39VcABIcetA2WRmAb8PrCfD8xU1Q2quhWYDkQPUF0BjjgCfv0VvvqqslpwHKcyCDXxhJp2VJWxY8fSpUsX+vfvz6pVq1i7dm3E+8ycOXO38u3SpQtdunTZfe65556je/fudOvWjUWLFpUZTG3WrFkMGTKERo0a0bhxY/7whz/w4YcfAtC2bVu6du0KRA/fDBbff9OmTfTt2xeAESNGMHPmzN0y5uTkMHXq1N0rf3v37s2VV17J/fffz6ZNmxK+IjiWu80G2otIW0zZDwPOCK0gIu1VdVng8GQguP82cK2INAR2AH2BexMheDh69gwIPBvKCIPtOE4YovXIK5PBgwdzxRVXMG/ePLZu3UqPHj0AyM3NZf369cydO5c6deqQlZUVNpxyWXz77bfcddddzJ49m7322ouzzz67XPcJEgzLDBaauSzzTiTeeOMNZs6cyWuvvcaECRNYuHAhY8aM4eSTT2b69On07t2bt99+m0MPPbTcspakzJ6+qhYAozAFvgR4TlUXich4ERkUqDYq4JI5H7gSM+2gqj9hnjyzgfnAPFV9I2HSl+Dgg2GPPeCzzyqrBcdxKoPGjRvTr18/zj333GITuJs3b2bvvfemTp06zJgxg5XhkmGHcPTRR/PMM88A8OWXX7JgwQLAwjI3atSIPffck7Vr1/Lmm2/uvqZJkyZh7eZ9+vTh5ZdfZuvWrfz666+89NJL9OnTJ+5n23PPPdlrr712jxKefvpp+vbtS2FhId9//z39+vXjzjvvZPPmzWzZsoUVK1bQuXNnrrvuOo444gi+SrDpIqZxg6pOx0wzoWU3hOxfFuXaqZjbZqVTqxb06OGTuY5THRk+fDhDhgwp5smTk5PDqaeeSufOncnOzi6zx3vxxRdzzjnn0KFDBzp06LB7xHD44YfTrVs3Dj30UA444IBiYZlHjhzJgAED2H///ZkxY8bu8u7du3P22WfTM2BCOP/88+nWrVtUU04knnzySS666CK2bt3KgQceyBNPPMGuXbs488wz2bx5M6rK6NGjadq0KX/729+YMWMGtWrVolOnTruzgCWKtAutfN11cO+98MsvEDICcxwnAh5aufpRkdDKaReG4YgjYOdOCIzqHMdxnBDSTukHJ3Pdru84jlOatFP6BxwAe+/tdn3HiYeqZuZ1IlPR3yrtlL6ImXhc6TtObNSvX5+NGze64q8GqCobN26s0IKttMycdcQRMH26TeamIO+w41QrWrduTX5+PuUNgeIkl/r169O6detyX5+WSr9nT1CFefMgsAiuFJ4w3XGMOnXq0LZt21SL4SSJtDPvgPX0IfJkbjBh+sqV9nIIJkzPzU2ejI7jOKkgLZV+ixaQlRXZrh8tYXpurl1bq5Z9+ovAcZx0Ii3NOxB9MjdSYvRgjz/4Qggeg5t+HMdJD9Kypw9m18/Lg3BzU5ESo2dkRB4BOI7jpANpq/SDdv1wvf1ICdN3RcjpFWlk4DiOU91IW6Xfvbv57IdT+pESpmdmhr9XpJGB4zhOdSNtbfpNmkCHDpHt+jk54e30oTZ9sBHAhAmVI6PjOE6ySduePhRN5sa60DDSCMAncR3HSRfSWun37Anr1sH335ddN0hOjk0AFxbapyt8x3HSibRW+mUt0nIcx6lppLXS79IF6tTx4GuO4zhB0lrp16sHhx/uSt9xHCdIWit9MLv+nDlmo4+H7dsrRx7HcZxUkvZK/4gjLMTy0qWx1c/Ph5NOskQsixdXrmyO4zjJpkYofSjbxKMKTz0Fhx0GM2daSIZhw2DbtsqX0XEcJ1nEpPRFZICILBWR5SIyJsz5i0RkoYjMF5FZItKxxPk2IrJFRK5OlOCxcuih0Lgx3HEH3HdfePfNH36AwYNhxAjo3Bm++MKiay5cCFcnXWLHcZzKo0ylLyIZwGTgJKAjMLykUgeeUdXOqtoVmAjcU+L8PcCbCZA3bjIybIFVRgZcfrmFVOjVC+68E5Yvh2nToFMn+M9/4O674YMPoF07M/FceSX84x/w8supkNxxHCfxxNLT7wksV9VvVHUHMA0YHFpBVX8OOWwE7F4DKyK/B74FFlVc3PIxfLj12pcuhdtvt0ndMWOgfXs7164dzJ9vSj4jo+i622+HHj3g3HPjW+BVEb77zmSLFPzNcRynIsSi9FsBoSovP1BWDBG5VERWYD390YGyxsB1wM3RGhCRkSIyR0TmVGaezoMPNoU6e7attr33Xnj4YfjoIzMDlaRuXXj2Wdi501bmJkMR//vfNgpZsqTy23Icp+aRsIlcVZ2sqgdhSv76QPFNwL2quqWMa6eoaraqZrds2TJRIkUlM9PMPRdeCLWjhJ1r395MPB9+CLfeWvly5eUV/3Qcx0kksUTZXAUcEHLcOlAWiWnAQ4H9XsBQEZkINAUKReQ3VX2wPMKmij//Gd55B8aPh3794OijK6+tb78t/uk4jpNIYunpzwbai0hbEakLDANeDa0gIu1DDk8GlgGoah9VzVLVLGAScFt1U/hBJk+GAw80M8/8+ZXXTrCH70rfcZzKoEylr6oFwCjgbWAJ8JyqLhKR8SIyKFBtlIgsEpH5wJXAiEqTOEU0aQL/+hds2QLdusHvfw/z5iW2DVU37ziOU7nElERFVacD00uU3RCyf1kM97gpXuGqGkuWmPLftAleew1eeQVOPRVuuAGys61OYaGt5J01yyaIP/7YzEM33lj2/TduhF9/tX3v6TuOUxmkbeasRJObWzyrVmGhRfB8/317AZx4orl7/u9/9lIA2HdfKCiA11+PTekHe/etW3tP33GcyiHtwzAkinHjiqdRBHPlbNbM0il+8YX1zk87DZ58ElasgNWr4fTTYdmy2LJ3BXv3/frZiyP48nAcx0kU3tOPke++C1+enw9jx9oWjnbtYPNmM920aBG9jWDv/phj4Omn7SXQrVt5JXYcxymN9/RjpE2b+MqDtA/4NS1fXnYbeXmw117QtWvRseM4TiJxpR8jEyZAw4bFyxo2tPLcXMjKglq17DM3t6hOu3b2GavSz8qyDXwy13GcxOPmnRgJJkgfN85MPW3amMKH4hO8K1facZCg2WfUKBCJnmg9Lw8OOcR6+3vs4T19x3ESjyv9OMjJKa20s7JKT/Bu3QqXXWax+IPnNm8uehmEU/xBH/0TT7SXQ9u23tN3HCfxuHmngkSa4N24MfzLYNy48PXXr7fzQdNOVpYrfcdxEo8r/QpS1kRuSSK9JIKmnKDSb9vWymJx9XQcx4kVV/oVJNIEb/Pm4etHekkElX7btvaZlWWrczdsSISUjuM4hiv9CpKTY5m5MjPNFp+Zacf33Vf6ZVCvXtHkb0mCSj8z0z6Dyt9NPI7jJBKfyE0A4SZ4g4wbZx49YBm4ItXLy7PVvXvsYcdBpZ+XBz17JlJax3FqMt7Tr0Ryckxpb9tmo4B99olc99tvi+z54L76juNUDq70k0D9+mbLX7Yscp3gwqwgTZrYvID76juOk0hc6SeJdu0ir8oN+uiHKn1wt03HcRKPK/0k0a5d5J7+unXw229FdvwgvkDLcZxE40o/SbRvDz/+aFtJSvroB2nb1iaBCwsrWzrHcWoKrvSTRDDw2ooVpc8Fe/PhzDvbt8MPP1SmZI7j1CRc6SeJoNIPZ+Ip6aMfJNRt03EcJxG40k8SBx1kbpvhJnPz8sxTp0mT4uXutuk4TqJxpZ8k6te33LeRlH5J0w640nccJ/G40k8i7dubeadk0pUFC8yUU7L8xRctubqbdxzHSRQxKX0RGSAiS0VkuYiMCXP+IhFZKCLzRWSWiHQMlB8vInMD5+aKyLGJfoDqRLt2sGiRxdVfudL881euhDVr7GVQsnzkSGjc2Hv6juMkjjJj74hIBjAZOB7IB2aLyKuqujik2jOq+nCg/iDgHmAAsAE4VVVXi8hhwNtAqwQ/Q7WhXTv45Zfw5xYsKB1GeetWWL0adu2qfNkcx6kZxNLT7wksV9VvVHUHMA0YHFpBVX8OOWwEaKD8c1VdHShfBDQQkXoVF7t6EkySHo5IcfO3boXvv4eCgsqRyXGcmkUsSr8V8H3IcT5heusicqmIrAAmAqPD3OePwDxV3R7m2pEiMkdE5qxfvz42yashQbfNcNSK8Es0a2YKf9WqypHJcZyaRcImclV1sqoeBFwHXB96TkQ6AXcCF0a4doqqZqtqdsuWLRMlUpXjoIPss06d0ufOPTd8MpZgXt1ok7lTp8LSpQkR0XGcNCcWpb8KOCDkuHWgLBLTgN8HD0SkNfAScJaqhlmPWnNo0MDcNnv1Kkq60rixxdB/9NHwyVjOO8+ujTSZu2wZ/PnPMHy42/4dxymbWJT+bKC9iLQVkbrAMODV0AoiEmqtPhlYFihvCrwBjFHVjxIjcvWmXTuLpZOXZ59HHQWHHGLngvH3g+dzciwks0hkpf/YY/b5+efw+ONJeADHcao1ZSp9VS0ARmGeN0uA51R1kYiMD3jqAIwSkUUiMh+4EhgRLAfaATcE3Dnni8jeiX+M6kPQVz9IpIVZQerWtdFBOPPOjh3wxBPw+9/D0UfD2LGwaVOCBXYcJ62IKV2iqk4HppcouyFk/7II190K3FoRAdONdu1g/XrYvNnCLqxcaUo7GpHi6r/yit3rwgttEVePHnDzzXDvvZUiuuM4aYCvyE0yQbfN5csteuaOHdF7+mCrdcP19INzAMcfD127wgUXwIMPwpIliZbacZx0wZV+kgm6bS5fHjmOfkmysiA/314QQVasgHfftYnejAwru+UWaNQILr88st+/4zg1G1f6SSbothmq9EtmzCpJ27amxNu2LYrLc8UVtn/uuUX1WrY0885//gOvvVYZ0juOU91xpZ9kGjaEVq1sMjdopy8ZR78kwcicq1cXxeV57TUz6bQqsUzukkugY0e48kpLwOI4jhOKK/0UEEySnpcHe+9delFWSf75z/Dl339fuqxOHZg0ycw/PqHrOE5JXOmngFClX5Y9HyKHYFi/vnQ45txcm9gdPBhuvdVGB47jOEFc6aeA9u1h7VpYuDA2pR/J/NO8efhwzLm5cPfdsHMnjB7tk7qO4xThSj8FBD141q6NTelPmFA6IFv9+va5dWvx8q1bYdw4mzC+5RZ44QUYP77CIjuOkya40k8BoSGWy/LcAQvH0KdPkeJv0MDCL/z4Y/j6331nn9dcAyNGwE03wTPPVEhkx3HSBFf6KSDotgmx9fQB+ve3mDwA06YVxeUJR7BcxBZw9e0L55wDH3n0I8ep8bjSTwGNGsF++9l+rEo/OCLYf38YOND2J0wIH455woSi47p1zcSTmWnhHr75pkKip4Q1azyCqOMkClf6KSJo4inLRz9IUOmfdx7UDkRMyskJH445J6e4V0+PHjbBu2sXnHxy9QrKtmyZPceDD6ZaEsdJD1zpp4jDD4cDDzT7fCz07Al33GErcUMJF445N7e0V8+NN9rCrRUrYOhQ8+ypDkyYYOEnfE7CcRKDaBXz58vOztY5c+akWoxKZ8sWS5IeNPMkkqwsU/Qlycy0Sd1zzrHInA8/nPi2E8ny5XDoodCihXk65eXFPjJynJqGiMxV1eyy6nlPP0U0blw5Ch+KvHfCldepY5m6HnnE2s/NrRwZEsGECSbvCy/Y8YsvplYex0kHXOmnIZG8epo1M7PPzz/b8Q8/WDjm3NzwK3tTyYoV8PTTcNFF0Lu3xRl6/vnUyuQ46YAr/TQkklcPlF7MtW0bXHZZ5JW9qeK226yXf+21djx0KPzvf5FDUjiOExuu9NOQSF49kRZzbdwYeWVvKvj2W3jqKXvxBE1gQ4faZ9DU4zhO+fBxNRFgAAAf7UlEQVSJ3BpEpAneSIgULQhLJhdcYKadb76xdQlBOneGvfaCmTOTL5PjVHV8ItcpRTizj0hR5q2SRJobqEzy8iyU9AUXFFf4YL39WbNssZbjOOXDlX4NIpzZZ/RoW7RVt27xuiVX9iaL226zyeTrrit9buhQm3N46aXky+U46YKbd2o4qtCrl5lSGjWyxCxt2pjCz8lJriwrV1oE0pEjYfLk8HU6doR994X330+ubI5T1UmoeUdEBojIUhFZLiJjwpy/SEQWish8EZklIh1Dzv01cN1SETkxvsdwKhsR611v3GgpFkNX9iab2283ecaU+gsrYuhQ+O9/Yd265MnlOOlEmT19EckAvgaOB/KB2cBwVV0cUmcPVf05sD8IuERVBwSU/7NAT2B/4F3gYFWNGD7Le/qp4bjjLKnLihXQpEnltbNggaVx3LHDzErBrbAQpk+32EIPPRT9+sMPt8VlI0dWnpyOU91IZE+/J7BcVb9R1R3ANGBwaIWgwg/QCAi+SQYD01R1u6p+CywP3M+pYtx2m6VfnDSp9LlELtwaOxaefRY+/RQ+/xwWLSpKEt+rV9luop07W7A6X6jlOOUjFqXfCghNwZ0fKCuGiFwqIiuAicDoOK8dKSJzRGTO+vXrY5XdSSC9elno5bvuKu7WGS54W3kXbuXlWW/+mmssrs7SpbB4sY0wvvgCPvwQWreOfg8RM/G8/76ZpJwiVqywXAuOE42Eee+o6mRVPQi4Drg+zmunqGq2qma3bNkyUSI5cXLnnaZU+/e3EA1gPe9IC7fiHQFMmWL3r6hZZuhQMwm98krF7pNu/OUvNhezY0eqJXGqMrEo/VXAASHHrQNlkZgG/L6c1zop5OCDrSe+ejUcf7yt4I0UvC3Y4491BLBjB/zf/8Epp8ABB4SvEyvdull+gX//u2L3SSeWL4e33rK5EQ9V4UQjFqU/G2gvIm1FpC4wDHg1tIKIhGR95WRgWWD/VWCYiNQTkbZAe+CziovtVBb/7/9ZD/rrr+GkkyKbWzIy4gvd8NJL5nFz8cUVlzFo4nn3Xfjpp4rfLx146CF7+ULkF7XjANQuq4KqFojIKOBtIAN4XFUXich4YI6qvgqMEpH+wE7gJ2BE4NpFIvIcsBgoAC6N5rnjVA3694fnnoM//tF6/w0aWGC2IA0bllb4QSIpnIcest75CSckRsahQ+Hvf4dbbjEZN24s2n780SZ8b721KJl8OvPrr/D445Yhbe5cV/pOGahqldp69OihTtUgN1dVRLVrV9U2bWw/M1N16lT7tL5l8S0zs/R9Fi2yc3fckTjZCgtVDzqoeNuNGpmcHTva8ahRVi/dmTLFnvedd+zz1ltTLZGTCrBOeJk6tsyevlNzOeMMy/B14YVw+um2ajc0Ts/IkcV7/JFCNzz8sIV5OPfcxMkmYqGW166F5s1tq1fPzqmah9Ddd0PLlnDDDYlrt6qhavmDu3a1tRZ77x1fUD2n5uFK34nKyJGW1vHqq03RPvWUKfDgit1x48ycECl0w6+/2jVDh5oCTiR7721bSURg4kTYsMFyA7dsmZi5hKrIrFm2YO2xx+y527Rx844THVf6TplcdZV5hVx7rb0A/v1v69Xn5JQdrmHaNNi8OflKt1YtePRRs/FfeqmNBE4/PbkyJIMHH7Rw08OH23GbNrBkSWplcqo2NWCay0kE11xjfvZvvgkDBpgij0So//4ll5gHUO/eSRN1N3Xq2IR0795w5pnwzjvJl6EyWbXK8gafd15RyOzMTOvpV7E4ik4VwpW+EzMXXGAhFD7+GI491sI2lKTkCt4dO8zu/swzqcnD26ABvPYadOgAQ4bAZ2nkMDxlii1SCx1FtWljJrWKurJu3273dtIPV/pOXPzpT+bHv3gxHH005OcXPx9uBe/OnanNw9u0qS1c2mcfGDiwaLVxdWbHDgs6d/LJcOCBReXBxDcVseurQvfuFifJST9c6TtxM3Ag/Oc/tnL3d7+Dl1+2xVw7d0ZWNqnOw7vffvD660WT0tWdF16wEdSoUcXLg0q/Ih48X35pL/X33iv/PZyqiyt9p1z06QMzZpjiHjIEDjnE7MqRUi9GIpmeJh06WEau3Nzqn4TlwQct2ujxxxcvT0RPf/p0+1ywwMw8TnrhSt8pN927m+/+xx/Dk0+ad0+3buY6GErDhuY9E442bZJr6//rX80ccskl1Vehff65rVG49NLSK45btoT69Suu9GvVspHbwoUVk9WperjSdypE48Zw5JFw1lnmp//ZZ/D000U9zsxMm3C8777SSdkbNjRTUTJt/Q0aWCrGpUstjEN1o7DQwks0agQjRpQ+X1Ff/U2b4KOPYNgwO547t/yyOlUTV/pOwsnJKVLiwdSL4ZKyT5livcpotv7KGAUMGGCLxSZMsJFKdWHXLjj/fHPTHDvWJqjDURGl/8471s4ll0CzZuBJ7NKQWGI1JHPz2Ds1C5HwMXxELMZPw4bFyxs2tPKKkp+v2rix6oAB5YvPs2qV6g8/VFyOWNm5U/XMM+07uOmm6DKfe67q/vuXr52zz1Zt1ky1oED1hBMs7pJTPSDG2Dve03dSStAMFK48kQlcStKqlUXofOst84SJh127bCL7kEMsZHRls3OnLS6bOtVMOzfeWHreJJQ2bWDNmviTqQTzFJ94ok3IZ2ebJ89vv1VMfqdq4UrfSSkTJoS39U+YkLgELpEYNcoClV1+ublyxsqrr5pZaI894A9/sOsrK1vVjh1mX//XvyyeUCwurm3a2PdScg1FWcybZzkPBg604x49oKDAvHic9MGVvpNSItn6c3IijwLiTeASidq1LQLo6tXWe46V++4z2b76CkaPtuM+fWz+IpFs325zDy++aAnrr7kmtuvK67Y5fbr9BieeaMfZ2fbpdv00IxYbUDI3t+k7QSLZ9MPNAQTnAcrDhReqZmSofvFF2XU//9zamjixqOz551X32EO1aVPVV14pnwwlKSxUHTTI2po8Ob5rly2z6558Mr7revWyLVSGli1tjsCp+uA2fae6E2kUkJkZvn6kkUFZ3HYb7LmnmWnKClR2//1mfjr//KKyP/7RXBuzsmDw4PhGDZH497/NjHT33eZJEw/BFJfx9PTXrzd326BpB+w779HDe/ppRyxvhmRu3tN3yiKaV08wq1dolq9YePBBu8/LL0eus26dar16qhddFP78tm2qw4fbfZYujfepiti61TKAHX64edGUh332Ub3ggtjrP/20yT17dvHy66+3UdDWreWTw0keeE/f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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "accuracy = history1.history['acc']\n", "val_accuracy = history1.history['val_acc']\n", "loss = history1.history['loss']\n", "val_loss = history1.history['val_loss']\n", "epochs = range(len(accuracy))\n", "\n", "plt.plot(epochs, accuracy, 'bo', label='Training accuracy')\n", "plt.plot(epochs, val_accuracy, 'b', label='Validation accuracy')\n", "plt.title('Training and validation accuracy')\n", "plt.legend()\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", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These plots look great: The training curves are closely tracking the validation curves.\n", "\n", "## Classification Report\n", "I can summarize the performance of my classifier as follows:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# get the predictions for the test data\n", "predicted_classes = cnn1.predict_classes(X_test)\n", "\n", "# get the indices to be plotted\n", "y_true = data_test.iloc[:, 0]\n", "correct = np.nonzero(predicted_classes==y_true)[0]\n", "incorrect = np.nonzero(predicted_classes!=y_true)[0]" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " Class 0 0.88 0.88 0.88 1000\n", " Class 1 0.99 0.99 0.99 1000\n", " Class 2 0.93 0.83 0.87 1000\n", " Class 3 0.92 0.94 0.93 1000\n", " Class 4 0.86 0.90 0.88 1000\n", " Class 5 0.98 0.98 0.98 1000\n", " Class 6 0.77 0.79 0.78 1000\n", " Class 7 0.96 0.97 0.96 1000\n", " Class 8 0.98 0.99 0.99 1000\n", " Class 9 0.98 0.96 0.97 1000\n", "\n", "avg / total 0.92 0.92 0.92 10000\n", "\n" ] } ], "source": [ "from sklearn.metrics import classification_report\n", "target_names = [\"Class {}\".format(i) for i in range(10)]\n", "print(classification_report(y_true, predicted_classes, target_names=target_names))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's apparent that the classifier is underperforming for class 6 in terms of both precision and recall. For class 4, the classifier is slightly lacking precision; whereas for class 2, it is slightly lacking recall.\n", "\n", "Perhaps I would gain more insight after visualizing the correct and incorrect predictions.\n", "\n", "Here is a subset of correctly predicted classes." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i, correct in enumerate(correct[:9]):\n", " plt.subplot(3,3,i+1)\n", " plt.imshow(X_test[correct].reshape(28,28), cmap='gray', interpolation='none')\n", " plt.title(\"Predicted {}, Class {}\".format(predicted_classes[correct], y_true[correct]))\n", " plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here is a subset of incorrectly predicted classes." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i, incorrect in enumerate(incorrect[0:9]):\n", " plt.subplot(3,3,i+1)\n", " plt.imshow(X_test[incorrect].reshape(28,28), cmap='gray', interpolation='none')\n", " plt.title(\"Predicted {}, Class {}\".format(predicted_classes[incorrect], y_true[incorrect]))\n", " plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualizing What My Model Learns\n", "It’s often said that deep-learning models are “black boxes”: learning representations that are difficult to extract and present in a human-readable form. Although this is partially true for certain types of deep-learning models, it’s definitely not true for convnets. The representations learned by convnets are highly amenable to visualization, in large part because they’re representations of visual concepts.\n", "\n", "Here I attempt to visualize the intermediate CNN outputs (intermediate activations). Visualizing intermediate activations consists of displaying the feature maps that are output by various convolution and pooling layers in a network, given a certain input (the output of a layer is often called its *activation*, the output of the activation function). This gives a view into how an input is decomposed into the different filters learned by the network. \n", "\n", "I want to visualize feature maps with three dimensions: width, height, and depth (channels). Each channel encodes relatively independent features, so the proper way to visualize these feature maps is by independently plotting the contents of every channel as a 2D image.\n", "\n", "I first get an input test image (#100)." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "test_im1 = X_train[100]\n", "plt.imshow(test_im1.reshape(28,28), cmap='viridis', interpolation='none')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to extract the feature maps I want to look at, I create a Keras model that takes batches of images as input, and outputs the activations of all convolution and pooling layers. To do this, I use the Keras class Model. A model is instantiated using two arguments: an input tensor (or list of input tensors) and an output tensor (or list of output tensors). The resulting class is a Keras model, mapping the specified inputs to the specified outputs. When fed an image input, this model returns the values of the layer activations in the original model." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ipykernel_launcher.py:3: UserWarning: Update your `Model` call to the Keras 2 API: `Model(inputs=Tensor(\"co..., outputs=[" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from keras import models\n", "# extracts the outputs of the top 8 layers\n", "layer_outputs = [layer.output for layer in cnn1.layers[:8]]\n", "\n", "# creates a model that will return these outputs, given the model input\n", "activation_model = models.Model(input=cnn1.input, output=layer_outputs)\n", "\n", "# returns a list of Numpy arrays: one array per layer activation\n", "activations = activation_model.predict(test_im1.reshape(1,28,28,1))\n", "\n", "# activation of the 1st convolution layer\n", "first_layer_activation = activations[0]\n", "\n", "# display the 4th channel of the activation of the 1st layer of the original model\n", "plt.matshow(first_layer_activation[0, :, :, 4], cmap='viridis')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Great, let's do the same things for 2 other test images: no.500 and no.1000." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "test_im2 = X_train[500]\n", "plt.imshow(test_im2.reshape(28,28), cmap='viridis', interpolation='none')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "activations = activation_model.predict(test_im2.reshape(1,28,28,1))\n", "first_layer_activation = activations[0]\n", "plt.matshow(first_layer_activation[0, :, :, 4], cmap='viridis')" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "test_im3 = X_train[1000]\n", "plt.imshow(test_im3.reshape(28,28), cmap='viridis', interpolation='none')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQQAAAECCAYAAAAYUakXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAE25JREFUeJzt3XuMnNV5x/HfM7vrNV7fbTDGNviCuTgOMcmGJIRUtORCo0YkVRSBmtSp0jqVQpVEadWUqgpSWwlVubR/tEhOQQHl1kiBQqOkCXWRIE1CbBPHNjZgx9jYztrGGHvtxZed2ad/7HCyON7zvOzczfcjoZ2dc3zeZ1+vf7wz75lzzN0FAJJUanUBANoHgQAgIRAAJAQCgIRAAJAQCACSlgWCmd1sZs+Y2U4z+3yr6ijCzHab2RYz22RmG1pdz1hmdq+ZHTKzrWOem21mj5jZjurXWa2s8RXj1Hqnme2vnttNZvb+VtZYrWmRmT1qZtvM7Ckz+3T1+bY7r5laJ3RerRXzEMysS9Kzkt4jaZ+k9ZJuc/dtTS+mADPbLanf3Q+3upazmdnvSDoh6X53X1l97p8kHXH3u6phO8vd/7qVdVbrOletd0o64e5fbGVtY5nZfEnz3f1JM5smaaOkD0r6uNrsvGZq/YgmcF5bdYVwnaSd7r7L3c9I+rakW1pUS0dz98ckHTnr6Vsk3Vd9fJ9Gf0Fabpxa2467D7j7k9XHxyVtl7RAbXheM7VOSKsCYYGkvWO+36cafogmcEk/MrONZram1cUUMM/dB6qPD0ia18piCrjdzDZXX1K0/DJ8LDNbLOlaSU+ozc/rWbVKEzivvKlYzA3u/mZJvy/pU9VL347go68J23l++t2SlklaJWlA0pdaW85vmNlUSd+V9Bl3Hxzb1m7n9Ry1Tui8tioQ9ktaNOb7hdXn2pK7769+PSTpQY2+5GlnB6uvLV95jXmoxfWMy90PunvF3UckfVVtcm7NrEej/8C+4e4PVJ9uy/N6rlonel5bFQjrJS03syVmNknSrZIeblEtWWbWV32zRmbWJ+m9krbm/1TLPSxpdfXxakkPtbCWrFf+gVV9SG1wbs3MJN0jabu7f3lMU9ud1/Fqneh5bcldBkmq3gb5Z0ldku51939sSSEBM1uq0asCSeqW9M12qtXMviXpRklzJR2U9AVJ/ynpO5IulbRH0kfcveVv5o1T640avax1SbslfXLM6/SWMLMbJD0uaYukkerTd2j0tXlbnddMrbdpAue1ZYEAoP3wpiKAhEAAkBAIABICAUBCIABIWhoIHTINWBK1Ngq1NsZEa231FULHnGBRa6NQa2N0ZCAAaCM1TUwys5sl/YtGZxv+u7vfles/yXp9svrS98M6rR71Tvj4zdTKWu2Cydn207O7XvV9ZWhIXX19r3pu0v6hutd1LsMX92Xbew68ug5+Bxrj7FpPaUhn/LRFf657ogesLnLyrxqzyImZPZxb5GSy+vQ2u2mih3wtxeXbO2x2ZumKq7Ltv7o1/mTrkjt+Wq9ysvb/yfXZ9gV3/aQpdRQS/Z4U0SG/S0/4ukL9annJwCInwHmmlkDotEVOAAQm/JKhqOrtjzWSNFlTGn04ADWo5Qqh0CIn7r7W3fvdvb9T3pABXq9qCYSOWeQEQDETfsng7mUzu13SD/WbRU6eqltlAJqupvcQ3P37kr5fp1rqx4ILH680p44CSn35+/aS9OzHZ2bb+5YerVc5WXbtG8I+J+eNhH1qL6TA7cIitwObdcuwg26DM1MRQEIgAEgIBAAJgQAgIRAAJAQCgIRAAJA0/LMMdVfkHvRIc+YZHPvo27PtM77+s3CMkaF4nYKFj+bv7XdfE49hb31jtr08tScc49Cb8+sySNLln23Cx5sL3Lf3698U9tn9gfxna5b8TZ0+Mh7VW695FXXAFQKAhEAAkBAIABICAUBCIABICAQACYEAICEQACQdODGpSIYFi3QUmOTRteKKsM+sBzZn20/84dvCMV766ImwT3lL/q/psnc/H45RuvDCbPskjxc2ObF6cdinHrrmXZRtrxw8FI5hP/ll2GdJMIdq99+/Ixxj8d/VYfISC6QAaEcEAoCEQACQEAgAEgIBQEIgAEgIBACJeRPvgU632f42u6lpx6vFke/F8xAO781voHLlXzwZjuHlcuGaxlNkA5UTS6dm20e640U6Jg3GC8/0/mB92CdSmjYt2+5XXBqPsevXYZ/KSy8VrqnTPeHrNOhHwr9krhAAJAQCgIRAAJAQCAASAgFAQiAASAgEAAmBACDpvAVS6uDM+/rDPn2TDod9LrprINtersOkI0kq/95bsu3d/7sxHKOv95ps+76/iicdXfanBSb7BO1dM2eEY1gwMam88alwDF15edzndTQxqaiaAsHMdks6rtHfg7K7x//SALStelwh/K67x/87BdD2eA8BQFJrILikH5nZRjNbU4+CALROrS8ZbnD3/WZ2kaRHzOxpd39sbIdqUKyRpMnKb78NoLVqukJw9/3Vr4ckPSjpunP0Wevu/e7e36PeWg4HoMEmHAhm1mdm0155LOm9krbWqzAAzVfLS4Z5kh40s1fG+aa7/3ddqgLQEhMOBHffJelNdaylafZ/fDjsM/WB+WGf3j35XXuO/nG888/M++Odf6KJR92LFoZjlH+W32Vq5rfjXaZUYHenyIFbV4R95v9gX83HqTyzM+wz8q5rs+2lx39Rcx2dhtuOABICAUBCIABICAQACYEAICEQACQEAoDkdblAytJ58ae1jw0uqvk4p2bFuyGVrrkq7DOy+else3lvfN++e8ll2faZP48XP9Gs/E5VkqSjx7LNF/9H/meRpHIdFi4pspvV4TdekG2/6PGay+g4XCEASAgEAAmBACAhEAAkBAKAhEAAkBAIABICAUByXk5MKk2enG2fM3koHMN3vVxzHQu+HS/SUTl4KOxz6gO/tVTlq0xZF69cV35uT9gn0r10cc1jVJq0W9LIlJ6wz6QT3oRKOgtXCAASAgFAQiAASAgEAAmBACAhEAAkBAKAhEAAkJyXE5Ns6aXZ9hdOxpOOup47EB9o+dJs8/GVF4ZDTHkwnpg0+b9+nm23q5eHY3Qfz//MPhSfEz98JOzTDJUb3xz2ef7Py2GfZX+Wn9BV+z5VnYcrBAAJgQAgIRAAJAQCgIRAAJAQCAASAgFAcl7OQ3hp1exs++GDU8Ixlh7cFB8oWNzk1ofWh0M8/OCc+DiRgXguQ+XkqWy7nz4djtF98by4lsHBfLvFu1l1zZ6VbS8dKTCP5On874AkjRw/HvaJlFYW2Hlra7xbVbsIrxDM7F4zO2RmW8c8N9vMHjGzHdWv+b9BAB2hyEuGr0m6+aznPi9pnbsvl7Su+j2ADhcGgrs/JunsOau3SLqv+vg+SR+sc10AWmCibyrOc/eB6uMDkgq8uATQ7mq+y+DuLmnc5WvNbI2ZbTCzDcOK37gC0DoTDYSDZjZfkqpfx32b293Xunu/u/f3qHeChwPQDBMNhIclra4+Xi3pofqUA6CVitx2/Jakn0q60sz2mdknJN0l6T1mtkPSu6vfA+hw4cQkd79tnKab6lxL3Zyamc+5Sb3DdTlOadWKbPuw/6Qux4lUBk+EfbquzC/m4vviBWH8VH5yUyFeYLekuflJRceunhkOMWWgObsy+QXxDlGdhKnLABICAUBCIABICAQACYEAICEQACQEAoDkvFwg5Uxwm3pk84y6HGfXh/Pj/Oxo/t7/qDpsfjJSCbtUtu/ItlvPpHCM0pwiy14cK9Anz3vzv5Yzth8NxxieEy+CUw9dA/HfX7xlTPvgCgFAQiAASAgEAAmBACAhEAAkBAKAhEAAkBAIAJLOm5hUYOefcl9+cYwZ+Tk6hQ1Pyx/n508uD8dYrifqU0yNStOnhn18Wl88ULzOSsj2Hsy27/psvFvSsn/bFfapx4Sh8r79dRilfXCFACAhEAAkBAKAhEAAkBAIABICAUBCIABICAQAScdNTOqaGe/aY+X85KWeoXiFoSIuWHg8237pH/0qHGOkwHFKK/MTcUa2Pl1glLzKi/HKP92T4lWVwjEuWxT2GXnhxWz7srXPh2OcuXx+2Kd0ID8BqogiP095z96aj9MsXCEASAgEAAmBACAhEAAkBAKAhEAAkBAIAJKOm4egSjyHYHh6/u7+zMd3h2MUWTzj1Mn8fXlbGN8L187nwi71mGcQ6VpxRdzppcGaj1PZPxD28XL+7A/+wTXxgTy/eI0k9b77Ldn2nv/ZGI5R+XXtcxnaSXiFYGb3mtkhM9s65rk7zWy/mW2q/vf+xpYJoBmKvGT4mqSbz/H8V9x9VfW/79e3LACtEAaCuz+muuxICqDd1fKm4u1mtrn6kqLItsAA2txEA+FuScskrZI0IOlL43U0szVmtsHMNgzr9AQPB6AZJhQI7n7Q3SvuPiLpq5Kuy/Rd6+797t7fo96J1gmgCSYUCGY29n7ahyRtHa8vgM4RzkMws29JulHSXDPbJ+kLkm40s1WSXNJuSZ9sYI0AmiQMBHe/7RxP39OAWgqJJq1IkgfXPSMXFXgPtMDiGVP68u+JWKXI8iftobLt2bBP19XxTlQayG/dZN3xXLjo73jGI8+EYwy/4bKwz8uXTM6294QjSF4eLtCrczB1GUBCIABICAQACYEAICEQACQEAoCEQACQdNwCKTZtaoFO+cUxSoMvh0MUmUFw4sUp2fbyc9sKjNIcpb6+bLtdMi8co7J9R811eIGFS7rmzsm2n1kZzzHoWR/PVZhaXhb2CRX4eToJVwgAEgIBQEIgAEgIBAAJgQAgIRAAJAQCgIRAAJB03sSkSfndkiRJ0/MLbJR3P1+XWv7hXQ9m2+/XorocJ2QWdvHT+cVcSi+fCsfoXrQw7FPeuy/bXmSBlMrhF7PtPUfjSVQnf2dF2KfneH5xk9fj/y1fjz8zgHEQCAASAgFAQiAASAgEAAmBACAhEAAkBAKApOMmJhVZoWbO3OPZ9q7p08MxKoODYZ/7970j6JGfpFNU1xX5lX0qz/4qHCPaDWlkMH/OJMlP1b5798jQUNintPKqfPtLca29m+LVqqx/Zba9yFpIXXNmh30qLx4pMFJ74AoBQEIgAEgIBAAJgQAgIRAAJAQCgIRAAJB03jyEST1hl8Ff5Hf+mT34bF1K+eHV38u2v0+r6nKcaJ5B95J4J6Pyc3uy7UXmGJSmx7tm1eOeu0VzTUbiGQKlVfECKbZ7INteCUforDkGRYRXCGa2yMweNbNtZvaUmX26+vxsM3vEzHZUv85qfLkAGqnIS4aypM+5+wpJb5f0KTNbIenzkta5+3JJ66rfA+hgYSC4+4C7P1l9fFzSdkkLJN0i6b5qt/skfbBRRQJojtf0pqKZLZZ0raQnJM1z91dehB2QFK98CaCtFQ4EM5sq6buSPuPur/rkj4/u8X3Od3rMbI2ZbTCzDcOq/cMxABqnUCCYWY9Gw+Ab7v5A9emDZja/2j5f0qFz/Vl3X+vu/e7e36PeetQMoEGK3GUwSfdI2u7uXx7T9LCk1dXHqyU9VP/yADRTkXkI75T0MUlbzGxT9bk7JN0l6Ttm9glJeyR9pDElAmiWMBDc/ceSxtsa6Kb6lhPz3nhi0qy3vNCESqS3b/pwtn2GdjaljmjSkSSVpkzJttslBd4TLrBDlOoxMenYiWx75YXD4RhdXfGrYZ81I98h2EHqfMTUZQAJgQAgIRAAJAQCgIRAAJAQCAASAgFAQiAASDpuxSQ7PRz2Obzt4mx7kQlDe//2+rBPeXN+5Z4ixym96eqwj+35dba9cvRYOMbIyy9n27uOxjtVVQpM1Om6enm+jp3xJKryvv35Y1x5eTiGF/l5dp/z4ze/Oc7lS+Ixdj4X9ukkXCEASAgEAAmBACAhEAAkBAKAhEAAkBAIAJKOm4dQmdUX9uldcrzm45xcUA77dJ2sPU9Hfrk97NO9cEG+jp5J8YF8JN8+b244ROnkqbBPZfuOuJboONOmZdtHpl8QjnH0rfHPM+Pr+XkIVgnO2XmIKwQACYEAICEQACQEAoCEQACQEAgAEgIBQEIgAEg6bmKSCswV6f5xsCNPAbO2dIV9KpPyOxl1XXhhOMbIpReFfcobnwr7hMe5YVW2vWsoXnjGh4ZqrqOQZYvydazfEg4xY33tZTzzqflhn2V/GS/40km4QgCQEAgAEgIBQEIgAEgIBAAJgQAgIRAAJB03D2F49uSwz9Al+Q1UStdcFY5x4d0/LVzTeCpFOh0+XPNxiij93y+z7e75c9ZM4aIxpXiOSPfi/FwGSXrx+vyGPqUz+Xkm56PwCsHMFpnZo2a2zcyeMrNPV5+/08z2m9mm6n/vb3y5ABqpyBVCWdLn3P1JM5smaaOZPVJt+4q7f7Fx5QFopjAQ3H1A0kD18XEz2y4pv8gfgI70mt5UNLPFkq6V9ET1qdvNbLOZ3Wtms+pcG4AmKxwIZjZV0nclfcbdByXdLWmZpFUavYL40jh/bo2ZbTCzDcM6XYeSATRKoUAwsx6NhsE33P0BSXL3g+5ecfcRSV+VdN25/qy7r3X3fnfv71FvveoG0ABF7jKYpHskbXf3L495fuxnQz8kaWv9ywPQTEXuMrxT0sckbTGzTdXn7pB0m5mtkuSSdkv6ZEMqBNA01swJKWb2gqSxK0rMldScmTm1o9bGoNbGOLvWy9w9XLGnqYHwWwc32+Du/S0r4DWg1sag1saYaK18lgFAQiAASFodCGtbfPzXglobg1obY0K1tvQ9BADtpdVXCADaCIEAICEQACQEAoCEQACQ/D/WD2jv/GraIQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "activations = activation_model.predict(test_im3.reshape(1,28,28,1))\n", "first_layer_activation = activations[0]\n", "plt.matshow(first_layer_activation[0, :, :, 4], cmap='viridis')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's plot a complete visualization of all the activations in the network. I extract and plot every channel in each of the eight activation maps, and then stack the results in one big image tensor, with channels stacked side by side." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "layer_names = []\n", "for layer in cnn1.layers[:-1]:\n", " layer_names.append(layer.name) \n", "images_per_row = 16\n", "for layer_name, layer_activation in zip(layer_names, activations):\n", " if layer_name.startswith('conv'):\n", " n_features = layer_activation.shape[-1]\n", " size = layer_activation.shape[1]\n", " n_cols = n_features // images_per_row\n", " display_grid = np.zeros((size * n_cols, images_per_row * size))\n", " for col in range(n_cols):\n", " for row in range(images_per_row):\n", " channel_image = layer_activation[0,:, :, col * images_per_row + row]\n", " channel_image -= channel_image.mean()\n", " channel_image /= channel_image.std()\n", " channel_image *= 64\n", " channel_image += 128\n", " channel_image = np.clip(channel_image, 0, 255).astype('uint8')\n", " display_grid[col * size : (col + 1) * size,\n", " row * size : (row + 1) * size] = channel_image\n", " scale = 1. / size\n", " plt.figure(figsize=(scale * display_grid.shape[1],\n", " scale * display_grid.shape[0]))\n", " plt.title(layer_name)\n", " plt.grid(False)\n", " plt.imshow(display_grid, aspect='auto', cmap='viridis')" ] } ], "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.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }