From 60c81ee21abceaf56b58fba79724d7c99c1efe5b Mon Sep 17 00:00:00 2001 From: Viktoria Kutikova Date: Fri, 25 Sep 2020 12:23:14 +0400 Subject: [PATCH] add assignment 2 --- lab_1/assignment1.ipynb | 683 ------------------ lab_1/assignment2.ipynb | 313 -------- lab_1/scripts/classifiers/__init__.py | 2 - .../scripts/classifiers/k_nearest_neighbor.py | 183 ----- .../scripts/classifiers/linear_classifier.py | 139 ---- lab_1/scripts/classifiers/linear_svm.py | 100 --- lab_1/scripts/classifiers/neural_net.py | 225 ------ lab_1/scripts/classifiers/softmax.py | 65 -- lab_1/scripts/data_utils.py | 262 ------- lab_1/scripts/datasets/get_datasets.sh | 4 - lab_1/scripts/gradient_check.py | 129 ---- lab_1/scripts/vis_utils.py | 73 -- 12 files changed, 2178 deletions(-) delete mode 100644 lab_1/assignment1.ipynb delete mode 100644 lab_1/assignment2.ipynb delete mode 100644 lab_1/scripts/classifiers/__init__.py delete mode 100644 lab_1/scripts/classifiers/k_nearest_neighbor.py delete mode 100644 lab_1/scripts/classifiers/linear_classifier.py delete mode 100644 lab_1/scripts/classifiers/linear_svm.py delete mode 100644 lab_1/scripts/classifiers/neural_net.py delete mode 100644 lab_1/scripts/classifiers/softmax.py delete mode 100644 lab_1/scripts/data_utils.py delete mode 100644 lab_1/scripts/datasets/get_datasets.sh delete mode 100644 lab_1/scripts/gradient_check.py delete mode 100644 lab_1/scripts/vis_utils.py diff --git a/lab_1/assignment1.ipynb b/lab_1/assignment1.ipynb deleted file mode 100644 index 4ae8fb5..0000000 --- a/lab_1/assignment1.ipynb +++ /dev/null @@ -1,683 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Лабораторная работа 1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1) Классификация данных методом k ближайших соседей ( kNN)\n", - "\n", - "2) Классификация данных методом опорных векторов (SVM)\n", - "\n", - "3) Построение softmax-классификатора\n", - "\n", - "Вариант 1: задания 1 и 2 на наборе данных CIFAR-10\n", - "\n", - "Вариант 2: задания 1 и 2 на наборе данных MNIST\n", - "\n", - "Вариант 3: задания 1 и 3 на наборе данных CIFAR-10\n", - "\n", - "Вариант 4: задания 1 и 3 на наборе данных MNIST" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Лабораторные работы можно выполнять с использованием сервиса Google Colaboratory (https://medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-e113627b9f5d) или на локальном компьютере. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Классификация данных методом k ближайших соседей ( kNN)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import random\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from scripts.data_utils import load_CIFAR10\n", - "\n", - "\n", - "%matplotlib inline\n", - "plt.rcParams['figure.figsize'] = (10.0, 8.0) \n", - "plt.rcParams['image.interpolation'] = 'nearest'\n", - "plt.rcParams['image.cmap'] = 'gray'" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1.1 Скачайте данные в соответсвии с заданием.\n", - "\n", - "CIFAR-10 по ссылке https://www.cs.toronto.edu/~kriz/cifar.html\n", - "или используйте команду !bash get_datasets.sh (google colab, local ubuntu)\n", - "\n", - "MNIST \n", - "sklearn.datasets import load_digits\n", - "digits = load_digits()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Clear previously loaded data.\n", - "Training data shape: (50000, 32, 32, 3)\n", - "Training labels shape: (50000,)\n", - "Test data shape: (10000, 32, 32, 3)\n", - "Test labels shape: (10000,)\n" - ] - } - ], - "source": [ - "cifar10_dir = 'scripts/datasets/cifar-10-batches-py'\n", - "\n", - "try:\n", - " del X_train, y_train\n", - " del X_test, y_test\n", - " print('Clear previously loaded data.')\n", - "except:\n", - " pass\n", - "\n", - "X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n", - "\n", - "print('Training data shape: ', X_train.shape)\n", - "print('Training labels shape: ', y_train.shape)\n", - "print('Test data shape: ', X_test.shape)\n", - "print('Test labels shape: ', y_test.shape)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1.2 Выведите несколько примеров изображений из обучающей выборки для каждого класса.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1.3 Разделите данные на обучающу и тестовую выборки (X_train, y_train, X_test, y_test). Преобразуйте каждое изображение в одномерный массив. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1.4 Напишите реализацию классификатора в скрипте /classifiers/k_nearest_neighbor.py и обучите его на сформированной выборке. " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "from scripts.classifiers import KNearestNeighbor\n", - "\n", - "classifier = KNearestNeighbor()\n", - "classifier.train(X_train, y_train)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1.5 Выполните классификацию на тестовой выборке" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1.6 Визуализируйте матрицу расстояний для каждого изображения из тестовой выборки до изображений из обучающей выборки. \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "1.7 Посчитайте долю правильно классифицированных изображений из тестовой выборки.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1.8 Постройте график зависимости доли правильно классифицированных изображений от числа соседей, используемых при классификации." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1.9 Выберите лучшее значение параметра k на основе кросс-валидации.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "1.10 Переобучите и протестируйте классификатор с использованием выбранного значения k.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1.11 Сделайте выводы по результатам 1 части задания." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Классификация данных методом опорных векторов (SVM)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2.1 Разделите данные на обучающую, тестовую и валидационную выборки. Преобразуйте каждое изображение в одномерный массив. Выведите размеры выборок." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2.2 Проведите предварительную обработку данных, путем вычитания среднего изображения, рассчитанного по обучающей выборке.\n", - "\n", - "2.3 Чтобы далее не учитывать смещение (свободный член b), добавьте дополнитульную размерность к массиву дынных и заполните ее 1." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mean_image = np.mean(X_train, axis=0)\n", - "print(mean_image[:10]) \n", - "plt.figure(figsize=(4,4))\n", - "plt.imshow(mean_image.reshape((32,32,3)).astype('uint8')) \n", - "plt.show()\n", - "\n", - "\n", - "X_train -= mean_image\n", - "X_val -= mean_image\n", - "X_test -= mean_image\n", - "\n", - "\n", - "\n", - "X_train = np.hstack([X_train, np.ones((X_train.shape[0], 1))])\n", - "X_val = np.hstack([X_val, np.ones((X_val.shape[0], 1))])\n", - "X_test = np.hstack([X_test, np.ones((X_test.shape[0], 1))])\n", - "\n", - "\n", - "print(X_train.shape, X_val.shape, X_test.shape)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2.4 Реализуйте loss-функции в scripts/classifiers/linear_svm.py\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "from scripts.classifiers.linear_svm import svm_loss_naive\n", - "import time\n", - "\n", - "\n", - "W = np.random.randn(3073, 10) * 0.0001 \n", - "\n", - "loss, grad = svm_loss_naive(W, X_dev, y_dev, 0.000005)\n", - "print('loss: %f' % (loss, ))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "2.5 Убедитесь, что вы верно реализовали расчет градиента, сравнив с реализацией численными методами (код приведен ниже)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "loss, grad = svm_loss_naive(W, X_dev, y_dev, 0.0)\n", - "\n", - "from scripts.gradient_check import grad_check_sparse\n", - "f = lambda w: svm_loss_naive(w, X_dev, y_dev, 0.0)[0]\n", - "grad_numerical = grad_check_sparse(f, W, grad)\n", - "\n", - "\n", - "loss, grad = svm_loss_naive(W, X_dev, y_dev, 5e1)\n", - "f = lambda w: svm_loss_naive(w, X_dev, y_dev, 5e1)[0]\n", - "grad_numerical = grad_check_sparse(f, W, grad)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2.6 Сравните svm_loss_naive и svm_loss_vectorized реализации" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tic = time.time()\n", - "_, grad_naive = svm_loss_naive(W, X_dev, y_dev, 0.000005)\n", - "toc = time.time()\n", - "print('Naive loss and gradient: computed in %fs' % (toc - tic))\n", - "\n", - "tic = time.time()\n", - "_, grad_vectorized = svm_loss_vectorized(W, X_dev, y_dev, 0.000005)\n", - "toc = time.time()\n", - "print('Vectorized loss and gradient: computed in %fs' % (toc - tic))\n", - "\n", - "difference = np.linalg.norm(grad_naive - grad_vectorized, ord='fro')\n", - "print('difference: %f' % difference)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2.7 Реализуйте стохастический градиентный спуск в /classifiers/linear_classifier.py . Реализуйте методы train() и predict() и запустите следующий код" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from scripts.classifiers import LinearSVM\n", - "svm = LinearSVM()\n", - "tic = time.time()\n", - "loss_hist = svm.train(X_train, y_train, learning_rate=1e-7, reg=2.5e4,\n", - " num_iters=1500, verbose=True)\n", - "toc = time.time()\n", - "print('That took %fs' % (toc - tic))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "y_train_pred = svm.predict(X_train)\n", - "print('training accuracy: %f' % (np.mean(y_train == y_train_pred), ))\n", - "y_val_pred = svm.predict(X_val)\n", - "print('validation accuracy: %f' % (np.mean(y_val == y_val_pred), ))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2.8 С помощью кросс-валидации выберите значения параметров скорости обучения и регуляризации. В кросс-валидации используйте обучающую и валидационную выборки. Оцените accuracy на тестовой выборке." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "learning_rates = [1e-7, 5e-5]\n", - "regularization_strengths = [2.5e4, 5e4]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2.9 Сделайте выводы по второй части задания" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Построение softmax-классификатора" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3.1 Разделите данные на обучающую, тестовую и валидационную выборки. Преобразуйте каждое изображение в одномерный массив. Выведите размеры выборок." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3.2 Проведите предварительную обработку данных, путем вычитания среднего изображения, рассчитанного по обучающей выборке.\n", - "\n", - "3.3 Чтобы далее не учитывать смещение (свободный член b), добавьте дополнитульную размерность к массиву данных и заполните ее единицами." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mean_image = np.mean(X_train, axis=0)\n", - "print(mean_image[:10]) \n", - "plt.figure(figsize=(4,4))\n", - "plt.imshow(mean_image.reshape((32,32,3)).astype('uint8')) \n", - "plt.show()\n", - "\n", - "\n", - "X_train -= mean_image\n", - "X_val -= mean_image\n", - "X_test -= mean_image\n", - "\n", - "\n", - "\n", - "X_train = np.hstack([X_train, np.ones((X_train.shape[0], 1))])\n", - "X_val = np.hstack([X_val, np.ones((X_val.shape[0], 1))])\n", - "X_test = np.hstack([X_test, np.ones((X_test.shape[0], 1))])\n", - "\n", - "\n", - "print(X_train.shape, X_val.shape, X_test.shape)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3.4 Реализуйте функции в classifiers/softmax.py\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from scripts.classifiers.softmax import softmax_loss_naive\n", - "import time\n", - "\n", - "# Generate a random softmax weight matrix and use it to compute the loss.\n", - "W = np.random.randn(3073, 10) * 0.0001\n", - "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n", - "\n", - "# As a rough sanity check, our loss should be something close to -log(0.1).\n", - "print('loss: %f' % loss)\n", - "print('sanity check: %f' % (-np.log(0.1)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3.5 Убедитесь, что вы верно реализовали расчет градиента, сравнив с реализацией численными методами (код приведен ниже)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n", - "\n", - "\n", - "from scripts.gradient_check import grad_check_sparse\n", - "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 0.0)[0]\n", - "grad_numerical = grad_check_sparse(f, W, grad, 10)\n", - "\n", - "\n", - "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 5e1)\n", - "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 5e1)[0]\n", - "grad_numerical = grad_check_sparse(f, W, grad, 10)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3.6 Сравните softmax_loss_naive и softmax_loss_vectorized реализации" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tic = time.time()\n", - "loss_naive, grad_naive = softmax_loss_naive(W, X_dev, y_dev, 0.000005)\n", - "toc = time.time()\n", - "print('naive loss: %e computed in %fs' % (loss_naive, toc - tic))\n", - "\n", - "from scripts.classifiers.softmax import softmax_loss_vectorized\n", - "tic = time.time()\n", - "loss_vectorized, grad_vectorized = softmax_loss_vectorized(W, X_dev, y_dev, 0.000005)\n", - "toc = time.time()\n", - "print('vectorized loss: %e computed in %fs' % (loss_vectorized, toc - tic))\n", - "\n", - "\n", - "grad_difference = np.linalg.norm(grad_naive - grad_vectorized, ord='fro')\n", - "print('Loss difference: %f' % np.abs(loss_naive - loss_vectorized))\n", - "print('Gradient difference: %f' % grad_difference)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3.7 Реализуйте стохастический градиентный спуск в /classifiers/linear_classifier.py . Реализуйте методы train() и predict() и запустите следующий код\n", - "\n", - "3.8 Обучите Softmax-классификатор и оцените accuracy на тестовой выборке." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3.9 С помощью кросс-валидации выберите значения параметров скорости обучения и регуляризации. В кросс-валидации используйте обучающую и валидационную выборки. Оцените accuracy на тестовой выборке." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "learning_rates = [1e-7, 5e-5]\n", - "regularization_strengths = [2.5e4, 5e4]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "3.10 Сделайте выводы по третьей части задания" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/lab_1/assignment2.ipynb b/lab_1/assignment2.ipynb deleted file mode 100644 index 6b6bcfd..0000000 --- a/lab_1/assignment2.ipynb +++ /dev/null @@ -1,313 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Лабораторная работа 2\n", - "\n", - "## Полносвязная нейронная сеть\n", - "\n", - "Реализовать нейронную сеть, состоящую из двух полносвязных слоев и решающую задачу классификации на наборе данных из лабораторной работы 1." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "from scripts.classifiers.neural_net import TwoLayerNet\n", - "\n", - "%matplotlib inline\n", - "plt.rcParams['figure.figsize'] = (10.0, 8.0) \n", - "plt.rcParams['image.interpolation'] = 'nearest'\n", - "plt.rcParams['image.cmap'] = 'gray'\n", - "\n", - "\n", - "def rel_error(x, y):\n", - " \"\"\" returns relative error \"\"\"\n", - " return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. Добавьте реализации методов класса TwoLayerNet . Проверьте вашу реализацию на модельных данных (Код приведен ниже). " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "input_size = 4\n", - "hidden_size = 10\n", - "num_classes = 3\n", - "num_inputs = 5\n", - "\n", - "def init_toy_model():\n", - " np.random.seed(0)\n", - " return TwoLayerNet(input_size, hidden_size, num_classes, std=1e-1)\n", - "\n", - "def init_toy_data():\n", - " np.random.seed(1)\n", - " X = 10 * np.random.randn(num_inputs, input_size)\n", - " y = np.array([0, 1, 2, 2, 1])\n", - " return X, y\n", - "\n", - "net = init_toy_model()\n", - "X, y = init_toy_data()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Прямой проход: вычисление выхода сети\n", - "\n", - "Реализуйте первую часть метода TwoLayerNet.loss, вычисляющую оценки классов для входных данных. \n", - "\n", - "Сравните ваш выход сети с эталонными значениями. Ошибка должна быть очень маленькой (можете ориентироваться на значение < 1e-7) ." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scores = net.loss(X)\n", - "print('Your scores:')\n", - "print(scores)\n", - "print()\n", - "print('correct scores:')\n", - "correct_scores = np.asarray([\n", - " [-0.81233741, -1.27654624, -0.70335995],\n", - " [-0.17129677, -1.18803311, -0.47310444],\n", - " [-0.51590475, -1.01354314, -0.8504215 ],\n", - " [-0.15419291, -0.48629638, -0.52901952],\n", - " [-0.00618733, -0.12435261, -0.15226949]])\n", - "print(correct_scores)\n", - "print()\n", - "\n", - "\n", - "print('Difference between your scores and correct scores:')\n", - "print(np.sum(np.abs(scores - correct_scores)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "# Прямой проход: вычисление loss\n", - "\n", - "Реализуйте вторую часть метода, вычисляющую значение функции потерь. Сравните с эталоном. Ошибка должна быть очень маленькой (можете ориентироваться на значение < 1e-12) ." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "loss, _ = net.loss(X, y, reg=0.05)\n", - "correct_loss = 1.30378789133\n", - "\n", - "print('Difference between your loss and correct loss:')\n", - "print(np.sum(np.abs(loss - correct_loss)))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Обратный проход\n", - "\n", - "Реализуйте третью часть метода loss. Используйте численную реализацию расчета градиента для проверки вашей реализации обратного прохода. Если прямой и обратный проходы реализованы верно, то ошибка будет < 1e-8 для каждой из переменных W1, W2, b1, и b2. \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from scripts.gradient_check import eval_numerical_gradient\n", - "\n", - "loss, grads = net.loss(X, y, reg=0.05)\n", - "\n", - "for param_name in grads:\n", - " f = lambda W: net.loss(X, y, reg=0.05)[0]\n", - " param_grad_num = eval_numerical_gradient(f, net.params[param_name], verbose=False)\n", - " print('%s max relative error: %e' % (param_name, rel_error(param_grad_num, grads[param_name])))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Обучение нейронной сети на смоделированных данных\n", - "\n", - "Реализуйте методы TwoLayerNet.train и TwoLayerNet.predict. Обучайте сеть до тех пор, пока значение loss не будет < 0.02.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "net = init_toy_model()\n", - "stats = net.train(X, y, X, y,\n", - " learning_rate=1e-1, reg=5e-6,\n", - " num_iters=100, verbose=False)\n", - "\n", - "print('Final training loss: ', stats['loss_history'][-1])\n", - "\n", - "\n", - "plt.plot(stats['loss_history'])\n", - "plt.xlabel('iteration')\n", - "plt.ylabel('training loss')\n", - "plt.title('Training Loss history')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Обучение нейронной сети на реальном наборе данных (CIFAR-10, MNIST)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Загрузите набор данных, соответствующий вашему варианту. \n", - "\n", - "Разделите данные на обучающую, тестовую и валидационную выборки.\n", - "\n", - "Выполните предобработку данных, как в ЛР 1. \n", - "\n", - "Обучите нейронную сеть на ваших данных. \n", - "\n", - "При сдаче лабораторной работы объясните значения всех параметров метода train." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "input_size = 32 * 32 * 3\n", - "hidden_size = 50\n", - "num_classes = 10\n", - "net = TwoLayerNet(input_size, hidden_size, num_classes)\n", - "\n", - "stats = net.train(X_train, y_train, X_val, y_val,\n", - " num_iters=1000, batch_size=200,\n", - " learning_rate=1e-4, learning_rate_decay=0.95,\n", - " reg=0.25, verbose=True)\n", - "\n", - "val_acc = (net.predict(X_val) == y_val).mean()\n", - "print('Validation accuracy: ', val_acc)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Используя параметры по умолчанию, вы можете получить accuracy, примерно равный 0.29. \n", - "\n", - "Проведите настройку гиперпараметров для увеличения accuracy. Поэкспериментируйте со значениями гиперпараметров, например, с количеством скрытых слоев, количеством эпох, скорости обучения и др. Ваша цель - максимально увеличить accuracy полносвязной сети на валидационном наборе. Различные эксперименты приветствуются. Например, вы можете использовать методы для сокращения размерности признакового пространства (например, PCA), добавить dropout слои и др. \n", - "\n", - "Для лучшей модели вычислите acсuracy на тестовом наборе. \n", - "\n", - "Для отладки процесса обучения часто помогают графики изменения loss и accuracy в процессе обучения. Ниже приведен код построения таких графиков. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.subplot(2, 1, 1)\n", - "plt.plot(stats['loss_history'])\n", - "plt.title('Loss history')\n", - "plt.xlabel('Iteration')\n", - "plt.ylabel('Loss')\n", - "\n", - "plt.subplot(2, 1, 2)\n", - "plt.plot(stats['train_acc_history'], label='train')\n", - "plt.plot(stats['val_acc_history'], label='val')\n", - "plt.title('Classification accuracy history')\n", - "plt.xlabel('Epoch')\n", - "plt.ylabel('Classification accuracy')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from scripts.vis_utils import visualize_grid\n", - "\n", - "def show_net_weights(net):\n", - " W1 = net.params['W1']\n", - " W1 = W1.reshape(32, 32, 3, -1).transpose(3, 0, 1, 2)\n", - " plt.imshow(visualize_grid(W1, padding=3).astype('uint8'))\n", - " plt.gca().axis('off')\n", - " plt.show()\n", - "\n", - "show_net_weights(net)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Сделайте выводы по результатам работы. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.4" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/lab_1/scripts/classifiers/__init__.py b/lab_1/scripts/classifiers/__init__.py deleted file mode 100644 index d1d7af8..0000000 --- a/lab_1/scripts/classifiers/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from scripts.classifiers.k_nearest_neighbor import * -from scripts.classifiers.linear_classifier import * diff --git a/lab_1/scripts/classifiers/k_nearest_neighbor.py b/lab_1/scripts/classifiers/k_nearest_neighbor.py deleted file mode 100644 index 91533f1..0000000 --- a/lab_1/scripts/classifiers/k_nearest_neighbor.py +++ /dev/null @@ -1,183 +0,0 @@ -from builtins import range -from builtins import object -import numpy as np -from past.builtins import xrange - - -class KNearestNeighbor(object): - """ a kNN classifier with L2 distance """ - - def __init__(self): - pass - - def train(self, X, y): - """ - Train the classifier. For k-nearest neighbors this is just - memorizing the training data. - - Inputs: - - X: A numpy array of shape (num_train, D) containing the training data - consisting of num_train samples each of dimension D. - - y: A numpy array of shape (N,) containing the training labels, where - y[i] is the label for X[i]. - """ - self.X_train = X - self.y_train = y - - def predict(self, X, k=1, num_loops=0): - """ - Predict labels for test data using this classifier. - - Inputs: - - X: A numpy array of shape (num_test, D) containing test data consisting - of num_test samples each of dimension D. - - k: The number of nearest neighbors that vote for the predicted labels. - - num_loops: Determines which implementation to use to compute distances - between training points and testing points. - - Returns: - - y: A numpy array of shape (num_test,) containing predicted labels for the - test data, where y[i] is the predicted label for the test point X[i]. - """ - if num_loops == 0: - dists = self.compute_distances_no_loops(X) - elif num_loops == 1: - dists = self.compute_distances_one_loop(X) - elif num_loops == 2: - dists = self.compute_distances_two_loops(X) - else: - raise ValueError('Invalid value %d for num_loops' % num_loops) - - return self.predict_labels(dists, k=k) - - def compute_distances_two_loops(self, X): - """ - Compute the distance between each test point in X and each training point - in self.X_train using a nested loop over both the training data and the - test data. - - Inputs: - - X: A numpy array of shape (num_test, D) containing test data. - - Returns: - - dists: A numpy array of shape (num_test, num_train) where dists[i, j] - is the Euclidean distance between the ith test point and the jth training - point. - """ - num_test = X.shape[0] - num_train = self.X_train.shape[0] - dists = np.zeros((num_test, num_train)) - for i in range(num_test): - for j in range(num_train): - ##################################################################### - # TODO: # - # Compute the l2 distance between the ith test point and the jth # - # training point, and store the result in dists[i, j]. You should # - # not use a loop over dimension, nor use np.linalg.norm(). # - ##################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - return dists - - def compute_distances_one_loop(self, X): - """ - Compute the distance between each test point in X and each training point - in self.X_train using a single loop over the test data. - - Input / Output: Same as compute_distances_two_loops - """ - num_test = X.shape[0] - num_train = self.X_train.shape[0] - dists = np.zeros((num_test, num_train)) - for i in range(num_test): - ####################################################################### - # TODO: # - # Compute the l2 distance between the ith test point and all training # - # points, and store the result in dists[i, :]. # - # Do not use np.linalg.norm(). # - ####################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - return dists - - def compute_distances_no_loops(self, X): - """ - Compute the distance between each test point in X and each training point - in self.X_train using no explicit loops. - - Input / Output: Same as compute_distances_two_loops - """ - num_test = X.shape[0] - num_train = self.X_train.shape[0] - dists = np.zeros((num_test, num_train)) - ######################################################################### - # TODO: # - # Compute the l2 distance between all test points and all training # - # points without using any explicit loops, and store the result in # - # dists. # - # # - # You should implement this function using only basic array operations; # - # in particular you should not use functions from scipy, # - # nor use np.linalg.norm(). # - # # - # HINT: Try to formulate the l2 distance using matrix multiplication # - # and two broadcast sums. # - ######################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - return dists - - def predict_labels(self, dists, k=1): - """ - Given a matrix of distances between test points and training points, - predict a label for each test point. - - Inputs: - - dists: A numpy array of shape (num_test, num_train) where dists[i, j] - gives the distance betwen the ith test point and the jth training point. - - Returns: - - y: A numpy array of shape (num_test,) containing predicted labels for the - test data, where y[i] is the predicted label for the test point X[i]. - """ - num_test = dists.shape[0] - y_pred = np.zeros(num_test) - for i in range(num_test): - # A list of length k storing the labels of the k nearest neighbors to - # the ith test point. - closest_y = [] - ######################################################################### - # TODO: # - # Use the distance matrix to find the k nearest neighbors of the ith # - # testing point, and use self.y_train to find the labels of these # - # neighbors. Store these labels in closest_y. # - # Hint: Look up the function numpy.argsort. # - ######################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - ######################################################################### - # TODO: # - # Now that you have found the labels of the k nearest neighbors, you # - # need to find the most common label in the list closest_y of labels. # - # Store this label in y_pred[i]. Break ties by choosing the smaller # - # label. # - ######################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - return y_pred diff --git a/lab_1/scripts/classifiers/linear_classifier.py b/lab_1/scripts/classifiers/linear_classifier.py deleted file mode 100644 index fc99137..0000000 --- a/lab_1/scripts/classifiers/linear_classifier.py +++ /dev/null @@ -1,139 +0,0 @@ -from __future__ import print_function - -from builtins import range -from builtins import object -import numpy as np -from scripts.classifiers.linear_svm import * -from scripts.classifiers.softmax import * -from past.builtins import xrange - - -class LinearClassifier(object): - - def __init__(self): - self.W = None - - def train(self, X, y, learning_rate=1e-3, reg=1e-5, num_iters=100, - batch_size=200, verbose=False): - """ - Train this linear classifier using stochastic gradient descent. - - Inputs: - - X: A numpy array of shape (N, D) containing training data; there are N - training samples each of dimension D. - - y: A numpy array of shape (N,) containing training labels; y[i] = c - means that X[i] has label 0 <= c < C for C classes. - - learning_rate: (float) learning rate for optimization. - - reg: (float) regularization strength. - - num_iters: (integer) number of steps to take when optimizing - - batch_size: (integer) number of training examples to use at each step. - - verbose: (boolean) If true, print progress during optimization. - - Outputs: - A list containing the value of the loss function at each training iteration. - """ - num_train, dim = X.shape - num_classes = np.max(y) + 1 # assume y takes values 0...K-1 where K is number of classes - if self.W is None: - # lazily initialize W - self.W = 0.001 * np.random.randn(dim, num_classes) - - # Run stochastic gradient descent to optimize W - loss_history = [] - for it in range(num_iters): - X_batch = None - y_batch = None - - ######################################################################### - # TODO: # - # Sample batch_size elements from the training data and their # - # corresponding labels to use in this round of gradient descent. # - # Store the data in X_batch and their corresponding labels in # - # y_batch; after sampling X_batch should have shape (batch_size, dim) # - # and y_batch should have shape (batch_size,) # - # # - # Hint: Use np.random.choice to generate indices. Sampling with # - # replacement is faster than sampling without replacement. # - ######################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - # evaluate loss and gradient - loss, grad = self.loss(X_batch, y_batch, reg) - loss_history.append(loss) - - # perform parameter update - ######################################################################### - # TODO: # - # Update the weights using the gradient and the learning rate. # - ######################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - if verbose and it % 100 == 0: - print('iteration %d / %d: loss %f' % (it, num_iters, loss)) - - return loss_history - - def predict(self, X): - """ - Use the trained weights of this linear classifier to predict labels for - data points. - - Inputs: - - X: A numpy array of shape (N, D) containing training data; there are N - training samples each of dimension D. - - Returns: - - y_pred: Predicted labels for the data in X. y_pred is a 1-dimensional - array of length N, and each element is an integer giving the predicted - class. - """ - y_pred = np.zeros(X.shape[0]) - ########################################################################### - # TODO: # - # Implement this method. Store the predicted labels in y_pred. # - ########################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - return y_pred - - def loss(self, X_batch, y_batch, reg): - """ - Compute the loss function and its derivative. - Subclasses will override this. - - Inputs: - - X_batch: A numpy array of shape (N, D) containing a minibatch of N - data points; each point has dimension D. - - y_batch: A numpy array of shape (N,) containing labels for the minibatch. - - reg: (float) regularization strength. - - Returns: A tuple containing: - - loss as a single float - - gradient with respect to self.W; an array of the same shape as W - """ - pass - - -class LinearSVM(LinearClassifier): - """ A subclass that uses the Multiclass SVM loss function """ - - def loss(self, X_batch, y_batch, reg): - return svm_loss_vectorized(self.W, X_batch, y_batch, reg) - - -class Softmax(LinearClassifier): - """ A subclass that uses the Softmax + Cross-entropy loss function """ - - def loss(self, X_batch, y_batch, reg): - return softmax_loss_vectorized(self.W, X_batch, y_batch, reg) diff --git a/lab_1/scripts/classifiers/linear_svm.py b/lab_1/scripts/classifiers/linear_svm.py deleted file mode 100644 index 2e2c75b..0000000 --- a/lab_1/scripts/classifiers/linear_svm.py +++ /dev/null @@ -1,100 +0,0 @@ -from builtins import range -import numpy as np -from random import shuffle -from past.builtins import xrange - -def svm_loss_naive(W, X, y, reg): - """ - Structured SVM loss function, naive implementation (with loops). - - Inputs have dimension D, there are C classes, and we operate on minibatches - of N examples. - - Inputs: - - W: A numpy array of shape (D, C) containing weights. - - X: A numpy array of shape (N, D) containing a minibatch of data. - - y: A numpy array of shape (N,) containing training labels; y[i] = c means - that X[i] has label c, where 0 <= c < C. - - reg: (float) regularization strength - - Returns a tuple of: - - loss as single float - - gradient with respect to weights W; an array of same shape as W - """ - dW = np.zeros(W.shape) # initialize the gradient as zero - - # compute the loss and the gradient - num_classes = W.shape[1] - num_train = X.shape[0] - loss = 0.0 - for i in range(num_train): - scores = X[i].dot(W) - correct_class_score = scores[y[i]] - for j in range(num_classes): - if j == y[i]: - continue - margin = scores[j] - correct_class_score + 1 # note delta = 1 - if margin > 0: - loss += margin - - # Right now the loss is a sum over all training examples, but we want it - # to be an average instead so we divide by num_train. - loss /= num_train - - # Add regularization to the loss. - loss += reg * np.sum(W * W) - - ############################################################################# - # TODO: # - # Compute the gradient of the loss function and store it dW. # - # Rather than first computing the loss and then computing the derivative, # - # it may be simpler to compute the derivative at the same time that the # - # loss is being computed. As a result you may need to modify some of the # - # code above to compute the gradient. # - ############################################################################# - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - return loss, dW - - - -def svm_loss_vectorized(W, X, y, reg): - """ - Structured SVM loss function, vectorized implementation. - - Inputs and outputs are the same as svm_loss_naive. - """ - loss = 0.0 - dW = np.zeros(W.shape) # initialize the gradient as zero - - ############################################################################# - # TODO: # - # Implement a vectorized version of the structured SVM loss, storing the # - # result in loss. # - ############################################################################# - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - ############################################################################# - # TODO: # - # Implement a vectorized version of the gradient for the structured SVM # - # loss, storing the result in dW. # - # # - # Hint: Instead of computing the gradient from scratch, it may be easier # - # to reuse some of the intermediate values that you used to compute the # - # loss. # - ############################################################################# - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - return loss, dW diff --git a/lab_1/scripts/classifiers/neural_net.py b/lab_1/scripts/classifiers/neural_net.py deleted file mode 100644 index 780c3f5..0000000 --- a/lab_1/scripts/classifiers/neural_net.py +++ /dev/null @@ -1,225 +0,0 @@ -from __future__ import print_function - -from builtins import range -from builtins import object -import numpy as np -import matplotlib.pyplot as plt -from past.builtins import xrange - -class TwoLayerNet(object): - """ - A two-layer fully-connected neural network. The net has an input dimension of - N, a hidden layer dimension of H, and performs classification over C classes. - We train the network with a softmax loss function and L2 regularization on the - weight matrices. The network uses a ReLU nonlinearity after the first fully - connected layer. - - In other words, the network has the following architecture: - - input - fully connected layer - ReLU - fully connected layer - softmax - - The outputs of the second fully-connected layer are the scores for each class. - """ - - def __init__(self, input_size, hidden_size, output_size, std=1e-4): - """ - Initialize the model. Weights are initialized to small random values and - biases are initialized to zero. Weights and biases are stored in the - variable self.params, which is a dictionary with the following keys: - - W1: First layer weights; has shape (D, H) - b1: First layer biases; has shape (H,) - W2: Second layer weights; has shape (H, C) - b2: Second layer biases; has shape (C,) - - Inputs: - - input_size: The dimension D of the input data. - - hidden_size: The number of neurons H in the hidden layer. - - output_size: The number of classes C. - """ - self.params = {} - self.params['W1'] = std * np.random.randn(input_size, hidden_size) - self.params['b1'] = np.zeros(hidden_size) - self.params['W2'] = std * np.random.randn(hidden_size, output_size) - self.params['b2'] = np.zeros(output_size) - - def loss(self, X, y=None, reg=0.0): - """ - Compute the loss and gradients for a two layer fully connected neural - network. - - Inputs: - - X: Input data of shape (N, D). Each X[i] is a training sample. - - y: Vector of training labels. y[i] is the label for X[i], and each y[i] is - an integer in the range 0 <= y[i] < C. This parameter is optional; if it - is not passed then we only return scores, and if it is passed then we - instead return the loss and gradients. - - reg: Regularization strength. - - Returns: - If y is None, return a matrix scores of shape (N, C) where scores[i, c] is - the score for class c on input X[i]. - - If y is not None, instead return a tuple of: - - loss: Loss (data loss and regularization loss) for this batch of training - samples. - - grads: Dictionary mapping parameter names to gradients of those parameters - with respect to the loss function; has the same keys as self.params. - """ - # Unpack variables from the params dictionary - W1, b1 = self.params['W1'], self.params['b1'] - W2, b2 = self.params['W2'], self.params['b2'] - N, D = X.shape - - # Compute the forward pass - scores = None - ############################################################################# - # TODO: Perform the forward pass, computing the class scores for the input. # - # Store the result in the scores variable, which should be an array of # - # shape (N, C). # - ############################################################################# - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - # If the targets are not given then jump out, we're done - if y is None: - return scores - - # Compute the loss - loss = None - ############################################################################# - # TODO: Finish the forward pass, and compute the loss. This should include # - # both the data loss and L2 regularization for W1 and W2. Store the result # - # in the variable loss, which should be a scalar. Use the Softmax # - # classifier loss. # - ############################################################################# - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - # Backward pass: compute gradients - grads = {} - ############################################################################# - # TODO: Compute the backward pass, computing the derivatives of the weights # - # and biases. Store the results in the grads dictionary. For example, # - # grads['W1'] should store the gradient on W1, and be a matrix of same size # - ############################################################################# - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - return loss, grads - - def train(self, X, y, X_val, y_val, - learning_rate=1e-3, learning_rate_decay=0.95, - reg=5e-6, num_iters=100, - batch_size=200, verbose=False): - """ - Train this neural network using stochastic gradient descent. - - Inputs: - - X: A numpy array of shape (N, D) giving training data. - - y: A numpy array f shape (N,) giving training labels; y[i] = c means that - X[i] has label c, where 0 <= c < C. - - X_val: A numpy array of shape (N_val, D) giving validation data. - - y_val: A numpy array of shape (N_val,) giving validation labels. - - learning_rate: Scalar giving learning rate for optimization. - - learning_rate_decay: Scalar giving factor used to decay the learning rate - after each epoch. - - reg: Scalar giving regularization strength. - - num_iters: Number of steps to take when optimizing. - - batch_size: Number of training examples to use per step. - - verbose: boolean; if true print progress during optimization. - """ - num_train = X.shape[0] - iterations_per_epoch = max(num_train / batch_size, 1) - - # Use SGD to optimize the parameters in self.model - loss_history = [] - train_acc_history = [] - val_acc_history = [] - - for it in range(num_iters): - X_batch = None - y_batch = None - - ######################################################################### - # TODO: Create a random minibatch of training data and labels, storing # - # them in X_batch and y_batch respectively. # - ######################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - # Compute loss and gradients using the current minibatch - loss, grads = self.loss(X_batch, y=y_batch, reg=reg) - loss_history.append(loss) - - ######################################################################### - # TODO: Use the gradients in the grads dictionary to update the # - # parameters of the network (stored in the dictionary self.params) # - # using stochastic gradient descent. You'll need to use the gradients # - # stored in the grads dictionary defined above. # - ######################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - if verbose and it % 100 == 0: - print('iteration %d / %d: loss %f' % (it, num_iters, loss)) - - # Every epoch, check train and val accuracy and decay learning rate. - if it % iterations_per_epoch == 0: - # Check accuracy - train_acc = (self.predict(X_batch) == y_batch).mean() - val_acc = (self.predict(X_val) == y_val).mean() - train_acc_history.append(train_acc) - val_acc_history.append(val_acc) - - # Decay learning rate - learning_rate *= learning_rate_decay - - return { - 'loss_history': loss_history, - 'train_acc_history': train_acc_history, - 'val_acc_history': val_acc_history, - } - - def predict(self, X): - """ - Use the trained weights of this two-layer network to predict labels for - data points. For each data point we predict scores for each of the C - classes, and assign each data point to the class with the highest score. - - Inputs: - - X: A numpy array of shape (N, D) giving N D-dimensional data points to - classify. - - Returns: - - y_pred: A numpy array of shape (N,) giving predicted labels for each of - the elements of X. For all i, y_pred[i] = c means that X[i] is predicted - to have class c, where 0 <= c < C. - """ - y_pred = None - - ########################################################################### - # TODO: Implement this function; it should be VERY simple! # - ########################################################################### - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - return y_pred diff --git a/lab_1/scripts/classifiers/softmax.py b/lab_1/scripts/classifiers/softmax.py deleted file mode 100644 index 0ba87ea..0000000 --- a/lab_1/scripts/classifiers/softmax.py +++ /dev/null @@ -1,65 +0,0 @@ -from builtins import range -import numpy as np -from random import shuffle -from past.builtins import xrange - -def softmax_loss_naive(W, X, y, reg): - """ - Softmax loss function, naive implementation (with loops) - - Inputs have dimension D, there are C classes, and we operate on minibatches - of N examples. - - Inputs: - - W: A numpy array of shape (D, C) containing weights. - - X: A numpy array of shape (N, D) containing a minibatch of data. - - y: A numpy array of shape (N,) containing training labels; y[i] = c means - that X[i] has label c, where 0 <= c < C. - - reg: (float) regularization strength - - Returns a tuple of: - - loss as single float - - gradient with respect to weights W; an array of same shape as W - """ - # Initialize the loss and gradient to zero. - loss = 0.0 - dW = np.zeros_like(W) - - ############################################################################# - # TODO: Compute the softmax loss and its gradient using explicit loops. # - # Store the loss in loss and the gradient in dW. If you are not careful # - # here, it is easy to run into numeric instability. Don't forget the # - # regularization! # - ############################################################################# - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - return loss, dW - - -def softmax_loss_vectorized(W, X, y, reg): - """ - Softmax loss function, vectorized version. - - Inputs and outputs are the same as softmax_loss_naive. - """ - # Initialize the loss and gradient to zero. - loss = 0.0 - dW = np.zeros_like(W) - - ############################################################################# - # TODO: Compute the softmax loss and its gradient using no explicit loops. # - # Store the loss in loss and the gradient in dW. If you are not careful # - # here, it is easy to run into numeric instability. Don't forget the # - # regularization! # - ############################################################################# - # *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - pass - - # *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)***** - - return loss, dW diff --git a/lab_1/scripts/data_utils.py b/lab_1/scripts/data_utils.py deleted file mode 100644 index a0fd6a0..0000000 --- a/lab_1/scripts/data_utils.py +++ /dev/null @@ -1,262 +0,0 @@ -from __future__ import print_function - -from builtins import range -from six.moves import cPickle as pickle -import numpy as np -import os -from imageio import imread -import platform - -def load_pickle(f): - version = platform.python_version_tuple() - if version[0] == '2': - return pickle.load(f) - elif version[0] == '3': - return pickle.load(f, encoding='latin1') - raise ValueError("invalid python version: {}".format(version)) - -def load_CIFAR_batch(filename): - """ load single batch of cifar """ - with open(filename, 'rb') as f: - datadict = load_pickle(f) - X = datadict['data'] - Y = datadict['labels'] - X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype("float") - Y = np.array(Y) - return X, Y - -def load_CIFAR10(ROOT): - """ load all of cifar """ - xs = [] - ys = [] - for b in range(1,6): - f = os.path.join(ROOT, 'data_batch_%d' % (b, )) - X, Y = load_CIFAR_batch(f) - xs.append(X) - ys.append(Y) - Xtr = np.concatenate(xs) - Ytr = np.concatenate(ys) - del X, Y - Xte, Yte = load_CIFAR_batch(os.path.join(ROOT, 'test_batch')) - return Xtr, Ytr, Xte, Yte - - -def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000, - subtract_mean=True): - """ - Load the CIFAR-10 dataset from disk and perform preprocessing to prepare - it for classifiers. These are the same steps as we used for the SVM, but - condensed to a single function. - """ - # Load the raw CIFAR-10 data - cifar10_dir = 'cs231n/datasets/cifar-10-batches-py' - X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir) - - # Subsample the data - mask = list(range(num_training, num_training + num_validation)) - X_val = X_train[mask] - y_val = y_train[mask] - mask = list(range(num_training)) - X_train = X_train[mask] - y_train = y_train[mask] - mask = list(range(num_test)) - X_test = X_test[mask] - y_test = y_test[mask] - - # Normalize the data: subtract the mean image - if subtract_mean: - mean_image = np.mean(X_train, axis=0) - X_train -= mean_image - X_val -= mean_image - X_test -= mean_image - - # Transpose so that channels come first - X_train = X_train.transpose(0, 3, 1, 2).copy() - X_val = X_val.transpose(0, 3, 1, 2).copy() - X_test = X_test.transpose(0, 3, 1, 2).copy() - - # Package data into a dictionary - return { - 'X_train': X_train, 'y_train': y_train, - 'X_val': X_val, 'y_val': y_val, - 'X_test': X_test, 'y_test': y_test, - } - - -def load_tiny_imagenet(path, dtype=np.float32, subtract_mean=True): - """ - Load TinyImageNet. Each of TinyImageNet-100-A, TinyImageNet-100-B, and - TinyImageNet-200 have the same directory structure, so this can be used - to load any of them. - - Inputs: - - path: String giving path to the directory to load. - - dtype: numpy datatype used to load the data. - - subtract_mean: Whether to subtract the mean training image. - - Returns: A dictionary with the following entries: - - class_names: A list where class_names[i] is a list of strings giving the - WordNet names for class i in the loaded dataset. - - X_train: (N_tr, 3, 64, 64) array of training images - - y_train: (N_tr,) array of training labels - - X_val: (N_val, 3, 64, 64) array of validation images - - y_val: (N_val,) array of validation labels - - X_test: (N_test, 3, 64, 64) array of testing images. - - y_test: (N_test,) array of test labels; if test labels are not available - (such as in student code) then y_test will be None. - - mean_image: (3, 64, 64) array giving mean training image - """ - # First load wnids - with open(os.path.join(path, 'wnids.txt'), 'r') as f: - wnids = [x.strip() for x in f] - - # Map wnids to integer labels - wnid_to_label = {wnid: i for i, wnid in enumerate(wnids)} - - # Use words.txt to get names for each class - with open(os.path.join(path, 'words.txt'), 'r') as f: - wnid_to_words = dict(line.split('\t') for line in f) - for wnid, words in wnid_to_words.items(): - wnid_to_words[wnid] = [w.strip() for w in words.split(',')] - class_names = [wnid_to_words[wnid] for wnid in wnids] - - # Next load training data. - X_train = [] - y_train = [] - for i, wnid in enumerate(wnids): - if (i + 1) % 20 == 0: - print('loading training data for synset %d / %d' - % (i + 1, len(wnids))) - # To figure out the filenames we need to open the boxes file - boxes_file = os.path.join(path, 'train', wnid, '%s_boxes.txt' % wnid) - with open(boxes_file, 'r') as f: - filenames = [x.split('\t')[0] for x in f] - num_images = len(filenames) - - X_train_block = np.zeros((num_images, 3, 64, 64), dtype=dtype) - y_train_block = wnid_to_label[wnid] * \ - np.ones(num_images, dtype=np.int64) - for j, img_file in enumerate(filenames): - img_file = os.path.join(path, 'train', wnid, 'images', img_file) - img = imread(img_file) - if img.ndim == 2: - ## grayscale file - img.shape = (64, 64, 1) - X_train_block[j] = img.transpose(2, 0, 1) - X_train.append(X_train_block) - y_train.append(y_train_block) - - # We need to concatenate all training data - X_train = np.concatenate(X_train, axis=0) - y_train = np.concatenate(y_train, axis=0) - - # Next load validation data - with open(os.path.join(path, 'val', 'val_annotations.txt'), 'r') as f: - img_files = [] - val_wnids = [] - for line in f: - img_file, wnid = line.split('\t')[:2] - img_files.append(img_file) - val_wnids.append(wnid) - num_val = len(img_files) - y_val = np.array([wnid_to_label[wnid] for wnid in val_wnids]) - X_val = np.zeros((num_val, 3, 64, 64), dtype=dtype) - for i, img_file in enumerate(img_files): - img_file = os.path.join(path, 'val', 'images', img_file) - img = imread(img_file) - if img.ndim == 2: - img.shape = (64, 64, 1) - X_val[i] = img.transpose(2, 0, 1) - - # Next load test images - # Students won't have test labels, so we need to iterate over files in the - # images directory. - img_files = os.listdir(os.path.join(path, 'test', 'images')) - X_test = np.zeros((len(img_files), 3, 64, 64), dtype=dtype) - for i, img_file in enumerate(img_files): - img_file = os.path.join(path, 'test', 'images', img_file) - img = imread(img_file) - if img.ndim == 2: - img.shape = (64, 64, 1) - X_test[i] = img.transpose(2, 0, 1) - - y_test = None - y_test_file = os.path.join(path, 'test', 'test_annotations.txt') - if os.path.isfile(y_test_file): - with open(y_test_file, 'r') as f: - img_file_to_wnid = {} - for line in f: - line = line.split('\t') - img_file_to_wnid[line[0]] = line[1] - y_test = [wnid_to_label[img_file_to_wnid[img_file]] - for img_file in img_files] - y_test = np.array(y_test) - - mean_image = X_train.mean(axis=0) - if subtract_mean: - X_train -= mean_image[None] - X_val -= mean_image[None] - X_test -= mean_image[None] - - return { - 'class_names': class_names, - 'X_train': X_train, - 'y_train': y_train, - 'X_val': X_val, - 'y_val': y_val, - 'X_test': X_test, - 'y_test': y_test, - 'class_names': class_names, - 'mean_image': mean_image, - } - - -def load_models(models_dir): - """ - Load saved models from disk. This will attempt to unpickle all files in a - directory; any files that give errors on unpickling (such as README.txt) - will be skipped. - - Inputs: - - models_dir: String giving the path to a directory containing model files. - Each model file is a pickled dictionary with a 'model' field. - - Returns: - A dictionary mapping model file names to models. - """ - models = {} - for model_file in os.listdir(models_dir): - with open(os.path.join(models_dir, model_file), 'rb') as f: - try: - models[model_file] = load_pickle(f)['model'] - except pickle.UnpicklingError: - continue - return models - - -def load_imagenet_val(num=None): - """Load a handful of validation images from ImageNet. - - Inputs: - - num: Number of images to load (max of 25) - - Returns: - - X: numpy array with shape [num, 224, 224, 3] - - y: numpy array of integer image labels, shape [num] - - class_names: dict mapping integer label to class name - """ - imagenet_fn = 'cs231n/datasets/imagenet_val_25.npz' - if not os.path.isfile(imagenet_fn): - print('file %s not found' % imagenet_fn) - print('Run the following:') - print('cd cs231n/datasets') - print('bash get_imagenet_val.sh') - assert False, 'Need to download imagenet_val_25.npz' - f = np.load(imagenet_fn) - X = f['X'] - y = f['y'] - class_names = f['label_map'].item() - if num is not None: - X = X[:num] - y = y[:num] - return X, y, class_names diff --git a/lab_1/scripts/datasets/get_datasets.sh b/lab_1/scripts/datasets/get_datasets.sh deleted file mode 100644 index a3ec163..0000000 --- a/lab_1/scripts/datasets/get_datasets.sh +++ /dev/null @@ -1,4 +0,0 @@ -# Get CIFAR10 -wget http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz -O cifar-10-python.tar.gz -tar -xzvf cifar-10-python.tar.gz -rm cifar-10-python.tar.gz diff --git a/lab_1/scripts/gradient_check.py b/lab_1/scripts/gradient_check.py deleted file mode 100644 index e1189fc..0000000 --- a/lab_1/scripts/gradient_check.py +++ /dev/null @@ -1,129 +0,0 @@ -from __future__ import print_function -from builtins import range -from past.builtins import xrange - -import numpy as np -from random import randrange - -def eval_numerical_gradient(f, x, verbose=True, h=0.00001): - """ - a naive implementation of numerical gradient of f at x - - f should be a function that takes a single argument - - x is the point (numpy array) to evaluate the gradient at - """ - - fx = f(x) # evaluate function value at original point - grad = np.zeros_like(x) - # iterate over all indexes in x - it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite']) - while not it.finished: - - # evaluate function at x+h - ix = it.multi_index - oldval = x[ix] - x[ix] = oldval + h # increment by h - fxph = f(x) # evalute f(x + h) - x[ix] = oldval - h - fxmh = f(x) # evaluate f(x - h) - x[ix] = oldval # restore - - # compute the partial derivative with centered formula - grad[ix] = (fxph - fxmh) / (2 * h) # the slope - if verbose: - print(ix, grad[ix]) - it.iternext() # step to next dimension - - return grad - - -def eval_numerical_gradient_array(f, x, df, h=1e-5): - """ - Evaluate a numeric gradient for a function that accepts a numpy - array and returns a numpy array. - """ - grad = np.zeros_like(x) - it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite']) - while not it.finished: - ix = it.multi_index - - oldval = x[ix] - x[ix] = oldval + h - pos = f(x).copy() - x[ix] = oldval - h - neg = f(x).copy() - x[ix] = oldval - - grad[ix] = np.sum((pos - neg) * df) / (2 * h) - it.iternext() - return grad - - -def eval_numerical_gradient_blobs(f, inputs, output, h=1e-5): - """ - Compute numeric gradients for a function that operates on input - and output blobs. - - We assume that f accepts several input blobs as arguments, followed by a - blob where outputs will be written. For example, f might be called like: - - f(x, w, out) - - where x and w are input Blobs, and the result of f will be written to out. - - Inputs: - - f: function - - inputs: tuple of input blobs - - output: output blob - - h: step size - """ - numeric_diffs = [] - for input_blob in inputs: - diff = np.zeros_like(input_blob.diffs) - it = np.nditer(input_blob.vals, flags=['multi_index'], - op_flags=['readwrite']) - while not it.finished: - idx = it.multi_index - orig = input_blob.vals[idx] - - input_blob.vals[idx] = orig + h - f(*(inputs + (output,))) - pos = np.copy(output.vals) - input_blob.vals[idx] = orig - h - f(*(inputs + (output,))) - neg = np.copy(output.vals) - input_blob.vals[idx] = orig - - diff[idx] = np.sum((pos - neg) * output.diffs) / (2.0 * h) - - it.iternext() - numeric_diffs.append(diff) - return numeric_diffs - - -def eval_numerical_gradient_net(net, inputs, output, h=1e-5): - return eval_numerical_gradient_blobs(lambda *args: net.forward(), - inputs, output, h=h) - - -def grad_check_sparse(f, x, analytic_grad, num_checks=10, h=1e-5): - """ - sample a few random elements and only return numerical - in this dimensions. - """ - - for i in range(num_checks): - ix = tuple([randrange(m) for m in x.shape]) - - oldval = x[ix] - x[ix] = oldval + h # increment by h - fxph = f(x) # evaluate f(x + h) - x[ix] = oldval - h # increment by h - fxmh = f(x) # evaluate f(x - h) - x[ix] = oldval # reset - - grad_numerical = (fxph - fxmh) / (2 * h) - grad_analytic = analytic_grad[ix] - rel_error = (abs(grad_numerical - grad_analytic) / - (abs(grad_numerical) + abs(grad_analytic))) - print('numerical: %f analytic: %f, relative error: %e' - %(grad_numerical, grad_analytic, rel_error)) diff --git a/lab_1/scripts/vis_utils.py b/lab_1/scripts/vis_utils.py deleted file mode 100644 index 0aa42c0..0000000 --- a/lab_1/scripts/vis_utils.py +++ /dev/null @@ -1,73 +0,0 @@ -from builtins import range -from past.builtins import xrange - -from math import sqrt, ceil -import numpy as np - -def visualize_grid(Xs, ubound=255.0, padding=1): - """ - Reshape a 4D tensor of image data to a grid for easy visualization. - - Inputs: - - Xs: Data of shape (N, H, W, C) - - ubound: Output grid will have values scaled to the range [0, ubound] - - padding: The number of blank pixels between elements of the grid - """ - (N, H, W, C) = Xs.shape - grid_size = int(ceil(sqrt(N))) - grid_height = H * grid_size + padding * (grid_size - 1) - grid_width = W * grid_size + padding * (grid_size - 1) - grid = np.zeros((grid_height, grid_width, C)) - next_idx = 0 - y0, y1 = 0, H - for y in range(grid_size): - x0, x1 = 0, W - for x in range(grid_size): - if next_idx < N: - img = Xs[next_idx] - low, high = np.min(img), np.max(img) - grid[y0:y1, x0:x1] = ubound * (img - low) / (high - low) - # grid[y0:y1, x0:x1] = Xs[next_idx] - next_idx += 1 - x0 += W + padding - x1 += W + padding - y0 += H + padding - y1 += H + padding - # grid_max = np.max(grid) - # grid_min = np.min(grid) - # grid = ubound * (grid - grid_min) / (grid_max - grid_min) - return grid - -def vis_grid(Xs): - """ visualize a grid of images """ - (N, H, W, C) = Xs.shape - A = int(ceil(sqrt(N))) - G = np.ones((A*H+A, A*W+A, C), Xs.dtype) - G *= np.min(Xs) - n = 0 - for y in range(A): - for x in range(A): - if n < N: - G[y*H+y:(y+1)*H+y, x*W+x:(x+1)*W+x, :] = Xs[n,:,:,:] - n += 1 - # normalize to [0,1] - maxg = G.max() - ming = G.min() - G = (G - ming)/(maxg-ming) - return G - -def vis_nn(rows): - """ visualize array of arrays of images """ - N = len(rows) - D = len(rows[0]) - H,W,C = rows[0][0].shape - Xs = rows[0][0] - G = np.ones((N*H+N, D*W+D, C), Xs.dtype) - for y in range(N): - for x in range(D): - G[y*H+y:(y+1)*H+y, x*W+x:(x+1)*W+x, :] = rows[y][x] - # normalize to [0,1] - maxg = G.max() - ming = G.min() - G = (G - ming)/(maxg-ming) - return G