{ "cells": [ { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [], "source": [ "import keras\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from skimage import transform\n", "from sklearn.metrics import accuracy_score\n", "from keras import backend as K" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [], "source": [ "from matplotlib import pylab as plt\n", "plt.rcParams['font.family'] = 'serif'\n", "plt.rcParams['font.serif'] = 'FreeSerif'\n", "plt.rcParams['lines.linewidth'] = 2\n", "plt.rcParams['lines.markersize'] = 12\n", "plt.rcParams['xtick.labelsize'] = 24\n", "plt.rcParams['ytick.labelsize'] = 24\n", "plt.rcParams['legend.fontsize'] = 24\n", "plt.rcParams['axes.titlesize'] = 36\n", "plt.rcParams['axes.labelsize'] = 24" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Данные:\n", "Будем работать с датасетом [FashionMNIST](https://github.com/zalandoresearch/fashion-mnist). " ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [], "source": [ "from keras.datasets import fashion_mnist\n", "\n", "(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()\n", "del y_train, y_test" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "73.0\n", "(60000, 28, 28)\n", "(10000, 28, 28)\n" ] } ], "source": [ "print(np.mean(X_train).round())\n", "print(X_train.shape)\n", "print(X_test.shape)" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\font_manager.py:1328: UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(X_train[59999].reshape([28,28]))" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\font_manager.py:1328: UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(transform.rotate(X_train[59999].reshape([28,28]), 45))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задание.\n", "Ваша задача - определить, при каком минимальном угле поворота нейронная сеть фиксированной архитектуры перестает различать обычное и повертнутое изображение. Говоря формально, решаем задачу классификации, исходные изображения принадлежат классу `0`, повернутые - классу `1`. Оцените точность классификации по метрике `accuracy` и ее дисперсию в зависимости от угла поворота изображения и отобразите данную зависимость на графике.\n", "\n", "Функция `rotate_dataset` поворачивает поданный датасет на заданный угол. Функция `reset_weights` сбрасывает параметры модели.\n", "\n", "*Обращаем ваше внимание, что для качественной оценки данных зависимостей эксперименты для каждого размера выборки стоит повторять многократно на различных случайных подвыборках.*" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [], "source": [ "def rotate_dataset(dataset, angle):\n", " return np.array(list(map(lambda x: transform.rotate(x, angle), dataset)))" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [], "source": [ "def get_X_and_y(base_dataset, angle):\n", " rotated_datased = rotate_dataset(base_dataset, angle)\n", " whole_dataset = np.vstack((base_dataset, rotated_datased)).reshape(-1, 784)\n", " shuffled_indices = np.arange(len(whole_dataset))\n", " \n", " _labels = np.zeros(2*base_dataset.shape[0], dtype=bool)\n", " _labels[base_dataset.shape[0]:] = True\n", " _labels = _labels[:, None]\n", " \n", " whole_labels = np.array(np.hstack((_labels, ~_labels)), dtype=int)\n", " \n", " np.random.shuffle(shuffled_indices) \n", " whole_dataset = whole_dataset[shuffled_indices]\n", " whole_labels = whole_labels[shuffled_indices]\n", " \n", " return whole_dataset, whole_labels\n" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [], "source": [ "def reset_weights(model):\n", " session = K.get_session()\n", " for layer in model.layers: \n", " if hasattr(layer, 'kernel_initializer'):\n", " layer.kernel.initializer.run(session=session)\n", " return" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [], "source": [ "# compile net itself\n", "model = keras.models.Sequential()\n", "model.add(keras.layers.InputLayer([784]))\n", "model.add(keras.layers.Dense(64))\n", "model.add(keras.layers.Activation('relu'))\n", "model.add(keras.layers.Dropout(0.5))\n", "model.add(keras.layers.Dense(2))\n", "model.add(keras.layers.Activation('softmax'))\n", "model.compile('adam', 'categorical_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [], "source": [ "# set hyper parameters\n", "batch_size = 128\n", "nb_epochs = 40\n", "N = 500 # number of samples in training dataset\n", "nb_runs = 8 # number of times the net is trained and predictions are made for each angle" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [], "source": [ "def count_scores(start, end, angle_step, verbose = False):\n", " scores=[] # mean scores for \"nb_runs\" runs\n", " for angle in range(start, end, angle_step):\n", " run_score = [] # score for one run\n", " X_test_whole, y_test_whole = get_X_and_y(X_test, angle)\n", " # run several times with different samples chosen for training\n", " for nrun in range(nb_runs):\n", " # indices that are used for picking training samples out of X_train\n", " base_indices = np.random.choice(np.arange(X_train.shape[0]), \n", " size=N, replace=False)\n", " # training dataset\n", " base_dataset = X_train[base_indices].reshape([-1, 28,28]) / 255\n", " X, y = get_X_and_y(base_dataset, angle)\n", " # training itself\n", " model.fit(X, y, batch_size=batch_size, epochs=nb_epochs, verbose=0)\n", " # get predictions on test data\n", " y_test_predicted_whole = model.predict_classes(X_test_whole)\n", " run_score.append(accuracy_score(y_test_whole[:, 1], y_test_predicted_whole))\n", " if verbose:\n", " print('angle={1}, run={2}/{3}'.format(N, angle, nrun+1, nb_runs))\n", " print(\"Accuracy: {0}\".format(run_score[-1]))\n", " reset_weights(model)\n", " # save mean score and its standard deviation for each angle\n", " scores.append([angle, np.mean(run_score), np.std(run_score)])\n", " return scores" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "scores = count_scores(0, 361, 30, True)" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\font_manager.py:1328: UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax1 = plt.subplots(1, 1)\n", "ax1.set_title('Score vs angle')\n", "ax1.set_xlabel(r'Angle, $\\theta$')\n", "ax1.set_ylabel(r'Score')\n", "\n", "scores = np.array(scores)\n", "plt.plot(scores[:, 0], scores[:, 1], '-o')\n", "ax1.errorbar(scores[:, 0], scores[:, 1], yerr=scores[:, 2], fmt='none', color=\"red\", elinewidth=1, uplims=True, lolims=True)\n", "ax1.set_xticks(np.arange(0, 361, 90))\n", "ax1.set_ylim(0, 1)\n", "ax1.grid()\n", "\n", "plt.savefig('score_v_angle_[0-360].png')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Как видно из графика, точность классификации почти не зависит от угла поворота, если он отличается более чем на 10 градусов от 0 или 360. Поэтому рассмотрим подробнее случаи с малыми поворотами - не более 10 градусов." ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "angle=9, run=8/8\n", "Accuracy: 0.97455\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\font_manager.py:1328: UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": {}, "metadata": {}, "output_type": "display_data" } ], "source": [ "first_scores = count_scores(0, 11, 1, True)" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\font_manager.py:1328: UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans\n", " (prop.get_family(), self.defaultFamily[fontext]))\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax2 = plt.subplots(1, 1)\n", "ax2.set_title('Score vs angle')\n", "ax2.set_xlabel(r'Angle, $\\theta$')\n", "ax2.set_ylabel(r'Score')\n", "\n", "scores = np.array(first_scores)\n", "plt.plot(scores[:, 0], scores[:, 1], '-o')\n", "ax2.errorbar(scores[:, 0], scores[:, 1], yerr=scores[:, 2], fmt='none', color=\"red\", elinewidth=1, uplims=True, lolims=True)\n", "ax2.set_xticks(np.arange(0, 11, 1))\n", "ax2.set_yticks(np.arange(0, 1, 0.15))\n", "ax2.set_ylim(0, 1)\n", "ax2.grid()\n", "\n", "plt.savefig('score_v_angle_[0-30].png')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "При отсутствии поворота (повороте 0 или 360 градусов) классифицировать не имеет смысла. При повороте на углы кратные 90 точность классификации незначительно падает на 2-3 процента.\n", "Минимальный угол поворота при котором нейронная сеть определяет, повернуто ли изображение - 3 градуса (при меньших углах точность падает ниже 90 процентов)." ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 2 }