diff --git "a/week06/\320\232\320\276\320\277\320\270\321\217_\320\261\320\273\320\276\320\272\320\275\320\276\321\202\320\260_\"Untitled9_ipynb\".ipynb" "b/week06/\320\232\320\276\320\277\320\270\321\217_\320\261\320\273\320\276\320\272\320\275\320\276\321\202\320\260_\"Untitled9_ipynb\".ipynb" new file mode 100644 index 0000000..8aedeb3 --- /dev/null +++ "b/week06/\320\232\320\276\320\277\320\270\321\217_\320\261\320\273\320\276\320\272\320\275\320\276\321\202\320\260_\"Untitled9_ipynb\".ipynb" @@ -0,0 +1,2099 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "accelerator": "GPU", + "colab": { + "name": "Копия блокнота \"Untitled9.ipynb\"", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "7b27950e4bab453584ba0e43303d8cec": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_view_name": "OutputView", + "msg_id": "", + "_dom_classes": [], + "_model_name": "OutputModel", + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": "
" + }, + "metadata": {} + } + ], + "_view_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_view_count": null, + "_view_module_version": "1.0.0", + "layout": "IPY_MODEL_c2d60a55402d4fc8a6614298d6d749f6", + "_model_module": "@jupyter-widgets/output" + } + }, + "c2d60a55402d4fc8a6614298d6d749f6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "4b35e5dbc1a640cc82b2e70402444184": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "model_module_version": "1.0.0", + "state": { + "_view_name": "OutputView", + "msg_id": "", + "_dom_classes": [], + "_model_name": "OutputModel", + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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V1cXPH99fT0ulwun00lRUVGX55WXlzN48OBuv5+8vLxOf//rX//KW2+9RVVVFYqi0NLSQn19PQAVFRVhX+viiy/m3//+N6eeeir//ve/ufrqq7u9JiESRTK6QiTIwVnMv/3tb+zZs4elS5eyYcMGXn/9dYCw5cjxYLVaaWxsxG63B4+pCXIBcnJyqKio6LS/try8nNzcXADGjh3L888/z5dffsnZZ5/NHXfcAUBycjLz58/nww8/5Pnnn2fJkiXBT42FEEKIvjRo0CBeeukl1q1bF/zfpk2byM3NRa/Xc+utt7Jy5UreeOMNPv74Y9555x1V53333Xf58MMPWbJkCevXr+ejjz4C/L/TAx90l5SUdHleXl4e+/btC3lOs9nc6fd1qCqujvcW69at4+WXX+bpp5/mm2++Yd26daSkpATvKwYNGhT2taZPn86HH37Itm3b2LVrF2effbaq9y1EfyKBrhD9hM1mw2g0kpqaSkNDA88991yvv2ZBQQFjxozh2WefxeVysXHjRlavXq3quWPHjsVkMvHyyy/T1tbG2rVr+eijj7jgggtwuVz8+9//prm5Gb1ej8ViCX6avXr1avbu3YvP5yMlJQWtViuly0IIIRLiiiuu4Omnn6asrAzw70f94IMPAFizZg0//vgjHo+H5ORkdDpd8HdZdnZ2yEA1wGazYTAYyMjIwG6389RTTwW/ptFomDVrFo8//jiVlZV4PB42btyIy+Xioosu4ssvv2TlypW43W7q6+vZunUrAKNGjeK///0vdrudvXv38tZbb0V8bzabDa1WS2ZmJm63m+eee46Wlpbg1y+77DKeeeYZfvrpJ3w+H9u2bQtmewcNGsSxxx7LPffcw7nnnhsshRbiUCKBrhD9xM9//nOcTicnnXQSc+bMYfLkyX3yur///e/59ttvOfHEE3n66ae54IILMBgMUZ9nMBh44YUX+PTTTznppJMoLi7mySefZNiwYQAsX76cqVOnMn78eN544w1+97vfAbB3716uvfZaxo0bx5w5c7jiiiuCjaqEEEKIvnT11VczdepUrrvuOsaNG8fs2bP5/vvvAX/G9LbbbmPChAlccMEFTJo0iRkzZgSft2rVKk444QQeffTRLuedOXMm+fn5TJ48mQsvvJDjjz++09fvvfdejj76aC699FImTZrE73//e7xeL/n5+bz00kss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\n", + "text/plain": "
" + }, + "metadata": {} + } + ], + "_view_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_view_count": null, + "_view_module_version": "1.0.0", + "layout": "IPY_MODEL_e1b842c0be7f4b7a9f8750b64ad62e86", + "_model_module": "@jupyter-widgets/output" + } + }, + "e1b842c0be7f4b7a9f8750b64ad62e86": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + } + } + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "eqTVlZEBvDAZ" + }, + "source": [ + "Домашнее задание 2. \n", + "Лаврухина Юлиана, М04-006г." + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DLqUa76aAHIg", + "outputId": "6a3fddd6-e015-40d1-b5a2-56faf63384e6" + }, + "source": [ + "!apt install sox" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Reading package lists... Done\n", + "Building dependency tree \n", + "Reading state information... Done\n", + "The following package was automatically installed and is no longer required:\n", + " libnvidia-common-460\n", + "Use 'apt autoremove' to remove it.\n", + "The following additional packages will be installed:\n", + " libmagic-mgc libmagic1 libopencore-amrnb0 libopencore-amrwb0 libsox-fmt-alsa\n", + " libsox-fmt-base libsox3\n", + "Suggested packages:\n", + " file libsox-fmt-all\n", + "The following NEW packages will be installed:\n", + " libmagic-mgc libmagic1 libopencore-amrnb0 libopencore-amrwb0 libsox-fmt-alsa\n", + " libsox-fmt-base libsox3 sox\n", + "0 upgraded, 8 newly installed, 0 to remove and 37 not upgraded.\n", + "Need to get 760 kB of archives.\n", + "After this operation, 6,717 kB of additional disk space will be used.\n", + "Get:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libopencore-amrnb0 amd64 0.1.3-2.1 [92.0 kB]\n", + "Get:2 http://archive.ubuntu.com/ubuntu bionic/universe amd64 libopencore-amrwb0 amd64 0.1.3-2.1 [45.8 kB]\n", + "Get:3 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libmagic-mgc amd64 1:5.32-2ubuntu0.4 [184 kB]\n", + "Get:4 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libmagic1 amd64 1:5.32-2ubuntu0.4 [68.6 kB]\n", + "Get:5 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 libsox3 amd64 14.4.2-3ubuntu0.18.04.1 [226 kB]\n", + "Get:6 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 libsox-fmt-alsa amd64 14.4.2-3ubuntu0.18.04.1 [10.6 kB]\n", + "Get:7 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 libsox-fmt-base amd64 14.4.2-3ubuntu0.18.04.1 [32.1 kB]\n", + "Get:8 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 sox amd64 14.4.2-3ubuntu0.18.04.1 [101 kB]\n", + "Fetched 760 kB in 1s (744 kB/s)\n", + "Selecting previously unselected package libopencore-amrnb0:amd64.\n", + "(Reading database ... 155062 files and directories currently installed.)\n", + "Preparing to unpack .../0-libopencore-amrnb0_0.1.3-2.1_amd64.deb ...\n", + "Unpacking libopencore-amrnb0:amd64 (0.1.3-2.1) ...\n", + "Selecting previously unselected package libopencore-amrwb0:amd64.\n", + "Preparing to unpack .../1-libopencore-amrwb0_0.1.3-2.1_amd64.deb ...\n", + "Unpacking libopencore-amrwb0:amd64 (0.1.3-2.1) ...\n", + "Selecting previously unselected package libmagic-mgc.\n", + "Preparing to unpack .../2-libmagic-mgc_1%3a5.32-2ubuntu0.4_amd64.deb ...\n", + "Unpacking libmagic-mgc (1:5.32-2ubuntu0.4) ...\n", + "Selecting previously unselected package libmagic1:amd64.\n", + "Preparing to unpack .../3-libmagic1_1%3a5.32-2ubuntu0.4_amd64.deb ...\n", + "Unpacking libmagic1:amd64 (1:5.32-2ubuntu0.4) ...\n", + "Selecting previously unselected package libsox3:amd64.\n", + "Preparing to unpack .../4-libsox3_14.4.2-3ubuntu0.18.04.1_amd64.deb ...\n", + "Unpacking libsox3:amd64 (14.4.2-3ubuntu0.18.04.1) ...\n", + "Selecting previously unselected package libsox-fmt-alsa:amd64.\n", + "Preparing to unpack .../5-libsox-fmt-alsa_14.4.2-3ubuntu0.18.04.1_amd64.deb ...\n", + "Unpacking libsox-fmt-alsa:amd64 (14.4.2-3ubuntu0.18.04.1) ...\n", + "Selecting previously unselected package libsox-fmt-base:amd64.\n", + "Preparing to unpack .../6-libsox-fmt-base_14.4.2-3ubuntu0.18.04.1_amd64.deb ...\n", + "Unpacking libsox-fmt-base:amd64 (14.4.2-3ubuntu0.18.04.1) ...\n", + "Selecting previously unselected package sox.\n", + "Preparing to unpack .../7-sox_14.4.2-3ubuntu0.18.04.1_amd64.deb ...\n", + "Unpacking sox (14.4.2-3ubuntu0.18.04.1) ...\n", + "Setting up libmagic-mgc (1:5.32-2ubuntu0.4) ...\n", + "Setting up libmagic1:amd64 (1:5.32-2ubuntu0.4) ...\n", + "Setting up libopencore-amrnb0:amd64 (0.1.3-2.1) ...\n", + "Setting up libopencore-amrwb0:amd64 (0.1.3-2.1) ...\n", + "Setting up libsox3:amd64 (14.4.2-3ubuntu0.18.04.1) ...\n", + "Setting up libsox-fmt-base:amd64 (14.4.2-3ubuntu0.18.04.1) ...\n", + "Setting up libsox-fmt-alsa:amd64 (14.4.2-3ubuntu0.18.04.1) ...\n", + "Setting up sox (14.4.2-3ubuntu0.18.04.1) ...\n", + "Processing triggers for libc-bin (2.27-3ubuntu1.3) ...\n", + "/sbin/ldconfig.real: /usr/local/lib/python3.7/dist-packages/ideep4py/lib/libmkldnn.so.0 is not a symbolic link\n", + "\n", + "Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n", + "Processing triggers for mime-support (3.60ubuntu1) ...\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eX_UvnL9FOB2" + }, + "source": [ + "### Baseline commands recognition (2-5 points)\n", + "\n", + "We're now going to train a classifier to recognize voice. More specifically, we'll use the [Speech Commands Dataset] that contains around 30 different words with a few thousand voice records each." + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "FvHkw2rfY9k7", + "outputId": "d471d646-4a1e-4832-ac3f-c552d1f1979e" + }, + "source": [ + "import os\n", + "from IPython.display import display, Audio\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "import numpy as np\n", + "import librosa\n", + "import torch\n", + "from torch.utils.data import TensorDataset, DataLoader\n", + "\n", + "datadir = \"speech_commands\"\n", + "\n", + "!wget http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz -O speech_commands_v0.01.tar.gz\n", + "# alternative url: https://www.dropbox.com/s/j95n278g48bcbta/speech_commands_v0.01.tar.gz?dl=1\n", + "!mkdir {datadir} && tar -C {datadir} -xvzf speech_commands_v0.01.tar.gz 1> log\n", + "\n", + "samples_by_target = {\n", + " cls: [os.path.join(datadir, cls, name) for name in os.listdir(\"./speech_commands/{}\".format(cls))]\n", + " for cls in os.listdir(datadir)\n", + " if os.path.isdir(os.path.join(datadir, cls))\n", + "}\n", + "print('Classes:', ', '.join(sorted(samples_by_target.keys())[1:]))" + ], + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "--2021-10-28 15:06:15-- http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz\n", + "Resolving download.tensorflow.org (download.tensorflow.org)... 209.85.147.128, 2607:f8b0:4001:c06::80\n", + "Connecting to download.tensorflow.org (download.tensorflow.org)|209.85.147.128|:80... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 1489096277 (1.4G) [application/gzip]\n", + "Saving to: ‘speech_commands_v0.01.tar.gz’\n", + "\n", + "speech_commands_v0. 100%[===================>] 1.39G 131MB/s in 10s \n", + "\n", + "2021-10-28 15:06:26 (141 MB/s) - ‘speech_commands_v0.01.tar.gz’ saved [1489096277/1489096277]\n", + "\n", + "Classes: bed, bird, cat, dog, down, eight, five, four, go, happy, house, left, marvin, nine, no, off, on, one, right, seven, sheila, six, stop, three, tree, two, up, wow, yes, zero\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ME4cVShQ916w", + "outputId": "7c6dd8f2-9bda-4964-f0b9-c735bbcaa34b" + }, + "source": [ + "!sox --info speech_commands/bed/00176480_nohash_0.wav" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + "Input File : 'speech_commands/bed/00176480_nohash_0.wav'\n", + "Channels : 1\n", + "Sample Rate : 16000\n", + "Precision : 16-bit\n", + "Duration : 00:00:01.00 = 16000 samples ~ 75 CDDA sectors\n", + "File Size : 32.0k\n", + "Bit Rate : 256k\n", + "Sample Encoding: 16-bit Signed Integer PCM\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cvF5l-PCyd8z", + "outputId": "3d9856ce-5b49-4614-8635-884a646231ef" + }, + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from itertools import chain\n", + "from tqdm import tqdm\n", + "import joblib as jl\n", + "\n", + "classes = (\"left\", \"right\", \"up\", \"down\", \"stop\")\n", + "\n", + "def preprocess_sample(filepath, max_length=150):\n", + " amplitudes, sr = librosa.core.load(filepath)\n", + " spectrogram = librosa.feature.melspectrogram(amplitudes, sr=sr)[:, :max_length]\n", + " spectrogram = np.pad(spectrogram, [[0, 0], [0, max(0, max_length - spectrogram.shape[1])]], mode='constant')\n", + " target = classes.index(filepath.split(os.sep)[-2])\n", + " return np.float32(spectrogram), np.int64(target)\n", + "\n", + "all_files = chain(*(samples_by_target[cls] for cls in classes))\n", + "spectrograms_and_targets = jl.Parallel(n_jobs=-1)(tqdm(list(map(jl.delayed(preprocess_sample), all_files))))\n", + "X, y = map(np.stack, zip(*spectrograms_and_targets))\n", + "X = X.transpose([0, 2, 1]) # to [batch, time, channels]\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "100%|██████████| 11834/11834 [07:38<00:00, 25.78it/s]\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "IuKx0Y__szLP" + }, + "source": [ + "X_train = np.expand_dims(X_train, axis=1)\n", + "X_test = np.expand_dims(X_test, axis=1)" + ], + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "7Ol6sywTG_Y9" + }, + "source": [ + "device = 'cuda'\n", + "\n", + "batch_size = 16\n", + "\n", + "tensor_x = torch.Tensor(X_train)\n", + "tensor_y = torch.LongTensor(y_train)\n", + "\n", + "train_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "tensor_x = torch.Tensor(X_test) # transform to torch tensor\n", + "tensor_y = torch.LongTensor(y_test)\n", + "\n", + "test_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "\n", + "trainloader = DataLoader(train_dataset, batch_size=batch_size,\n", + " shuffle=True, num_workers=2)\n", + "testloader = DataLoader(test_dataset, batch_size=batch_size,\n", + " shuffle=False, num_workers=2)" + ], + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "-qr8t6wCF8vT" + }, + "source": [ + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "\n", + "class Net(nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " # TODO: define your layers here\n", + " self.conv1 = nn.Conv2d(1, 64, 5)\n", + " self.bn1 = nn.BatchNorm2d(64)\n", + " self.dropout1 = nn.Dropout(0.2)\n", + " self.conv2 = nn.Conv2d(64, 128, 5)\n", + " self.bn2 = nn.BatchNorm2d(128)\n", + " self.pool1 = nn.MaxPool2d(2)\n", + " self.conv3 = nn.Conv2d(128, 256, 5)\n", + " self.bn3 = nn.BatchNorm2d(256)\n", + " self.pool2 = nn.MaxPool2d(4)\n", + " self.conv4 = nn.Conv2d(256, 256, 5)\n", + " self.bn4 = nn.BatchNorm2d(256)\n", + " self.pool3 = nn.MaxPool2d(6)\n", + " self.flatten = nn.Flatten()\n", + " self.dense1 = nn.Linear(512, 256)\n", + " self.dense2 = nn.Linear(256, 5)\n", + "\n", + " def forward(self, x):\n", + " # TODO: apply your layers here\n", + " x = self.conv1(x)\n", + " x = self.bn1(x)\n", + " x = F.relu(x)\n", + " x = self.dropout1(x)\n", + " x = self.conv2(x)\n", + " x = self.bn2(x)\n", + " x = F.relu(x)\n", + " x = self.pool1(x)\n", + " x = self.conv3(x)\n", + " x = self.bn3(x)\n", + " x = F.relu(x)\n", + " x = self.pool2(x)\n", + " x = self.conv4(x)\n", + " x = self.bn4(x)\n", + " x = F.relu(x)\n", + " x = self.pool3(x)\n", + " x = self.flatten(x)\n", + " x = self.dense1(x)\n", + " x = F.relu(x)\n", + " x = self.dense2(x)\n", + " x = F.softmax(x)\n", + " return x\n", + "\n", + "\n", + "net = Net().to(device)" + ], + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "MCZ7MkvsF9gs" + }, + "source": [ + "import torch.optim as optim\n", + "\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)" + ], + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "xHwSAciLxRxy" + }, + "source": [ + "def get_acc(loader, model):\n", + " num_corr = 0\n", + " num_samp = 0\n", + " model.eval()\n", + " \n", + " with torch.no_grad():\n", + " for x, y in loader:\n", + " x = x.to(device)\n", + " y = y.to(device)\n", + " \n", + " scores = model(x)\n", + " _, predictions = scores.max(1)\n", + " num_corr += (predictions == y).sum()\n", + " num_samp += predictions.size(0)\n", + " \n", + " model.train()\n", + " return float(num_corr)/float(num_samp)*100" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "3B1FGBN-zFDI" + }, + "source": [ + "import seaborn as sn\n", + "sn.set()\n", + "from IPython.display import clear_output\n", + "\n", + "import time\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from tqdm.auto import trange\n", + "\n", + "from IPython import display\n", + "from ipywidgets import Output" + ], + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "_a5b5xnjzifp" + }, + "source": [ + "def plot_progress(losses, scores, disp):\n", + " with disp:\n", + " fig, ax = plt.subplots(1, 2, figsize=(16, 5))\n", + " ax[0].plot([i*100 for i in range(len(losses))], losses)\n", + " ax[1].plot([i*100 for i in range(len(scores))], scores)\n", + " ax[0].scatter([i*100 for i in range(len(losses))], losses, color='red')\n", + " ax[1].scatter([i*100 for i in range(len(scores))], scores, color='red')\n", + "\n", + "\n", + " ax[0].set(xlabel='samples', ylabel='loss',\n", + " title=f'Training loss')\n", + " ax[1].set(xlabel='samples', ylabel='accuracy',\n", + " title=f'Test accuracy')\n", + " clear_output(wait=True)\n", + " plt.show()\n", + " time.sleep(0.5)" + ], + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "7b27950e4bab453584ba0e43303d8cec", + "c2d60a55402d4fc8a6614298d6d749f6" + ] + }, + "id": "xR1uxQ-GGGLr", + "outputId": "8372742c-7992-4464-f9ca-29a2f9ca99fb" + }, + "source": [ + "losses = []\n", + "scores = []\n", + "out = Output()\n", + "display.display(out)\n", + "\n", + "for epoch in range(10): # loop over the dataset multiple times\n", + "\n", + " running_loss = 0.0\n", + " for i, data in enumerate(trainloader, 0):\n", + " # get the inputs; data is a list of [inputs, labels]\n", + " inputs, labels = data\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + "\n", + " # zero the parameter gradients\n", + " optimizer.zero_grad()\n", + "\n", + " # forward + backward + optimize\n", + " outputs = net(inputs)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # print statistics\n", + " running_loss += loss.item()\n", + " if i % 100 == 99: # print every 100 mini-batches\n", + " acc = get_acc(testloader, net)\n", + " print('[%d, %5d] loss: %.3f, accuracy: %.3f' %\n", + " (epoch + 1, i + 1, running_loss / 100, acc))\n", + " losses.append(running_loss / 100)\n", + " scores.append(acc)\n", + " plot_progress(losses, scores, out)\n", + " running_loss = 0.0\n", + "\n", + "print('Finished Training')" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7b27950e4bab453584ba0e43303d8cec", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at /pytorch/c10/core/TensorImpl.h:1156.)\n", + " return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)\n", + "/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:47: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[1, 100] loss: 1.601, accuracy: 30.990\n", + "[1, 200] loss: 1.581, accuracy: 31.734\n", + "[1, 300] loss: 1.583, accuracy: 30.483\n", + "[1, 400] loss: 1.575, accuracy: 35.147\n", + "[1, 500] loss: 1.558, accuracy: 35.417\n", + "[2, 100] loss: 1.543, accuracy: 35.384\n", + "[2, 200] loss: 1.537, accuracy: 37.884\n", + "[2, 300] loss: 1.526, accuracy: 43.393\n", + "[2, 400] loss: 1.519, accuracy: 37.513\n", + "[2, 500] loss: 1.495, accuracy: 46.570\n", + "[3, 100] loss: 1.471, accuracy: 50.389\n", + "[3, 200] loss: 1.470, accuracy: 48.935\n", + "[3, 300] loss: 1.482, accuracy: 45.150\n", + "[3, 400] loss: 1.471, accuracy: 50.693\n", + "[3, 500] loss: 1.463, accuracy: 54.883\n", + "[4, 100] loss: 1.465, accuracy: 51.301\n", + "[4, 200] loss: 1.421, accuracy: 50.693\n", + "[4, 300] loss: 1.404, accuracy: 58.398\n", + "[4, 400] loss: 1.397, accuracy: 58.128\n", + "[4, 500] loss: 1.400, accuracy: 55.154\n", + "[5, 100] loss: 1.366, accuracy: 64.988\n", + "[5, 200] loss: 1.366, accuracy: 59.311\n", + "[5, 300] loss: 1.360, accuracy: 51.571\n", + "[5, 400] loss: 1.351, accuracy: 63.434\n", + "[5, 500] loss: 1.328, accuracy: 70.328\n", + "[6, 100] loss: 1.315, accuracy: 62.183\n", + "[6, 200] loss: 1.264, accuracy: 75.228\n", + "[6, 300] loss: 1.267, accuracy: 60.088\n", + "[6, 400] loss: 1.238, accuracy: 74.011\n", + "[6, 500] loss: 1.233, accuracy: 72.592\n", + "[7, 100] loss: 1.225, accuracy: 66.509\n", + "[7, 200] loss: 1.243, accuracy: 72.018\n", + "[7, 300] loss: 1.188, accuracy: 78.675\n", + "[7, 400] loss: 1.184, accuracy: 75.194\n", + "[7, 500] loss: 1.169, accuracy: 70.260\n", + "[8, 100] loss: 1.143, accuracy: 76.276\n", + "[8, 200] loss: 1.147, accuracy: 69.855\n", + "[8, 300] loss: 1.134, accuracy: 79.520\n", + "[8, 400] loss: 1.137, accuracy: 75.262\n", + "[8, 500] loss: 1.126, accuracy: 78.574\n", + "[9, 100] loss: 1.118, accuracy: 74.721\n", + "[9, 200] loss: 1.132, accuracy: 80.433\n", + "[9, 300] loss: 1.097, accuracy: 80.230\n", + "[9, 400] loss: 1.097, accuracy: 78.202\n", + "[9, 500] loss: 1.117, accuracy: 82.325\n", + "[10, 100] loss: 1.090, accuracy: 81.007\n", + "[10, 200] loss: 1.092, accuracy: 84.420\n", + "[10, 300] loss: 1.076, accuracy: 81.108\n", + "[10, 400] loss: 1.121, accuracy: 82.359\n", + "[10, 500] loss: 1.071, accuracy: 83.035\n", + "Finished Training\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ojEuXjx5DlDW" + }, + "source": [ + "Train a model: finally, lets' build and train a classifier neural network. You can use any library you like. If in doubt, consult the model & training tips below." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hwgnOrZy1E8p" + }, + "source": [ + "__Training tips:__ here's what you can try:\n", + "* __Layers:__ 1d or 2d convolutions, perhaps with some batch normalization in between;\n", + "* __Architecture:__ VGG-like, residual, highway, densely-connected, MatchboxNet, Dilated convs - you name it :)\n", + "* __Batch size matters:__ smaller batches usually train slower but better. Try to find the one that suits you best.\n", + "* __Data augmentation:__ add background noise, faster/slower, change pitch;\n", + "* __Average checkpoints:__ you can make model more stable with [this simple technique (arxiv)](https://arxiv.org/abs/1803.05407)\n", + "* __For full scale stage:__ make sure you're not losing too much data due to max_length in the pre-processing stage!\n", + "\n", + "These are just recommendations. As long as your model works, you're not required to follow them." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YYw2BDft2sGG" + }, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_AC6O_qY2aNE" + }, + "source": [ + "Попробуем улучшить полученные результаты с помощью реализации densely-connected и сравним их." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "h5tz6hLB89qC" + }, + "source": [ + "class Dense_Block(nn.Module):\n", + " def __init__(self, in_channels):\n", + " super(Dense_Block, self).__init__()\n", + " self.relu = nn.ReLU(inplace = True)\n", + " self.bn = nn.BatchNorm2d(in_channels)\n", + "\n", + " self.conv1 = nn.Conv2d(in_channels = in_channels, out_channels = 32, kernel_size = 3, stride = 1, padding = 1)\n", + " self.conv2 = nn.Conv2d(in_channels = 32, out_channels = 32, kernel_size = 3, stride = 1, padding = 1)\n", + " self.conv3 = nn.Conv2d(in_channels = 64, out_channels = 32, kernel_size = 3, stride = 1, padding = 1)\n", + " self.conv4 = nn.Conv2d(in_channels = 96, out_channels = 32, kernel_size = 3, stride = 1, padding = 1)\n", + " self.conv5 = nn.Conv2d(in_channels = 128, out_channels = 32, kernel_size = 3, stride = 1, padding = 1)\n", + " \n", + " def forward(self, x):\n", + " bn = self.bn(x)\n", + " conv1 = self.relu(self.conv1(bn))\n", + " conv2 = self.relu(self.conv2(conv1))\n", + " # Concatenate in channel dimension\n", + " c2_dense = self.relu(torch.cat([conv1, conv2], 1))\n", + " conv3 = self.relu(self.conv3(c2_dense))\n", + " c3_dense = self.relu(torch.cat([conv1, conv2, conv3], 1))\n", + "\n", + " conv4 = self.relu(self.conv4(c3_dense))\n", + " c4_dense = self.relu(torch.cat([conv1, conv2, conv3, conv4], 1))\n", + "\n", + " conv5 = self.relu(self.conv5(c4_dense))\n", + " c5_dense = self.relu(torch.cat([conv1, conv2, conv3, conv4, conv5], 1))\n", + "\n", + " return c5_dense" + ], + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "UFH_vFr_9Q7x" + }, + "source": [ + "class Transition_Layer(nn.Module): \n", + " def __init__(self, in_channels, out_channels):\n", + " super(Transition_Layer, self).__init__() \n", + "\n", + " self.relu = nn.ReLU(inplace = True) \n", + " self.bn = nn.BatchNorm2d(num_features = out_channels) \n", + " self.conv = nn.Conv2d(in_channels = in_channels, out_channels = out_channels, kernel_size = 1, bias = False) \n", + " self.avg_pool = nn.AvgPool2d(kernel_size = 2, stride = 2, padding = 0) \n", + "\n", + " def forward(self, x): \n", + " bn = self.bn(self.relu(self.conv(x))) \n", + " out = self.avg_pool(bn) \n", + " return out\n", + "\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F" + ], + "execution_count": 14, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "kHvnt6nP9R6E" + }, + "source": [ + "class NetDense(nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " # TODO: define your layers here\n", + " self.conv1 = nn.Conv2d(1, 64, 5)\n", + " self.bn1 = nn.BatchNorm2d(64)\n", + " self.dropout1 = nn.Dropout(0.2)\n", + " self.conv2 = nn.Conv2d(64, 128, 5)\n", + " self.bn2 = nn.BatchNorm2d(128)\n", + " self.pool1 = nn.MaxPool2d(2)\n", + " # Make Dense Blocks \n", + " self.denseblock1 = self._make_dense_block(Dense_Block, 128) \n", + " self.denseblock2 = self._make_dense_block(Dense_Block, 160)\n", + " self.denseblock3 = self._make_dense_block(Dense_Block, 160)\n", + " # Make transition Layers \n", + " self.transitionLayer1 = self._make_transition_layer(Transition_Layer, in_channels = 160, out_channels = 128) \n", + " self.transitionLayer2 = self._make_transition_layer(Transition_Layer, in_channels = 128, out_channels = 128) \n", + " self.transitionLayer3 = self._make_transition_layer(Transition_Layer, in_channels = 128, out_channels = 128)\n", + " self.conv3 = nn.Conv2d(128, 256, 5)\n", + " self.bn3 = nn.BatchNorm2d(256)\n", + " self.pool2 = nn.MaxPool2d(3)\n", + " # self.conv4 = nn.Conv2d(256, 128, 5)\n", + " # self.bn4 = nn.BatchNorm2d(128)\n", + " # self.pool3 = nn.MaxPool2d(6)\n", + " self.flatten = nn.Flatten()\n", + " self.dense1 = nn.Linear(256, 64)\n", + " self.dense2 = nn.Linear(64, 5)\n", + "\n", + " def _make_dense_block(self, block, in_channels): \n", + " layers = [] \n", + " layers.append(block(in_channels)) \n", + " return nn.Sequential(*layers) \n", + " def _make_transition_layer(self, layer, in_channels, out_channels): \n", + " modules = [] \n", + " modules.append(layer(in_channels, out_channels)) \n", + " return nn.Sequential(*modules) \n", + "\n", + " def forward(self, x):\n", + " # TODO: apply your layers here\n", + " x = self.conv1(x)\n", + " x = self.bn1(x)\n", + " x = F.relu(x)\n", + " x = self.dropout1(x)\n", + " x = self.conv2(x)\n", + " x = self.bn2(x)\n", + " x = F.relu(x)\n", + " x = self.pool1(x)\n", + " x = self.denseblock1(x)\n", + " x = self.denseblock2(x)\n", + " x = self.denseblock3(x)\n", + " x = self.transitionLayer1(x)\n", + " x = self.transitionLayer2(x)\n", + " x = self.transitionLayer3(x)\n", + " x = self.conv3(x)\n", + " x = self.bn3(x)\n", + " x = F.relu(x)\n", + " x = self.pool2(x)\n", + " # x = self.conv4(x)\n", + " # x = self.bn4(x)\n", + " # x = F.relu(x)\n", + " # x = self.pool3(x)\n", + " x = self.flatten(x)\n", + " x = self.dense1(x)\n", + " x = F.relu(x)\n", + " x = self.dense2(x)\n", + " x = F.softmax(x)\n", + " return x" + ], + "execution_count": 15, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "ppSrSnZ09YSq" + }, + "source": [ + "net_dense = NetDense().to(device)" + ], + "execution_count": 16, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000, + "referenced_widgets": [ + "4b35e5dbc1a640cc82b2e70402444184", + "e1b842c0be7f4b7a9f8750b64ad62e86" + ] + }, + "id": "Iq6yi00m-FgE", + "outputId": "30125923-242c-4270-e583-9c4214607b2e" + }, + "source": [ + "losses = []\n", + "scores = []\n", + "out = Output()\n", + "display.display(out)\n", + "\n", + "criterion = nn.CrossEntropyLoss()\n", + "#optimizer = optim.Adam(net_dense.parameters(), lr=0.001)\n", + "optimizer = optim.SGD(net_dense.parameters(), lr=0.001, momentum=0.9)\n", + "scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.1)\n", + "\n", + "for epoch in range(10): # loop over the dataset multiple times\n", + " running_loss = 0.0\n", + " for i, data in tqdm(enumerate(trainloader, 0), total=len(trainloader)):\n", + " # get the inputs; data is a list of [inputs, labels]\n", + " inputs, labels = data\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + "\n", + " # zero the parameter gradients\n", + " optimizer.zero_grad()\n", + " \n", + " # forward + backward + optimize\n", + " outputs = net_dense(inputs)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # print statistics\n", + " running_loss += loss.item()\n", + " if i % 100 == 99: # print every 100 mini-batches\n", + " acc = get_acc(testloader, net_dense)\n", + " print('[%d, %5d] loss: %.3f, accuracy: %.3f' %\n", + " (epoch + 1, i + 1, running_loss / 100, acc))\n", + " losses.append(running_loss / 100)\n", + " scores.append(acc)\n", + " plot_progress(losses, scores, out)\n", + " running_loss = 0.0\n", + " scheduler.step()\n", + "\n", + "print('Finished Training')" + ], + "execution_count": 19, + "outputs": [ + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4b35e5dbc1a640cc82b2e70402444184", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + " 0%| | 0/555 [00:00 log\n", + "\n", + "samples_by_target = {\n", + " cls: [os.path.join(datadir, cls, name) for name in os.listdir(\"./speech_commands/{}\".format(cls)) if 'README.md' not in name]\n", + " for cls in os.listdir(datadir)\n", + " if os.path.isdir(os.path.join(datadir, cls))\n", + "}\n", + "classes = list(samples_by_target.keys())\n", + "print('Classes:', ', '.join(sorted(classes)))" + ], + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "/content\n", + "--2021-10-28 17:25:01-- http://download.tensorflow.org/data/speech_commands_v0.01.tar.gz\n", + "Resolving download.tensorflow.org (download.tensorflow.org)... 74.125.202.128, 2607:f8b0:4001:c06::80\n", + "Connecting to download.tensorflow.org (download.tensorflow.org)|74.125.202.128|:80... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 1489096277 (1.4G) [application/gzip]\n", + "Saving to: ‘speech_commands_v0.01.tar.gz’\n", + "\n", + "speech_commands_v0. 100%[===================>] 1.39G 227MB/s in 6.5s \n", + "\n", + "2021-10-28 17:25:08 (218 MB/s) - ‘speech_commands_v0.01.tar.gz’ saved [1489096277/1489096277]\n", + "\n", + "Classes: _background_noise_, bed, bird, cat, dog, down, eight, five, four, go, happy, house, left, marvin, nine, no, off, on, one, right, seven, sheila, six, stop, three, tree, two, up, wow, yes, zero\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NliIxpfn74JM", + "outputId": "03b4dab5-5bf5-41e2-bbcd-9977766ab4c0" + }, + "source": [ + "def pre_sample(filepath, max_length=160):\n", + " amplitudes, sr = librosa.core.load(filepath)\n", + " spectrogram = librosa.feature.melspectrogram(amplitudes, sr=sr)[:, :max_length]\n", + " spectrogram = np.pad(spectrogram, [[0, 0], [0, max(0, max_length - spectrogram.shape[1])]], mode='constant')\n", + " target = classes.index(filepath.split(os.sep)[-2])\n", + " return np.float32(spectrogram), np.int64(target)\n", + "\n", + "all_files = chain(*(samples_by_target[cls] for cls in classes))\n", + "\n", + "spectrograms_and_targets = jl.Parallel(n_jobs=-1)(tqdm(list(map(jl.delayed(preprocess_sample), all_files))))\n", + "X, y = map(np.stack, zip(*spectrograms_and_targets))\n", + "X = X.transpose([0, 2, 1]) # to [batch, time, channels]\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "100%|██████████| 64727/64727 [41:34<00:00, 25.95it/s]\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 232 + }, + "id": "ovbs6RGd8IGA", + "outputId": "01defae8-562a-4183-d04f-67aa306e2b7a" + }, + "source": [ + "X_train = np.expand_dims(X_train, axis=1)\n", + "X_test = np.expand_dims(X_test, axis=1)\n", + "\n", + "if torch.cuda.is_available:\n", + " device = 'cuda'\n", + "else:\n", + " device = 'cpu'\n", + "\n", + "batch_size = 16\n", + "\n", + "tensor_x = torch.Tensor(X_train)\n", + "tensor_y = torch.LongTensor(y_train)\n", + "\n", + "train_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "tensor_x = torch.Tensor(X_test) # transform to torch tensor\n", + "tensor_y = torch.LongTensor(y_test)\n", + "\n", + "test_dataset = TensorDataset(tensor_x, tensor_y)\n", + "\n", + "\n", + "trainloader = DataLoader(train_dataset, batch_size=batch_size,\n", + " shuffle=True, num_workers=2)\n", + "testloader = DataLoader(test_dataset, batch_size=batch_size,\n", + " shuffle=False, num_workers=2)" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "error", + "ename": "NameError", + "evalue": "ignored", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mX_train\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand_dims\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mX_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand_dims\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcuda\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_available\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mdevice\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'cuda'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'np' is not defined" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "KJEYCzxf8QCz" + }, + "source": [ + "class Net(nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " # TODO: define your layers here\n", + " self.conv1 = nn.Conv2d(1, 64, 5)\n", + " self.bn1 = nn.BatchNorm2d(64)\n", + " self.dropout1 = nn.Dropout(0.2)\n", + " self.conv2 = nn.Conv2d(64, 128, 5)\n", + " self.bn2 = nn.BatchNorm2d(128)\n", + " self.pool1 = nn.MaxPool2d(2)\n", + " self.conv3 = nn.Conv2d(128, 256, 5)\n", + " self.bn3 = nn.BatchNorm2d(256)\n", + " self.pool2 = nn.MaxPool2d(4)\n", + " self.conv4 = nn.Conv2d(256, 256, 5)\n", + " self.bn4 = nn.BatchNorm2d(256)\n", + " self.pool3 = nn.MaxPool2d(6)\n", + " self.flatten = nn.Flatten()\n", + " self.dense1 = nn.Linear(512, 256)\n", + " self.dense2 = nn.Linear(256, 31)\n", + "\n", + " def forward(self, x):\n", + " # TODO: apply your layers here\n", + " x = self.conv1(x)\n", + " x = self.bn1(x)\n", + " x = F.relu(x)\n", + " x = self.dropout1(x)\n", + " x = self.conv2(x)\n", + " x = self.bn2(x)\n", + " x = F.relu(x)\n", + " x = self.pool1(x)\n", + " x = self.conv3(x)\n", + " x = self.bn3(x)\n", + " x = F.relu(x)\n", + " x = self.pool2(x)\n", + " x = self.conv4(x)\n", + " x = self.bn4(x)\n", + " x = F.relu(x)\n", + " x = self.pool3(x)\n", + " x = self.flatten(x)\n", + " x = self.dense1(x)\n", + " x = F.relu(x)\n", + " x = self.dense2(x)\n", + " x = F.softmax(x)\n", + " return x\n", + "\n", + "\n", + "net = Net().to(device)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "VOL6qDs68YSw" + }, + "source": [ + "def get_acc(loader, model):\n", + " num_corr = 0\n", + " num_samp = 0\n", + " model.eval()\n", + " \n", + " with torch.no_grad():\n", + " for x, y in loader:\n", + " x = x.to(device)\n", + " y = y.to(device)\n", + " \n", + " scores = model(x)\n", + " _, predictions = scores.max(1)\n", + " num_corr += (predictions == y).sum()\n", + " num_samp += predictions.size(0)\n", + " \n", + " model.train()\n", + " return float(num_correct)/float(num_samples)*100" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "WOsGbf9U8nDn" + }, + "source": [ + "import seaborn as sn\n", + "sn.set()\n", + "from IPython.display import clear_output, display\n", + "\n", + "import time\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from tqdm.auto import trange\n", + "\n", + "from ipywidgets import Output\n", + "\n", + "def plot_progress(losses, scores, disp):\n", + " with disp:\n", + " fig, ax = plt.subplots(1, 2, figsize=(16, 5))\n", + " ax[0].plot([i*100 for i in range(len(losses))], losses)\n", + " ax[1].plot([i*100 for i in range(len(scores))], scores)\n", + " ax[0].scatter([i*100 for i in range(len(losses))], losses, color='red')\n", + " ax[1].scatter([i*100 for i in range(len(scores))], scores, color='red')\n", + "\n", + "\n", + " ax[0].set(xlabel='samples', ylabel='loss',\n", + " title=f'Training loss')\n", + " ax[1].set(xlabel='samples', ylabel='accuracy',\n", + " title=f'Test accuracy')\n", + " clear_output(wait=True)\n", + " plt.show()\n", + " time.sleep(1)" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "tWKxD3yF8u3B" + }, + "source": [ + "losses = []\n", + "scores = []\n", + "out = Output()\n", + "display.display(out)\n", + "\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)\n", + "\n", + "for epoch in range(10): # loop over the dataset multiple times\n", + "\n", + " running_loss = 0.0\n", + " for i, data in tqdm(enumerate(trainloader, 0), total=len(trainloader)):\n", + " # get the inputs; data is a list of [inputs, labels]\n", + " inputs, labels = data\n", + " inputs = inputs.to(device)\n", + " labels = labels.to(device)\n", + "\n", + " # zero the parameter gradients\n", + " optimizer.zero_grad()\n", + "\n", + " # forward + backward + optimize\n", + " outputs = net(inputs)\n", + " loss = criterion(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # print statistics\n", + " running_loss += loss.item()\n", + " if i % 100 == 99: # print every 100 mini-batches\n", + " acc = get_acc(testloader, net)\n", + " print('[%d, %5d] loss: %.3f, accuracy: %.3f' %\n", + " (epoch + 1, i + 1, running_loss / 100, acc))\n", + " losses.append(running_loss / 100)\n", + " scores.append(acc)\n", + " plot_progress(losses, scores, out)\n", + " running_loss = 0.0\n", + "\n", + "print('Finished Training')" + ], + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MD-mstXJF_1Z" + }, + "source": [ + "Память ОЗУ закончилась, поэтому дотренировать модель не получится. Требуются дополнительные ресурсы для дальнейшего исследования. И исходя из полученных результатов рассматривать модели далее." + ] + } + ] +} \ No newline at end of file