{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "import pickle\n", "import keras\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import tensorflow as tf\n", "from mpl_toolkits.mplot3d import Axes3D\n", "from skimage import transform\n", "from sklearn.metrics import accuracy_score\n", "from keras import backend as K\n", "\n", "plt.rcParams['image.cmap'] = 'viridis'\n", "plt.rcParams['axes.grid'] = False\n", "plt.rcParams['figure.figsize'] = (7, 4)\n", "plt.rcParams['font.family'] = 'serif'\n", "plt.rcParams['font.serif'] = 'FreeSerif'\n", "plt.rcParams['lines.linewidth'] = 1.4\n", "plt.rcParams['lines.markersize'] = 8\n", "plt.rcParams['xtick.labelsize'] = 16\n", "plt.rcParams['ytick.labelsize'] = 16\n", "plt.rcParams['legend.fontsize'] = 16\n", "plt.rcParams['axes.titlesize'] = 22\n", "plt.rcParams['axes.labelsize'] = 16" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from keras.datasets import fashion_mnist\n", "\n", "(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()\n", "x_train = x_train.astype('float32') / 255\n", "x_test = x_test.astype('float32') / 255\n", "\n", "# Split train / validation\n", "n = x_train.shape[0]\n", "ind = np.random.permutation(n)\n", "c = 0.9\n", "n_train = int(c*n)\n", "train_ind = ind[:n_train]\n", "valid_ind = ind[n_train:]\n", "\n", "x_valid = x_train[valid_ind]\n", "y_valid = y_train[valid_ind]\n", "x_train = x_train[train_ind]\n", "y_train = y_train[train_ind]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "conv2d_1 (Conv2D) (None, 28, 28, 64) 320 \n", "_________________________________________________________________\n", "max_pooling2d_1 (MaxPooling2 (None, 14, 14, 64) 0 \n", "_________________________________________________________________\n", "dropout_1 (Dropout) (None, 14, 14, 64) 0 \n", "_________________________________________________________________\n", "conv2d_2 (Conv2D) (None, 14, 14, 32) 8224 \n", "_________________________________________________________________\n", "max_pooling2d_2 (MaxPooling2 (None, 7, 7, 32) 0 \n", "_________________________________________________________________\n", "dropout_2 (Dropout) (None, 7, 7, 32) 0 \n", "_________________________________________________________________\n", "flatten_1 (Flatten) (None, 1568) 0 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 256) 401664 \n", "_________________________________________________________________\n", "dropout_3 (Dropout) (None, 256) 0 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 10) 2570 \n", "=================================================================\n", "Total params: 412,778\n", "Trainable params: 412,778\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model = keras.Sequential()\n", "\n", "model.add(keras.layers.Conv2D(filters=64, kernel_size=2, padding='same', activation='relu', input_shape=(28,28,1))) \n", "model.add(keras.layers.MaxPooling2D(pool_size=2))\n", "model.add(keras.layers.Dropout(0.3))\n", "\n", "model.add(keras.layers.Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))\n", "model.add(keras.layers.MaxPooling2D(pool_size=2))\n", "model.add(keras.layers.Dropout(0.3))\n", "\n", "model.add(keras.layers.Flatten())\n", "model.add(keras.layers.Dense(256, activation='relu'))\n", "model.add(keras.layers.Dropout(0.5))\n", "model.add(keras.layers.Dense(10, activation='softmax'))\n", "\n", "model.compile(loss='categorical_crossentropy',\n", " optimizer='adam',\n", " metrics=['accuracy'])\n", "\n", "model.summary()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 54000 samples, validate on 6000 samples\n", "Epoch 1/10\n", "54000/54000 [==============================] - 151s 3ms/step - loss: 0.5937 - acc: 0.7804 - val_loss: 0.3889 - val_acc: 0.8545\n", "Epoch 2/10\n", "54000/54000 [==============================] - 16s 300us/step - loss: 0.4053 - acc: 0.8536 - val_loss: 0.3262 - val_acc: 0.8813\n", "Epoch 3/10\n", "54000/54000 [==============================] - 16s 301us/step - loss: 0.3615 - acc: 0.8668 - val_loss: 0.2992 - val_acc: 0.8898\n", "Epoch 4/10\n", "54000/54000 [==============================] - 16s 301us/step - loss: 0.3369 - acc: 0.8760 - val_loss: 0.2776 - val_acc: 0.8962\n", "Epoch 5/10\n", "54000/54000 [==============================] - 16s 301us/step - loss: 0.3220 - acc: 0.8809 - val_loss: 0.2622 - val_acc: 0.9013\n", "Epoch 6/10\n", "54000/54000 [==============================] - 16s 301us/step - loss: 0.3054 - acc: 0.8872 - val_loss: 0.2485 - val_acc: 0.9062\n", "Epoch 7/10\n", "54000/54000 [==============================] - 16s 302us/step - loss: 0.2949 - acc: 0.8919 - val_loss: 0.2454 - val_acc: 0.9092\n", "Epoch 8/10\n", "54000/54000 [==============================] - 16s 301us/step - loss: 0.2817 - acc: 0.8947 - val_loss: 0.2352 - val_acc: 0.9103\n", "Epoch 9/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.2747 - acc: 0.8991 - val_loss: 0.2363 - val_acc: 0.9102\n", "Epoch 10/10\n", "54000/54000 [==============================] - 16s 302us/step - loss: 0.2670 - acc: 0.9019 - val_loss: 0.2327 - val_acc: 0.9125\n" ] } ], "source": [ "history = model.fit(np.expand_dims(x_train, 3), \n", " keras.utils.to_categorical(y_train), \n", " batch_size=64, epochs=10,\n", " validation_data=(np.expand_dims(x_valid, 3), \n", " keras.utils.to_categorical(y_valid)))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['loss'])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "from keras.datasets import fashion_mnist\n", "\n", "(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()\n", "x_train = x_train.astype('float32') / 255\n", "x_test = x_test.astype('float32') / 255\n", "\n", "# Split train / validation\n", "n = x_train.shape[0]\n", "ind = np.random.permutation(n)\n", "c = 0.6\n", "n_train = int(c*n)\n", "train_ind = ind[:n_train]\n", "valid_ind = ind[n_train:]\n", "\n", "x_valid = x_train[valid_ind]\n", "y_valid = y_train[valid_ind]\n", "x_train = x_train[train_ind]\n", "y_train = y_train[train_ind]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "model = keras.Sequential()\n", "\n", "model.add(keras.layers.Conv2D(filters=64, kernel_size=2, padding='same', activation='relu', input_shape=(28,28,1))) \n", "model.add(keras.layers.MaxPooling2D(pool_size=2))\n", "model.add(keras.layers.Dropout(0.3))\n", "\n", "model.add(keras.layers.Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))\n", "model.add(keras.layers.MaxPooling2D(pool_size=2))\n", "model.add(keras.layers.Dropout(0.3))\n", "\n", "model.add(keras.layers.Flatten())\n", "model.add(keras.layers.Dense(256, activation='relu'))\n", "model.add(keras.layers.Dropout(0.5))\n", "model.add(keras.layers.Dense(10, activation='softmax'))\n", "\n", "model.compile(loss='categorical_crossentropy',\n", " optimizer='adam',\n", " metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 36000 samples, validate on 24000 samples\n", "Epoch 1/10\n", "36000/36000 [==============================] - 13s 366us/step - loss: 0.6907 - acc: 0.7431 - val_loss: 0.4338 - val_acc: 0.8423\n", "Epoch 2/10\n", "36000/36000 [==============================] - 13s 357us/step - loss: 0.4564 - acc: 0.8354 - val_loss: 0.3575 - val_acc: 0.8744\n", "Epoch 3/10\n", "36000/36000 [==============================] - 13s 355us/step - loss: 0.4053 - acc: 0.8535 - val_loss: 0.3326 - val_acc: 0.8806\n", "Epoch 4/10\n", "36000/36000 [==============================] - 13s 354us/step - loss: 0.3717 - acc: 0.8636 - val_loss: 0.3116 - val_acc: 0.8882\n", "Epoch 5/10\n", "36000/36000 [==============================] - 13s 357us/step - loss: 0.3483 - acc: 0.8728 - val_loss: 0.2959 - val_acc: 0.8918\n", "Epoch 6/10\n", "36000/36000 [==============================] - 13s 354us/step - loss: 0.3290 - acc: 0.8786 - val_loss: 0.2796 - val_acc: 0.8981\n", "Epoch 7/10\n", "36000/36000 [==============================] - 13s 356us/step - loss: 0.3146 - acc: 0.8846 - val_loss: 0.2799 - val_acc: 0.8959\n", "Epoch 8/10\n", "36000/36000 [==============================] - 13s 357us/step - loss: 0.3040 - acc: 0.8881 - val_loss: 0.2697 - val_acc: 0.9002\n", "Epoch 9/10\n", "36000/36000 [==============================] - 13s 359us/step - loss: 0.2926 - acc: 0.8927 - val_loss: 0.2569 - val_acc: 0.9066\n", "Epoch 10/10\n", "36000/36000 [==============================] - 13s 356us/step - loss: 0.2826 - acc: 0.8951 - val_loss: 0.2567 - val_acc: 0.9053\n" ] } ], "source": [ "history = model.fit(np.expand_dims(x_train, 3), \n", " keras.utils.to_categorical(y_train), \n", " batch_size=64, epochs=10,\n", " validation_data=(np.expand_dims(x_valid, 3), \n", " keras.utils.to_categorical(y_valid)))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['loss'])" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "from keras.datasets import fashion_mnist\n", "\n", "(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()\n", "x_train = x_train.astype('float32') / 255\n", "x_test = x_test.astype('float32') / 255\n", "\n", "# Split train / validation\n", "n = x_train.shape[0]\n", "ind = np.random.permutation(n)\n", "c = 0.9\n", "n_train = int(c*n)\n", "train_ind = ind[:n_train]\n", "valid_ind = ind[n_train:]\n", "\n", "x_valid = x_train[valid_ind]\n", "y_valid = y_train[valid_ind]\n", "x_train = x_train[train_ind]\n", "y_train = y_train[train_ind]" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "noise = np.random.normal(loc=0, scale=0.1, size=x_train.shape)\n", "x_train += noise" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "model = keras.Sequential()\n", "\n", "model.add(keras.layers.Conv2D(filters=64, kernel_size=2, padding='same', activation='relu', input_shape=(28,28,1))) \n", "model.add(keras.layers.MaxPooling2D(pool_size=2))\n", "model.add(keras.layers.Dropout(0.3))\n", "\n", "model.add(keras.layers.Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))\n", "model.add(keras.layers.MaxPooling2D(pool_size=2))\n", "model.add(keras.layers.Dropout(0.3))\n", "\n", "model.add(keras.layers.Flatten())\n", "model.add(keras.layers.Dense(256, activation='relu'))\n", "model.add(keras.layers.Dropout(0.5))\n", "model.add(keras.layers.Dense(10, activation='softmax'))\n", "\n", "model.compile(loss='categorical_crossentropy',\n", " optimizer='adam',\n", " metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 54000 samples, validate on 6000 samples\n", "Epoch 1/10\n", "54000/54000 [==============================] - 17s 311us/step - loss: 0.6315 - acc: 0.7661 - val_loss: 0.4191 - val_acc: 0.8543\n", "Epoch 2/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.4489 - acc: 0.8344 - val_loss: 0.3702 - val_acc: 0.8722\n", "Epoch 3/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.4062 - acc: 0.8528 - val_loss: 0.3358 - val_acc: 0.8765\n", "Epoch 4/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.3798 - acc: 0.8596 - val_loss: 0.3111 - val_acc: 0.8833\n", "Epoch 5/10\n", "54000/54000 [==============================] - 16s 304us/step - loss: 0.3651 - acc: 0.8656 - val_loss: 0.3125 - val_acc: 0.8900\n", "Epoch 6/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.3470 - acc: 0.8701 - val_loss: 0.3030 - val_acc: 0.8928\n", "Epoch 7/10\n", "54000/54000 [==============================] - 16s 304us/step - loss: 0.3376 - acc: 0.8735 - val_loss: 0.2978 - val_acc: 0.8910\n", "Epoch 8/10\n", "54000/54000 [==============================] - 16s 305us/step - loss: 0.3297 - acc: 0.8766 - val_loss: 0.2831 - val_acc: 0.8923\n", "Epoch 9/10\n", "54000/54000 [==============================] - 16s 304us/step - loss: 0.3189 - acc: 0.8814 - val_loss: 0.2896 - val_acc: 0.8898\n", "Epoch 10/10\n", "54000/54000 [==============================] - 16s 305us/step - loss: 0.3118 - acc: 0.8849 - val_loss: 0.2750 - val_acc: 0.8983\n" ] } ], "source": [ "history = model.fit(np.expand_dims(x_train, 3), \n", " keras.utils.to_categorical(y_train), \n", " batch_size=64, epochs=10,\n", " validation_data=(np.expand_dims(x_valid, 3), \n", " keras.utils.to_categorical(y_valid)))" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['loss'])" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "from keras.datasets import fashion_mnist\n", "\n", "(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()\n", "x_train = x_train.astype('float32') / 255\n", "x_test = x_test.astype('float32') / 255\n", "\n", "# Split train / validation\n", "n = x_train.shape[0]\n", "ind = np.random.permutation(n)\n", "c = 0.9\n", "n_train = int(c*n)\n", "train_ind = ind[:n_train]\n", "valid_ind = ind[n_train:]\n", "\n", "x_valid = x_train[valid_ind]\n", "y_valid = y_train[valid_ind]\n", "x_train = x_train[train_ind]\n", "y_train = y_train[train_ind]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "noise = np.random.normal(loc=0, scale=0.5, size=x_train.shape)\n", "x_train += noise" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "model = keras.Sequential()\n", "\n", "model.add(keras.layers.Conv2D(filters=64, kernel_size=2, padding='same', activation='relu', input_shape=(28,28,1))) \n", "model.add(keras.layers.MaxPooling2D(pool_size=2))\n", "model.add(keras.layers.Dropout(0.3))\n", "\n", "model.add(keras.layers.Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'))\n", "model.add(keras.layers.MaxPooling2D(pool_size=2))\n", "model.add(keras.layers.Dropout(0.3))\n", "\n", "model.add(keras.layers.Flatten())\n", "model.add(keras.layers.Dense(256, activation='relu'))\n", "model.add(keras.layers.Dropout(0.5))\n", "model.add(keras.layers.Dense(10, activation='softmax'))\n", "\n", "model.compile(loss='categorical_crossentropy',\n", " optimizer='adam',\n", " metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 54000 samples, validate on 6000 samples\n", "Epoch 1/10\n", "54000/54000 [==============================] - 17s 313us/step - loss: 0.8410 - acc: 0.6830 - val_loss: 0.6860 - val_acc: 0.7767\n", "Epoch 2/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.6644 - acc: 0.7473 - val_loss: 0.5990 - val_acc: 0.7898\n", "Epoch 3/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.6225 - acc: 0.7625 - val_loss: 0.6052 - val_acc: 0.8115\n", "Epoch 4/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.6005 - acc: 0.7724 - val_loss: 0.5853 - val_acc: 0.8150\n", "Epoch 5/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.5839 - acc: 0.7762 - val_loss: 0.5750 - val_acc: 0.8257\n", "Epoch 6/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.5689 - acc: 0.7842 - val_loss: 0.5486 - val_acc: 0.8242\n", "Epoch 7/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.5595 - acc: 0.7867 - val_loss: 0.5846 - val_acc: 0.8182\n", "Epoch 8/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.5520 - acc: 0.7887 - val_loss: 0.5834 - val_acc: 0.8148\n", "Epoch 9/10\n", "54000/54000 [==============================] - 16s 304us/step - loss: 0.5399 - acc: 0.7922 - val_loss: 0.5390 - val_acc: 0.8210\n", "Epoch 10/10\n", "54000/54000 [==============================] - 16s 303us/step - loss: 0.5342 - acc: 0.7946 - val_loss: 0.5271 - val_acc: 0.8390\n" ] } ], "source": [ "history = model.fit(np.expand_dims(x_train, 3), \n", " keras.utils.to_categorical(y_train), \n", " batch_size=64, epochs=10,\n", " validation_data=(np.expand_dims(x_valid, 3), \n", " keras.utils.to_categorical(y_valid)))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['loss'])" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0" }, "toc": { "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }