{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "gpuType": "T4"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "oVAASrxkGr4S",
        "outputId": "be445859-d825-4163-9ce9-512b3b5e12ed"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "CUDA available: True\n",
            "GPU: Tesla T4\n",
            "DEVICE: cuda\n"
          ]
        }
      ],
      "source": [
        "!pip -q install kaggle torchaudio soundfile\n",
        "\n",
        "import os\n",
        "import time\n",
        "import json\n",
        "import random\n",
        "from pathlib import Path\n",
        "\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "import torch\n",
        "import torch.nn as nn\n",
        "import torch.nn.functional as F\n",
        "from torch.utils.data import Dataset, DataLoader\n",
        "\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.metrics import f1_score, confusion_matrix, classification_report\n",
        "from sklearn.utils.class_weight import compute_class_weight\n",
        "\n",
        "import torchaudio\n",
        "\n",
        "print(\"CUDA available:\", torch.cuda.is_available())\n",
        "print(\"GPU:\", torch.cuda.get_device_name(0) if torch.cuda.is_available() else None)\n",
        "\n",
        "SEED = 2026\n",
        "random.seed(SEED)\n",
        "np.random.seed(SEED)\n",
        "torch.manual_seed(SEED)\n",
        "torch.cuda.manual_seed_all(SEED)\n",
        "\n",
        "DEVICE = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
        "print(\"DEVICE:\", DEVICE)"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from google.colab import files\n",
        "\n",
        "uploaded = files.upload()\n",
        "\n",
        "!mkdir -p ~/.kaggle\n",
        "!cp kaggle.json ~/.kaggle/\n",
        "!chmod 600 ~/.kaggle/kaggle.json\n",
        "\n",
        "!rm -rf /content/speech_commands\n",
        "!mkdir -p /content/speech_commands\n",
        "\n",
        "!kaggle datasets download -d yashdogra/speech-commands -p /content --force\n",
        "!unzip -q /content/speech-commands.zip -d /content/speech_commands\n",
        "\n",
        "!find /content/speech_commands -maxdepth 2 -type d | head -n 50"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 845
        },
        "id": "I-YL4BDCH56P",
        "outputId": "5969be89-991f-4e6e-d9cf-48e0ce7191f2"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "     <input type=\"file\" id=\"files-393f6e49-26f3-4f2b-9bef-5ca50ea657bc\" name=\"files[]\" multiple disabled\n",
              "        style=\"border:none\" />\n",
              "     <output id=\"result-393f6e49-26f3-4f2b-9bef-5ca50ea657bc\">\n",
              "      Upload widget is only available when the cell has been executed in the\n",
              "      current browser session. Please rerun this cell to enable.\n",
              "      </output>\n",
              "      <script>// Copyright 2017 Google LLC\n",
              "//\n",
              "// Licensed under the Apache License, Version 2.0 (the \"License\");\n",
              "// you may not use this file except in compliance with the License.\n",
              "// You may obtain a copy of the License at\n",
              "//\n",
              "//      http://www.apache.org/licenses/LICENSE-2.0\n",
              "//\n",
              "// Unless required by applicable law or agreed to in writing, software\n",
              "// distributed under the License is distributed on an \"AS IS\" BASIS,\n",
              "// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
              "// See the License for the specific language governing permissions and\n",
              "// limitations under the License.\n",
              "\n",
              "/**\n",
              " * @fileoverview Helpers for google.colab Python module.\n",
              " */\n",
              "(function(scope) {\n",
              "function span(text, styleAttributes = {}) {\n",
              "  const element = document.createElement('span');\n",
              "  element.textContent = text;\n",
              "  for (const key of Object.keys(styleAttributes)) {\n",
              "    element.style[key] = styleAttributes[key];\n",
              "  }\n",
              "  return element;\n",
              "}\n",
              "\n",
              "// Max number of bytes which will be uploaded at a time.\n",
              "const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
              "\n",
              "function _uploadFiles(inputId, outputId) {\n",
              "  const steps = uploadFilesStep(inputId, outputId);\n",
              "  const outputElement = document.getElementById(outputId);\n",
              "  // Cache steps on the outputElement to make it available for the next call\n",
              "  // to uploadFilesContinue from Python.\n",
              "  outputElement.steps = steps;\n",
              "\n",
              "  return _uploadFilesContinue(outputId);\n",
              "}\n",
              "\n",
              "// This is roughly an async generator (not supported in the browser yet),\n",
              "// where there are multiple asynchronous steps and the Python side is going\n",
              "// to poll for completion of each step.\n",
              "// This uses a Promise to block the python side on completion of each step,\n",
              "// then passes the result of the previous step as the input to the next step.\n",
              "function _uploadFilesContinue(outputId) {\n",
              "  const outputElement = document.getElementById(outputId);\n",
              "  const steps = outputElement.steps;\n",
              "\n",
              "  const next = steps.next(outputElement.lastPromiseValue);\n",
              "  return Promise.resolve(next.value.promise).then((value) => {\n",
              "    // Cache the last promise value to make it available to the next\n",
              "    // step of the generator.\n",
              "    outputElement.lastPromiseValue = value;\n",
              "    return next.value.response;\n",
              "  });\n",
              "}\n",
              "\n",
              "/**\n",
              " * Generator function which is called between each async step of the upload\n",
              " * process.\n",
              " * @param {string} inputId Element ID of the input file picker element.\n",
              " * @param {string} outputId Element ID of the output display.\n",
              " * @return {!Iterable<!Object>} Iterable of next steps.\n",
              " */\n",
              "function* uploadFilesStep(inputId, outputId) {\n",
              "  const inputElement = document.getElementById(inputId);\n",
              "  inputElement.disabled = false;\n",
              "\n",
              "  const outputElement = document.getElementById(outputId);\n",
              "  outputElement.innerHTML = '';\n",
              "\n",
              "  const pickedPromise = new Promise((resolve) => {\n",
              "    inputElement.addEventListener('change', (e) => {\n",
              "      resolve(e.target.files);\n",
              "    });\n",
              "  });\n",
              "\n",
              "  const cancel = document.createElement('button');\n",
              "  inputElement.parentElement.appendChild(cancel);\n",
              "  cancel.textContent = 'Cancel upload';\n",
              "  const cancelPromise = new Promise((resolve) => {\n",
              "    cancel.onclick = () => {\n",
              "      resolve(null);\n",
              "    };\n",
              "  });\n",
              "\n",
              "  // Wait for the user to pick the files.\n",
              "  const files = yield {\n",
              "    promise: Promise.race([pickedPromise, cancelPromise]),\n",
              "    response: {\n",
              "      action: 'starting',\n",
              "    }\n",
              "  };\n",
              "\n",
              "  cancel.remove();\n",
              "\n",
              "  // Disable the input element since further picks are not allowed.\n",
              "  inputElement.disabled = true;\n",
              "\n",
              "  if (!files) {\n",
              "    return {\n",
              "      response: {\n",
              "        action: 'complete',\n",
              "      }\n",
              "    };\n",
              "  }\n",
              "\n",
              "  for (const file of files) {\n",
              "    const li = document.createElement('li');\n",
              "    li.append(span(file.name, {fontWeight: 'bold'}));\n",
              "    li.append(span(\n",
              "        `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
              "        `last modified: ${\n",
              "            file.lastModifiedDate ? file.lastModifiedDate.toLocaleDateString() :\n",
              "                                    'n/a'} - `));\n",
              "    const percent = span('0% done');\n",
              "    li.appendChild(percent);\n",
              "\n",
              "    outputElement.appendChild(li);\n",
              "\n",
              "    const fileDataPromise = new Promise((resolve) => {\n",
              "      const reader = new FileReader();\n",
              "      reader.onload = (e) => {\n",
              "        resolve(e.target.result);\n",
              "      };\n",
              "      reader.readAsArrayBuffer(file);\n",
              "    });\n",
              "    // Wait for the data to be ready.\n",
              "    let fileData = yield {\n",
              "      promise: fileDataPromise,\n",
              "      response: {\n",
              "        action: 'continue',\n",
              "      }\n",
              "    };\n",
              "\n",
              "    // Use a chunked sending to avoid message size limits. See b/62115660.\n",
              "    let position = 0;\n",
              "    do {\n",
              "      const length = Math.min(fileData.byteLength - position, MAX_PAYLOAD_SIZE);\n",
              "      const chunk = new Uint8Array(fileData, position, length);\n",
              "      position += length;\n",
              "\n",
              "      const base64 = btoa(String.fromCharCode.apply(null, chunk));\n",
              "      yield {\n",
              "        response: {\n",
              "          action: 'append',\n",
              "          file: file.name,\n",
              "          data: base64,\n",
              "        },\n",
              "      };\n",
              "\n",
              "      let percentDone = fileData.byteLength === 0 ?\n",
              "          100 :\n",
              "          Math.round((position / fileData.byteLength) * 100);\n",
              "      percent.textContent = `${percentDone}% done`;\n",
              "\n",
              "    } while (position < fileData.byteLength);\n",
              "  }\n",
              "\n",
              "  // All done.\n",
              "  yield {\n",
              "    response: {\n",
              "      action: 'complete',\n",
              "    }\n",
              "  };\n",
              "}\n",
              "\n",
              "scope.google = scope.google || {};\n",
              "scope.google.colab = scope.google.colab || {};\n",
              "scope.google.colab._files = {\n",
              "  _uploadFiles,\n",
              "  _uploadFilesContinue,\n",
              "};\n",
              "})(self);\n",
              "</script> "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saving kaggle.json to kaggle.json\n",
            "Dataset URL: https://www.kaggle.com/datasets/yashdogra/speech-commands\n",
            "License(s): CC-BY-NC-SA-4.0\n",
            "Downloading speech-commands.zip to /content\n",
            "100% 2.25G/2.25G [00:15<00:00, 153MB/s]\n",
            "\n",
            "/content/speech_commands\n",
            "/content/speech_commands/happy\n",
            "/content/speech_commands/on\n",
            "/content/speech_commands/backward\n",
            "/content/speech_commands/bed\n",
            "/content/speech_commands/zero\n",
            "/content/speech_commands/two\n",
            "/content/speech_commands/up\n",
            "/content/speech_commands/visual\n",
            "/content/speech_commands/follow\n",
            "/content/speech_commands/eight\n",
            "/content/speech_commands/six\n",
            "/content/speech_commands/stop\n",
            "/content/speech_commands/right\n",
            "/content/speech_commands/wow\n",
            "/content/speech_commands/three\n",
            "/content/speech_commands/sheila\n",
            "/content/speech_commands/one\n",
            "/content/speech_commands/left\n",
            "/content/speech_commands/off\n",
            "/content/speech_commands/bird\n",
            "/content/speech_commands/five\n",
            "/content/speech_commands/dog\n",
            "/content/speech_commands/forward\n",
            "/content/speech_commands/nine\n",
            "/content/speech_commands/learn\n",
            "/content/speech_commands/_background_noise_\n",
            "/content/speech_commands/house\n",
            "/content/speech_commands/yes\n",
            "/content/speech_commands/cat\n",
            "/content/speech_commands/no\n",
            "/content/speech_commands/four\n",
            "/content/speech_commands/seven\n",
            "/content/speech_commands/tree\n",
            "/content/speech_commands/marvin\n",
            "/content/speech_commands/down\n",
            "/content/speech_commands/go\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "ROOT = Path(\"/content/speech_commands\")\n",
        "\n",
        "TARGET_WORDS = [\"yes\", \"no\", \"up\", \"down\", \"left\", \"right\", \"on\", \"off\", \"stop\", \"go\"]\n",
        "\n",
        "records = []\n",
        "\n",
        "for word in TARGET_WORDS:\n",
        "    word_dir = ROOT / word\n",
        "    if not word_dir.exists():\n",
        "        continue\n",
        "\n",
        "    for wav_path in word_dir.rglob(\"*.wav\"):\n",
        "        records.append({\n",
        "            \"path\": str(wav_path),\n",
        "            \"label\": word\n",
        "        })\n",
        "\n",
        "df = pd.DataFrame(records)\n",
        "\n",
        "print(\"Всего файлов:\", len(df))\n",
        "print(df[\"label\"].value_counts())\n",
        "display(df.head())"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 443
        },
        "id": "vtoajBenI7_-",
        "outputId": "753fe01d-bd2a-415a-c193-1637f6280105"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Всего файлов: 38546\n",
            "label\n",
            "yes      4044\n",
            "no       3941\n",
            "down     3917\n",
            "go       3880\n",
            "stop     3872\n",
            "on       3845\n",
            "left     3801\n",
            "right    3778\n",
            "off      3745\n",
            "up       3723\n",
            "Name: count, dtype: int64\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "                                                path label\n",
              "0  /content/speech_commands/yes/91b03183_nohash_3...   yes\n",
              "1  /content/speech_commands/yes/b76f6088_nohash_0...   yes\n",
              "2  /content/speech_commands/yes/c39703ec_nohash_4...   yes\n",
              "3  /content/speech_commands/yes/2197f41c_nohash_2...   yes\n",
              "4  /content/speech_commands/yes/616420be_nohash_0...   yes"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-a4b3dfbc-266b-4297-819a-cc2cc0fc69a0\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>path</th>\n",
              "      <th>label</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>/content/speech_commands/yes/91b03183_nohash_3...</td>\n",
              "      <td>yes</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>/content/speech_commands/yes/b76f6088_nohash_0...</td>\n",
              "      <td>yes</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>/content/speech_commands/yes/c39703ec_nohash_4...</td>\n",
              "      <td>yes</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>/content/speech_commands/yes/2197f41c_nohash_2...</td>\n",
              "      <td>yes</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>/content/speech_commands/yes/616420be_nohash_0...</td>\n",
              "      <td>yes</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-a4b3dfbc-266b-4297-819a-cc2cc0fc69a0')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-a4b3dfbc-266b-4297-819a-cc2cc0fc69a0 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-a4b3dfbc-266b-4297-819a-cc2cc0fc69a0');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"display(df\",\n  \"rows\": 5,\n  \"fields\": [\n    {\n      \"column\": \"path\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 5,\n        \"samples\": [\n          \"/content/speech_commands/yes/b76f6088_nohash_0.wav\",\n          \"/content/speech_commands/yes/616420be_nohash_0.wav\",\n          \"/content/speech_commands/yes/c39703ec_nohash_4.wav\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"label\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 1,\n        \"samples\": [\n          \"yes\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "classes = sorted(df[\"label\"].unique().tolist())\n",
        "class_to_idx = {c: i for i, c in enumerate(classes)}\n",
        "idx_to_class = {i: c for c, i in class_to_idx.items()}\n",
        "\n",
        "train_val_df, test_df = train_test_split(\n",
        "    df,\n",
        "    test_size=0.15,\n",
        "    random_state=SEED,\n",
        "    stratify=df[\"label\"]\n",
        ")\n",
        "\n",
        "train_df, val_df = train_test_split(\n",
        "    train_val_df,\n",
        "    test_size=0.1765,\n",
        "    random_state=SEED,\n",
        "    stratify=train_val_df[\"label\"]\n",
        ")\n",
        "\n",
        "print(\"Train:\", len(train_df))\n",
        "print(\"Val  :\", len(val_df))\n",
        "print(\"Test :\", len(test_df))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "0H-OCsZWI-PU",
        "outputId": "cdb61ede-80f9-4f3b-f07d-34de8f024b60"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Train: 26981\n",
            "Val  : 5783\n",
            "Test : 5782\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "SAMPLE_RATE = 16000\n",
        "MAX_SEC = 1.0\n",
        "TARGET_LEN = int(SAMPLE_RATE * MAX_SEC)\n",
        "\n",
        "N_MELS = 64\n",
        "N_FFT = 640\n",
        "HOP_LENGTH = 160\n",
        "\n",
        "BATCH_SIZE = 64\n",
        "\n",
        "class SpeechCommandsDataset(Dataset):\n",
        "    def __init__(self, df, train=False):\n",
        "        self.df = df.reset_index(drop=True)\n",
        "        self.train = train\n",
        "\n",
        "        self.mel = torchaudio.transforms.MelSpectrogram(\n",
        "            sample_rate=SAMPLE_RATE,\n",
        "            n_fft=N_FFT,\n",
        "            hop_length=HOP_LENGTH,\n",
        "            n_mels=N_MELS\n",
        "        )\n",
        "        self.db = torchaudio.transforms.AmplitudeToDB()\n",
        "\n",
        "    def __len__(self):\n",
        "        return len(self.df)\n",
        "\n",
        "    def _fix_length(self, wav):\n",
        "        cur_len = wav.shape[1]\n",
        "        if cur_len > TARGET_LEN:\n",
        "            if self.train:\n",
        "                start = random.randint(0, cur_len - TARGET_LEN)\n",
        "            else:\n",
        "                start = (cur_len - TARGET_LEN) // 2\n",
        "            wav = wav[:, start:start + TARGET_LEN]\n",
        "        elif cur_len < TARGET_LEN:\n",
        "            pad = TARGET_LEN - cur_len\n",
        "            wav = F.pad(wav, (0, pad))\n",
        "        return wav\n",
        "\n",
        "    def _augment(self, wav):\n",
        "        if random.random() < 0.5:\n",
        "            wav = wav + 0.002 * torch.randn_like(wav)\n",
        "\n",
        "        if random.random() < 0.5:\n",
        "            gain = random.uniform(0.85, 1.15)\n",
        "            wav = wav * gain\n",
        "\n",
        "        if random.random() < 0.5:\n",
        "            shift = int(random.uniform(-0.1, 0.1) * TARGET_LEN)\n",
        "            wav = torch.roll(wav, shifts=shift, dims=1)\n",
        "\n",
        "        wav = wav.clamp(-1.0, 1.0)\n",
        "        return wav\n",
        "\n",
        "    def __getitem__(self, idx):\n",
        "        row = self.df.iloc[idx]\n",
        "        path = row[\"path\"]\n",
        "        label = class_to_idx[row[\"label\"]]\n",
        "\n",
        "        wav, sr = torchaudio.load(path)\n",
        "\n",
        "        if wav.shape[0] > 1:\n",
        "            wav = wav.mean(dim=0, keepdim=True)\n",
        "\n",
        "        if sr != SAMPLE_RATE:\n",
        "            wav = torchaudio.functional.resample(wav, sr, SAMPLE_RATE)\n",
        "\n",
        "        wav = self._fix_length(wav)\n",
        "\n",
        "        if self.train:\n",
        "            wav = self._augment(wav)\n",
        "\n",
        "        spec = self.mel(wav)\n",
        "        spec = self.db(spec)\n",
        "        spec = (spec - spec.mean()) / (spec.std() + 1e-6)\n",
        "\n",
        "        return spec, torch.tensor(label, dtype=torch.long)\n",
        "\n",
        "train_ds = SpeechCommandsDataset(train_df, train=True)\n",
        "val_ds   = SpeechCommandsDataset(val_df, train=False)\n",
        "test_ds  = SpeechCommandsDataset(test_df, train=False)\n",
        "\n",
        "train_loader = DataLoader(train_ds, batch_size=BATCH_SIZE, shuffle=True, num_workers=2, pin_memory=True)\n",
        "val_loader   = DataLoader(val_ds, batch_size=BATCH_SIZE, shuffle=False, num_workers=2, pin_memory=True)\n",
        "test_loader  = DataLoader(test_ds, batch_size=BATCH_SIZE, shuffle=False, num_workers=2, pin_memory=True)\n",
        "\n",
        "xb, yb = next(iter(train_loader))\n",
        "print(\"Batch X:\", xb.shape)\n",
        "print(\"Batch y:\", yb.shape)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "2phw0ce3I_2j",
        "outputId": "d9b4761c-0b8f-43eb-c0a9-3f40a153d55e"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Batch X: torch.Size([64, 1, 64, 101])\n",
            "Batch y: torch.Size([64])\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "class DSConvBlock(nn.Module):\n",
        "    def __init__(self, in_ch, out_ch, stride=1, p=0.2):\n",
        "        super().__init__()\n",
        "        self.block = nn.Sequential(\n",
        "            nn.Conv2d(in_ch, in_ch, kernel_size=3, stride=stride, padding=1, groups=in_ch, bias=False),\n",
        "            nn.BatchNorm2d(in_ch),\n",
        "            nn.ReLU(inplace=True),\n",
        "\n",
        "            nn.Conv2d(in_ch, out_ch, kernel_size=1, bias=False),\n",
        "            nn.BatchNorm2d(out_ch),\n",
        "            nn.ReLU(inplace=True),\n",
        "\n",
        "            nn.Dropout(p)\n",
        "        )\n",
        "\n",
        "    def forward(self, x):\n",
        "        return self.block(x)\n",
        "\n",
        "class DSCNNKeyword(nn.Module):\n",
        "    def __init__(self, num_classes):\n",
        "        super().__init__()\n",
        "\n",
        "        self.stem = nn.Sequential(\n",
        "            nn.Conv2d(1, 32, kernel_size=3, stride=2, padding=1, bias=False),\n",
        "            nn.BatchNorm2d(32),\n",
        "            nn.ReLU(inplace=True)\n",
        "        )\n",
        "\n",
        "        self.features = nn.Sequential(\n",
        "            DSConvBlock(32, 64, stride=1, p=0.15),\n",
        "            DSConvBlock(64, 64, stride=1, p=0.15),\n",
        "            DSConvBlock(64, 128, stride=2, p=0.20),\n",
        "            DSConvBlock(128, 128, stride=1, p=0.20),\n",
        "            DSConvBlock(128, 192, stride=2, p=0.25),\n",
        "        )\n",
        "\n",
        "        self.pool = nn.AdaptiveAvgPool2d((1, 1))\n",
        "        self.classifier = nn.Linear(192, num_classes)\n",
        "\n",
        "    def forward(self, x):\n",
        "        x = self.stem(x)\n",
        "        x = self.features(x)\n",
        "        x = self.pool(x)\n",
        "        x = torch.flatten(x, 1)\n",
        "        x = self.classifier(x)\n",
        "        return x\n",
        "\n",
        "model = DSCNNKeyword(num_classes=len(classes)).to(DEVICE)\n",
        "print(model)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "87vw6sbzJBdu",
        "outputId": "467586a8-d001-4e4d-e8b5-c362beda4cb1"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "DSCNNKeyword(\n",
            "  (stem): Sequential(\n",
            "    (0): Conv2d(1, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
            "    (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "    (2): ReLU(inplace=True)\n",
            "  )\n",
            "  (features): Sequential(\n",
            "    (0): DSConvBlock(\n",
            "      (block): Sequential(\n",
            "        (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=32, bias=False)\n",
            "        (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (2): ReLU(inplace=True)\n",
            "        (3): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
            "        (4): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (5): ReLU(inplace=True)\n",
            "        (6): Dropout(p=0.15, inplace=False)\n",
            "      )\n",
            "    )\n",
            "    (1): DSConvBlock(\n",
            "      (block): Sequential(\n",
            "        (0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=64, bias=False)\n",
            "        (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (2): ReLU(inplace=True)\n",
            "        (3): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
            "        (4): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (5): ReLU(inplace=True)\n",
            "        (6): Dropout(p=0.15, inplace=False)\n",
            "      )\n",
            "    )\n",
            "    (2): DSConvBlock(\n",
            "      (block): Sequential(\n",
            "        (0): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=64, bias=False)\n",
            "        (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (2): ReLU(inplace=True)\n",
            "        (3): Conv2d(64, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
            "        (4): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (5): ReLU(inplace=True)\n",
            "        (6): Dropout(p=0.2, inplace=False)\n",
            "      )\n",
            "    )\n",
            "    (3): DSConvBlock(\n",
            "      (block): Sequential(\n",
            "        (0): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=128, bias=False)\n",
            "        (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (2): ReLU(inplace=True)\n",
            "        (3): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
            "        (4): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (5): ReLU(inplace=True)\n",
            "        (6): Dropout(p=0.2, inplace=False)\n",
            "      )\n",
            "    )\n",
            "    (4): DSConvBlock(\n",
            "      (block): Sequential(\n",
            "        (0): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=128, bias=False)\n",
            "        (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (2): ReLU(inplace=True)\n",
            "        (3): Conv2d(128, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
            "        (4): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
            "        (5): ReLU(inplace=True)\n",
            "        (6): Dropout(p=0.25, inplace=False)\n",
            "      )\n",
            "    )\n",
            "  )\n",
            "  (pool): AdaptiveAvgPool2d(output_size=(1, 1))\n",
            "  (classifier): Linear(in_features=192, out_features=10, bias=True)\n",
            ")\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "class_weights = compute_class_weight(\n",
        "    class_weight=\"balanced\",\n",
        "    classes=np.unique(train_df[\"label\"]),\n",
        "    y=train_df[\"label\"]\n",
        ")\n",
        "\n",
        "class_weights = torch.tensor(\n",
        "    [class_weights[list(np.unique(train_df[\"label\"])).index(c)] for c in classes],\n",
        "    dtype=torch.float32,\n",
        "    device=DEVICE\n",
        ")\n",
        "\n",
        "criterion = nn.CrossEntropyLoss(weight=class_weights)\n",
        "\n",
        "optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-4)\n",
        "\n",
        "scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(\n",
        "    optimizer,\n",
        "    mode=\"min\",\n",
        "    factor=0.5,\n",
        "    patience=2,\n",
        "    min_lr=1e-6\n",
        ")"
      ],
      "metadata": {
        "id": "cBYanJ-aJDFi"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def train_one_epoch(model, loader, optimizer, criterion, device):\n",
        "    model.train()\n",
        "    total_loss = 0.0\n",
        "    n = 0\n",
        "\n",
        "    for xb, yb in loader:\n",
        "        xb = xb.to(device, non_blocking=True)\n",
        "        yb = yb.to(device, non_blocking=True)\n",
        "\n",
        "        optimizer.zero_grad(set_to_none=True)\n",
        "        logits = model(xb)\n",
        "        loss = criterion(logits, yb)\n",
        "        loss.backward()\n",
        "        optimizer.step()\n",
        "\n",
        "        bs = xb.size(0)\n",
        "        total_loss += loss.item() * bs\n",
        "        n += bs\n",
        "\n",
        "    return {\"loss\": total_loss / max(n, 1)}\n",
        "\n",
        "@torch.no_grad()\n",
        "def evaluate(model, loader, criterion, device):\n",
        "    model.eval()\n",
        "    total_loss = 0.0\n",
        "    n = 0\n",
        "    all_true = []\n",
        "    all_pred = []\n",
        "\n",
        "    for xb, yb in loader:\n",
        "        xb = xb.to(device, non_blocking=True)\n",
        "        yb = yb.to(device, non_blocking=True)\n",
        "\n",
        "        logits = model(xb)\n",
        "        loss = criterion(logits, yb)\n",
        "        preds = torch.argmax(logits, dim=1)\n",
        "\n",
        "        bs = xb.size(0)\n",
        "        total_loss += loss.item() * bs\n",
        "        n += bs\n",
        "\n",
        "        all_true.append(yb.cpu().numpy())\n",
        "        all_pred.append(preds.cpu().numpy())\n",
        "\n",
        "    y_true = np.concatenate(all_true)\n",
        "    y_pred = np.concatenate(all_pred)\n",
        "\n",
        "    acc = float((y_true == y_pred).mean())\n",
        "    f1m = float(f1_score(y_true, y_pred, average=\"macro\"))\n",
        "\n",
        "    return {\n",
        "        \"loss\": total_loss / max(n, 1),\n",
        "        \"acc\": acc,\n",
        "        \"f1_macro\": f1m\n",
        "    }, y_true, y_pred"
      ],
      "metadata": {
        "id": "gKF8KNOzJFXv"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "before_metrics, _, _ = evaluate(model, val_loader, criterion, DEVICE)\n",
        "print(\"BEFORE (val):\", before_metrics)\n",
        "\n",
        "t0 = time.time()\n",
        "train_metrics = train_one_epoch(model, train_loader, optimizer, criterion, DEVICE)\n",
        "epoch_time_sec = time.time() - t0\n",
        "\n",
        "after_metrics, _, _ = evaluate(model, val_loader, criterion, DEVICE)\n",
        "print(\"AFTER (val):\", after_metrics)\n",
        "print(\"TRAIN (1 epoch):\", train_metrics)\n",
        "print(f\"epoch_time_sec = {epoch_time_sec:.2f}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "iUqtJ_5FJG_z",
        "outputId": "67f71cc1-ded7-43be-c616-a503b57f8b46"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "BEFORE (val): {'loss': 2.3035750365187178, 'acc': 0.09856475877572195, 'f1_macro': 0.017944278293719505}\n",
            "AFTER (val): {'loss': 0.7472846978019517, 'acc': 0.7700155628566488, 'f1_macro': 0.7674290126098617}\n",
            "TRAIN (1 epoch): {'loss': 1.5558140017228919}\n",
            "epoch_time_sec = 105.73\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "EPOCHS = 15\n",
        "EARLY_PATIENCE = 4\n",
        "MIN_DELTA = 1e-4\n",
        "\n",
        "best_val_loss = float(\"inf\")\n",
        "bad_epochs = 0\n",
        "history = []\n",
        "\n",
        "for epoch in range(1, EPOCHS + 1):\n",
        "    t0 = time.time()\n",
        "\n",
        "    tr = train_one_epoch(model, train_loader, optimizer, criterion, DEVICE)\n",
        "    va, _, _ = evaluate(model, val_loader, criterion, DEVICE)\n",
        "\n",
        "    dt = time.time() - t0\n",
        "\n",
        "    old_lr = optimizer.param_groups[0][\"lr\"]\n",
        "    scheduler.step(va[\"loss\"])\n",
        "    new_lr = optimizer.param_groups[0][\"lr\"]\n",
        "\n",
        "    row = {\n",
        "        \"epoch\": epoch,\n",
        "        \"train_loss\": tr[\"loss\"],\n",
        "        \"val_loss\": va[\"loss\"],\n",
        "        \"val_acc\": va[\"acc\"],\n",
        "        \"val_f1_macro\": va[\"f1_macro\"],\n",
        "        \"epoch_time_sec\": dt,\n",
        "        \"lr\": new_lr\n",
        "    }\n",
        "    history.append(row)\n",
        "    print(row)\n",
        "\n",
        "    if va[\"loss\"] < best_val_loss - MIN_DELTA:\n",
        "        best_val_loss = va[\"loss\"]\n",
        "        bad_epochs = 0\n",
        "        torch.save(model.state_dict(), \"/content/best_model.pt\")\n",
        "    else:\n",
        "        bad_epochs += 1\n",
        "        if bad_epochs >= EARLY_PATIENCE:\n",
        "            print(f\"Early stopping on epoch {epoch}\")\n",
        "            break\n",
        "\n",
        "hist_df = pd.DataFrame(history)\n",
        "display(hist_df)\n",
        "hist_df.to_csv(\"/content/history.csv\", index=False)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 813
        },
        "id": "rdrx70aYJIsp",
        "outputId": "2bf5299f-ec1e-4aa3-c45a-8c55159f5ab1"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "{'epoch': 1, 'train_loss': 0.54165790500848, 'val_loss': 0.3802316094401302, 'val_acc': 0.8791284800276673, 'val_f1_macro': 0.8803598053170569, 'epoch_time_sec': 125.72501134872437, 'lr': 0.001}\n",
            "{'epoch': 2, 'train_loss': 0.3376250531992342, 'val_loss': 0.2817355597666467, 'val_acc': 0.9097354314369704, 'val_f1_macro': 0.9095960587175609, 'epoch_time_sec': 125.67888760566711, 'lr': 0.001}\n",
            "{'epoch': 3, 'train_loss': 0.2735869140962732, 'val_loss': 0.23123783477136425, 'val_acc': 0.925989970603493, 'val_f1_macro': 0.926203603802694, 'epoch_time_sec': 126.86943626403809, 'lr': 0.001}\n",
            "{'epoch': 4, 'train_loss': 0.23524234837211666, 'val_loss': 0.23467755541604798, 'val_acc': 0.9199377485734048, 'val_f1_macro': 0.9190224494812027, 'epoch_time_sec': 126.50081253051758, 'lr': 0.001}\n",
            "{'epoch': 5, 'train_loss': 0.20883983731300765, 'val_loss': 0.17192424694116443, 'val_acc': 0.943109112917171, 'val_f1_macro': 0.9431534164393025, 'epoch_time_sec': 125.00526809692383, 'lr': 0.001}\n",
            "{'epoch': 6, 'train_loss': 0.1890248302181843, 'val_loss': 0.20255492148479953, 'val_acc': 0.9332526370395988, 'val_f1_macro': 0.9328412605875813, 'epoch_time_sec': 126.03996300697327, 'lr': 0.001}\n",
            "{'epoch': 7, 'train_loss': 0.17567487263877443, 'val_loss': 0.16550702141340518, 'val_acc': 0.9446653985820508, 'val_f1_macro': 0.9443227459098853, 'epoch_time_sec': 124.26524090766907, 'lr': 0.001}\n",
            "{'epoch': 8, 'train_loss': 0.1675783196370776, 'val_loss': 0.1626789788671254, 'val_acc': 0.9465675255057928, 'val_f1_macro': 0.9465761627461248, 'epoch_time_sec': 124.51309990882874, 'lr': 0.001}\n",
            "{'epoch': 9, 'train_loss': 0.16395794444863374, 'val_loss': 0.13727379572493548, 'val_acc': 0.9541760332007608, 'val_f1_macro': 0.954107382327323, 'epoch_time_sec': 122.49712371826172, 'lr': 0.001}\n",
            "{'epoch': 10, 'train_loss': 0.15523318373036038, 'val_loss': 0.13826631853389487, 'val_acc': 0.9555593982362096, 'val_f1_macro': 0.9554682961980507, 'epoch_time_sec': 126.2336356639862, 'lr': 0.001}\n",
            "{'epoch': 11, 'train_loss': 0.149456773933437, 'val_loss': 0.12831123467369226, 'val_acc': 0.9565969220127961, 'val_f1_macro': 0.956498644106631, 'epoch_time_sec': 126.51519393920898, 'lr': 0.001}\n",
            "{'epoch': 12, 'train_loss': 0.1463408174949992, 'val_loss': 0.12786174322247051, 'val_acc': 0.9565969220127961, 'val_f1_macro': 0.9565347681242947, 'epoch_time_sec': 127.10176110267639, 'lr': 0.001}\n",
            "{'epoch': 13, 'train_loss': 0.13746349224134174, 'val_loss': 0.14712304759660477, 'val_acc': 0.9519280650181566, 'val_f1_macro': 0.9516766879051797, 'epoch_time_sec': 127.86359643936157, 'lr': 0.001}\n",
            "{'epoch': 14, 'train_loss': 0.13788782050867968, 'val_loss': 0.14092314136382847, 'val_acc': 0.9521009856475877, 'val_f1_macro': 0.9518285859188087, 'epoch_time_sec': 126.89708852767944, 'lr': 0.001}\n",
            "{'epoch': 15, 'train_loss': 0.13034789223719737, 'val_loss': 0.12227573588531714, 'val_acc': 0.9569427632716583, 'val_f1_macro': 0.9568379193524553, 'epoch_time_sec': 125.61846804618835, 'lr': 0.001}\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "    epoch  train_loss  val_loss   val_acc  val_f1_macro  epoch_time_sec     lr\n",
              "0       1    0.541658  0.380232  0.879128      0.880360      125.725011  0.001\n",
              "1       2    0.337625  0.281736  0.909735      0.909596      125.678888  0.001\n",
              "2       3    0.273587  0.231238  0.925990      0.926204      126.869436  0.001\n",
              "3       4    0.235242  0.234678  0.919938      0.919022      126.500813  0.001\n",
              "4       5    0.208840  0.171924  0.943109      0.943153      125.005268  0.001\n",
              "5       6    0.189025  0.202555  0.933253      0.932841      126.039963  0.001\n",
              "6       7    0.175675  0.165507  0.944665      0.944323      124.265241  0.001\n",
              "7       8    0.167578  0.162679  0.946568      0.946576      124.513100  0.001\n",
              "8       9    0.163958  0.137274  0.954176      0.954107      122.497124  0.001\n",
              "9      10    0.155233  0.138266  0.955559      0.955468      126.233636  0.001\n",
              "10     11    0.149457  0.128311  0.956597      0.956499      126.515194  0.001\n",
              "11     12    0.146341  0.127862  0.956597      0.956535      127.101761  0.001\n",
              "12     13    0.137463  0.147123  0.951928      0.951677      127.863596  0.001\n",
              "13     14    0.137888  0.140923  0.952101      0.951829      126.897089  0.001\n",
              "14     15    0.130348  0.122276  0.956943      0.956838      125.618468  0.001"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-3f093872-9dde-4317-9c63-ff72dfa0efb9\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>epoch</th>\n",
              "      <th>train_loss</th>\n",
              "      <th>val_loss</th>\n",
              "      <th>val_acc</th>\n",
              "      <th>val_f1_macro</th>\n",
              "      <th>epoch_time_sec</th>\n",
              "      <th>lr</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1</td>\n",
              "      <td>0.541658</td>\n",
              "      <td>0.380232</td>\n",
              "      <td>0.879128</td>\n",
              "      <td>0.880360</td>\n",
              "      <td>125.725011</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>2</td>\n",
              "      <td>0.337625</td>\n",
              "      <td>0.281736</td>\n",
              "      <td>0.909735</td>\n",
              "      <td>0.909596</td>\n",
              "      <td>125.678888</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>3</td>\n",
              "      <td>0.273587</td>\n",
              "      <td>0.231238</td>\n",
              "      <td>0.925990</td>\n",
              "      <td>0.926204</td>\n",
              "      <td>126.869436</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4</td>\n",
              "      <td>0.235242</td>\n",
              "      <td>0.234678</td>\n",
              "      <td>0.919938</td>\n",
              "      <td>0.919022</td>\n",
              "      <td>126.500813</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5</td>\n",
              "      <td>0.208840</td>\n",
              "      <td>0.171924</td>\n",
              "      <td>0.943109</td>\n",
              "      <td>0.943153</td>\n",
              "      <td>125.005268</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>6</td>\n",
              "      <td>0.189025</td>\n",
              "      <td>0.202555</td>\n",
              "      <td>0.933253</td>\n",
              "      <td>0.932841</td>\n",
              "      <td>126.039963</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>7</td>\n",
              "      <td>0.175675</td>\n",
              "      <td>0.165507</td>\n",
              "      <td>0.944665</td>\n",
              "      <td>0.944323</td>\n",
              "      <td>124.265241</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>8</td>\n",
              "      <td>0.167578</td>\n",
              "      <td>0.162679</td>\n",
              "      <td>0.946568</td>\n",
              "      <td>0.946576</td>\n",
              "      <td>124.513100</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>9</td>\n",
              "      <td>0.163958</td>\n",
              "      <td>0.137274</td>\n",
              "      <td>0.954176</td>\n",
              "      <td>0.954107</td>\n",
              "      <td>122.497124</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>10</td>\n",
              "      <td>0.155233</td>\n",
              "      <td>0.138266</td>\n",
              "      <td>0.955559</td>\n",
              "      <td>0.955468</td>\n",
              "      <td>126.233636</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>11</td>\n",
              "      <td>0.149457</td>\n",
              "      <td>0.128311</td>\n",
              "      <td>0.956597</td>\n",
              "      <td>0.956499</td>\n",
              "      <td>126.515194</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>12</td>\n",
              "      <td>0.146341</td>\n",
              "      <td>0.127862</td>\n",
              "      <td>0.956597</td>\n",
              "      <td>0.956535</td>\n",
              "      <td>127.101761</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>13</td>\n",
              "      <td>0.137463</td>\n",
              "      <td>0.147123</td>\n",
              "      <td>0.951928</td>\n",
              "      <td>0.951677</td>\n",
              "      <td>127.863596</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>14</td>\n",
              "      <td>0.137888</td>\n",
              "      <td>0.140923</td>\n",
              "      <td>0.952101</td>\n",
              "      <td>0.951829</td>\n",
              "      <td>126.897089</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>15</td>\n",
              "      <td>0.130348</td>\n",
              "      <td>0.122276</td>\n",
              "      <td>0.956943</td>\n",
              "      <td>0.956838</td>\n",
              "      <td>125.618468</td>\n",
              "      <td>0.001</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-3f093872-9dde-4317-9c63-ff72dfa0efb9')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-3f093872-9dde-4317-9c63-ff72dfa0efb9 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-3f093872-9dde-4317-9c63-ff72dfa0efb9');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "hist_df",
              "summary": "{\n  \"name\": \"hist_df\",\n  \"rows\": 15,\n  \"fields\": [\n    {\n      \"column\": \"epoch\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 4,\n        \"min\": 1,\n        \"max\": 15,\n        \"num_unique_values\": 15,\n        \"samples\": [\n          10,\n          12,\n          1\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"train_loss\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.10824183473245644,\n        \"min\": 0.13034789223719737,\n        \"max\": 0.54165790500848,\n        \"num_unique_values\": 15,\n        \"samples\": [\n          0.15523318373036038,\n          0.1463408174949992,\n          0.54165790500848\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"val_loss\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.07155811939904126,\n        \"min\": 0.12227573588531714,\n        \"max\": 0.3802316094401302,\n        \"num_unique_values\": 15,\n        \"samples\": [\n          0.13826631853389487,\n          0.12786174322247051,\n          0.3802316094401302\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"val_acc\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.02219613428152594,\n        \"min\": 0.8791284800276673,\n        \"max\": 0.9569427632716583,\n        \"num_unique_values\": 14,\n        \"samples\": [\n          0.9555593982362096,\n          0.9519280650181566,\n          0.8791284800276673\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"val_f1_macro\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.021979854491386668,\n        \"min\": 0.8803598053170569,\n        \"max\": 0.9568379193524553,\n        \"num_unique_values\": 15,\n        \"samples\": [\n          0.9554682961980507,\n          0.9565347681242947,\n          0.8803598053170569\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"epoch_time_sec\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 1.3402286990694847,\n        \"min\": 122.49712371826172,\n        \"max\": 127.86359643936157,\n        \"num_unique_values\": 15,\n        \"samples\": [\n          126.2336356639862,\n          127.10176110267639,\n          125.72501134872437\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"lr\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 4.489023471578431e-19,\n        \"min\": 0.001,\n        \"max\": 0.001,\n        \"num_unique_values\": 1,\n        \"samples\": [\n          0.001\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "model.load_state_dict(torch.load(\"/content/best_model.pt\", map_location=DEVICE))\n",
        "\n",
        "test_metrics, y_true, y_pred = evaluate(model, test_loader, criterion, DEVICE)\n",
        "\n",
        "print(\"\\n=== TEST METRICS ===\")\n",
        "print(test_metrics)\n",
        "\n",
        "cm = confusion_matrix(y_true, y_pred)\n",
        "print(\"\\n=== CONFUSION MATRIX ===\")\n",
        "print(cm)\n",
        "\n",
        "report = classification_report(\n",
        "    y_true,\n",
        "    y_pred,\n",
        "    target_names=[idx_to_class[i] for i in range(len(classes))]\n",
        ")\n",
        "print(\"\\n=== CLASSIFICATION REPORT ===\")\n",
        "print(report)\n",
        "\n",
        "with open(\"/content/test_metrics.json\", \"w\", encoding=\"utf-8\") as f:\n",
        "    json.dump(test_metrics, f, ensure_ascii=False, indent=2)\n",
        "\n",
        "with open(\"/content/classification_report.txt\", \"w\", encoding=\"utf-8\") as f:\n",
        "    f.write(report)\n",
        "\n",
        "np.save(\"/content/confusion_matrix.npy\", cm)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "VLvM9ryRJKUj",
        "outputId": "245edde8-fe96-4717-ce20-2cf4e176ce30"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "=== TEST METRICS ===\n",
            "{'loss': 0.13178188814831537, 'acc': 0.9555517122103079, 'f1_macro': 0.9556005989758095}\n",
            "\n",
            "=== CONFUSION MATRIX ===\n",
            "[[544  18   2  13   1   3   0   0   1   5]\n",
            " [  4 558   3  12   0   1   1   2   1   0]\n",
            " [  1   4 550   4   4   0   1   0   2   4]\n",
            " [  7   9   8 564   0   0   1   0   0   2]\n",
            " [  2   3   1   0 549   3   0   0   3   1]\n",
            " [  4   4   1   0  21 546   0   0   1   0]\n",
            " [  0   4   2   0   1   2 555   0   1   2]\n",
            " [  2   3  10   0   4   0   0 553   6   3]\n",
            " [  1   3   2   0  36   0   1   1 511   3]\n",
            " [  2   2   3   4   0   0   0   0   1 595]]\n",
            "\n",
            "=== CLASSIFICATION REPORT ===\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "        down       0.96      0.93      0.94       587\n",
            "          go       0.92      0.96      0.94       582\n",
            "        left       0.95      0.96      0.95       570\n",
            "          no       0.94      0.95      0.95       591\n",
            "         off       0.89      0.98      0.93       562\n",
            "          on       0.98      0.95      0.96       577\n",
            "       right       0.99      0.98      0.99       567\n",
            "        stop       0.99      0.95      0.97       581\n",
            "          up       0.97      0.92      0.94       558\n",
            "         yes       0.97      0.98      0.97       607\n",
            "\n",
            "    accuracy                           0.96      5782\n",
            "   macro avg       0.96      0.96      0.96      5782\n",
            "weighted avg       0.96      0.96      0.96      5782\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "plt.figure(figsize=(7,4))\n",
        "plt.plot(hist_df[\"epoch\"], hist_df[\"train_loss\"], label=\"train_loss\")\n",
        "plt.plot(hist_df[\"epoch\"], hist_df[\"val_loss\"], label=\"val_loss\")\n",
        "plt.xlabel(\"epoch\")\n",
        "plt.ylabel(\"loss\")\n",
        "plt.title(\"Loss dynamics\")\n",
        "plt.legend()\n",
        "plt.grid(True)\n",
        "plt.show()\n",
        "\n",
        "plt.figure(figsize=(7,4))\n",
        "plt.plot(hist_df[\"epoch\"], hist_df[\"val_acc\"], label=\"val_acc\")\n",
        "plt.plot(hist_df[\"epoch\"], hist_df[\"val_f1_macro\"], label=\"val_f1_macro\")\n",
        "plt.xlabel(\"epoch\")\n",
        "plt.ylabel(\"metric\")\n",
        "plt.title(\"Validation metrics dynamics\")\n",
        "plt.legend()\n",
        "plt.grid(True)\n",
        "plt.show()\n",
        "\n",
        "plt.figure(figsize=(7,4))\n",
        "plt.plot(hist_df[\"epoch\"], hist_df[\"lr\"], label=\"lr\")\n",
        "plt.xlabel(\"epoch\")\n",
        "plt.ylabel(\"learning rate\")\n",
        "plt.title(\"Learning rate schedule\")\n",
        "plt.legend()\n",
        "plt.grid(True)\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "f7N2YqOhJL-W",
        "outputId": "b063806a-3fb4-4715-c3a4-0738f1554674"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 700x400 with 1 Axes>"
            ],
            "image/png": "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5YfV3QWIiJSU1NRUAKZNm0bVqlULveft7V0omF0sX1/f89rPZrMVPDeZTIBzvJuISD71lIlIudWoUSO8vb3Zu3cvderUKfSoXr16wX5LliwpeH78+HG2bdtGw4YNAWjYsCELFy4sdNyFCxdSr149LBYLTZs2xeFwFBqjJiJyMdRTJiLlVmBgII8++igPP/wwDoeDzp07k5SUxMKFCwkKCqJmzZoAjBkzhvDwcKKionjmmWeIiIigf//+ADzyyCO0adOGF198kYEDB7J48WI++OADPvzwQwBiYmIYMmQId955J++99x7Nmzdnz549HDlyhAEDBrjr0kWkDFIoE5Fy7cUXXyQyMpKxY8eyc+dOQkJCaNmyJU8//XTB7cNXX32VBx98kO3bt9OiRQt+//13vLy8AGjZsiVTpkxh9OjRvPjii1SuXJkxY8YwdOjQgnNMmDCBp59+mhEjRnD06FFq1KjB008/7Y7LFZEyTN++FJEKK/+bkcePHyckJMTd5YhIBacxZSIiIiIeQKFMRERExAPo9qWIiIiIB1BPmYiIiIgHUCgTERER8QAKZSIiIiIeQKFMRERExAMolImIiIh4AIUyEREREQ+gUCYiIiLiARTKRERERDzA/wO4jls6vc32bgAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 700x400 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm4AAAGJCAYAAAAzAb+0AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAfUxJREFUeJzt3XlYVGX7wPHvmWGYAdlcWAQXFPcNF5TU0nIjKTUr99SwTCsz41em5m5Fm6aVpb5vapmWlmmLK5JaLqm55b6vqICoIPswc35/EPNKDIqIHJb7c11cOs8855z7uR3g9nnOoqiqqiKEEEIIIYo9ndYBCCGEEEKI/JHCTQghhBCihJDCTQghhBCihJDCTQghhBCihJDCTQghhBCihJDCTQghhBCihJDCTQghhBCihJDCTQghhBCihJDCTQghhBCihJDCTYhS5uzZsyiKwsKFC21tkydPRlGUfG2vKAqTJ08u1JgefvhhHn744ULdZ2mwcOFCFEXh7NmzmsZRmv59iktOhbhfpHATQkPdu3fH2dmZmzdv5tlnwIABODo6Eh8fX4SR3b3Dhw8zefLkMvsL8/PPP89RLAshxP0ghZsQGhowYACpqamsWLHC7vspKSn89NNPPProo1SsWLHAxxk/fjypqakF3j4/Dh8+zJQpU+wWbuvXr2f9+vX39fhaK0jhNnDgQFJTU6levfr9CaoMkpyK0k4KNyE01L17d1xdXVmyZInd93/66SeSk5MZMGDAPR3HwcEBk8l0T/u4F46Ojjg6Omp2/OImOTkZAL1ej8lkyvcytrgzyako7aRwE0JDTk5OPPnkk0RFRREbG5vr/SVLluDq6kr37t25du0ar7/+Oo0bN8bFxQU3Nze6du3K/v3773gce+e4paen89prr+Hp6Wk7xsWLF3Nte+7cOV566SXq1q2Lk5MTFStWpFevXjlm1hYuXEivXr0AeOSRR1AUBUVR2LRpE2D/HKrY2Fiee+45vL29MZlMBAYG8tVXX+Xok32+3kcffcS8efMICAjAaDTSsmVLdu3adcdxZ5/vtGXLFkaOHImnpyceHh4MGzaMjIwMbty4waBBgyhfvjzly5dn9OjRqKqaYx9Wq5WZM2fSsGFDTCYT3t7eDBs2jOvXr9v6+Pv7c+jQITZv3mwbe/Z4s2PYvHkzL730El5eXlSpUiXHe/+epVyzZg3t27fH1dUVNzc3WrZsmaO4P3HiBE899RQ+Pj6YTCaqVKlC3759SUhIuGNOsvPo5OREq1at+OOPP3K8n5SURLly5Xj11VdzbXvx4kX0ej0RERE54t+6dSvh4eF4enpSrlw5evbsSVxcXI5tf/rpJx577DF8fX0xGo0EBAQwbdo0LBZLjn4PP/wwjRo14u+//6Z9+/Y4OztTq1YtfvjhBwA2b95McHAwTk5O1K1blw0bNuTYXoucClGUHLQOQIiybsCAAXz11VcsW7aMESNG2NqvXbvGunXr6NevH05OThw6dIiVK1fSq1cvatSoQUxMDHPnzqV9+/YcPnwYX1/fuzru888/zzfffEP//v1p06YNv/32G4899liufrt27WLbtm307duXKlWqcPbsWb744gsefvhhDh8+jLOzM+3atWPkyJF88sknjBs3jvr16wPY/vy31NRUHn74YU6ePMmIESOoUaMG33//Pc8++yw3btzIVTQsWbKEmzdvMmzYMBRF4YMPPuDJJ5/k9OnTGAyGO471lVdewcfHhylTpvDnn38yb948PDw82LZtG9WqVePdd99l9erVfPjhhzRq1IhBgwbZth02bBgLFy4kLCyMkSNHcubMGT777DP27t3L1q1bMRgMzJw5k1deeQUXFxfeeustALy9vXPE8NJLL+Hp6cnEiRNtM272LFy4kCFDhtCwYUPGjh2Lh4cHe/fuZe3atfTv35+MjAxCQkJIT0+3jSs6Oppff/2VGzdu4O7unue+v/zyS4YNG0abNm0YNWoUp0+fpnv37lSoUIGqVasC4OLiQs+ePVm6dCkzZsxAr9fbtv/2229RVTXXDPArr7xC+fLlmTRpEmfPnmXmzJmMGDGCpUuX5hiXi4sL4eHhuLi48NtvvzFx4kQSExP58MMPc+zv+vXrPP744/Tt25devXrxxRdf0LdvXxYvXsyoUaMYPnw4/fv358MPP+Tpp5/mwoULuLq6apJTIYqcKoTQVGZmplq5cmW1devWOdrnzJmjAuq6detUVVXVtLQ01WKx5Ohz5swZ1Wg0qlOnTs3RBqgLFiywtU2aNEm99dt93759KqC+9NJLOfbXv39/FVAnTZpka0tJSckV8/bt21VA/frrr21t33//vQqoGzduzNW/ffv2avv27W2vZ86cqQLqN998Y2vLyMhQW7durbq4uKiJiYk5xlKx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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 700x400 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAogAAAGJCAYAAAAJ/cKCAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASCBJREFUeJzt3Xl8Tnfe//H3lX0hSWPJYg0yRaXWyoQuSkg7qblj1DZailJK76C0pcRSlaJaDJWaacXMFKVV01FUxlJTMlFbb3tpVbpIYmkEqWzX+f3hl2t65LpIVHKFvJ6Ph4fke77nnM/5SHn3bJfFMAxDAAAAwP/n4uwCAAAAULkQEAEAAGBCQAQAAIAJAREAAAAmBEQAAACYEBABAABgQkAEAACACQERAAAAJgREAAAAmBAQAVRZDRs21FNPPeXsMu5I27Ztk8Vi0QcffFDu+5o6daosFstNrZucnCyLxaJvv/321hYF3OYIiAB+leJ/YHfv3u3sUqqU3NxcTZ06Vdu2bXN2KQDuQG7OLgAAnOXYsWNycbk9/z85NzdX06ZNkyR16tTJucUAuOMQEAHcEQoLC2W1WuXh4VHqdTw9PcuxorK5mfoBoLzcnv/rDOC288MPP2jw4MEKCgqSp6en7rnnHr377rumOfn5+UpISFDbtm3l7+8vX19fPfDAA9q6datp3rfffiuLxaLXX39d8+bNU+PGjeXp6anDhw/b7kc7ceKEnnrqKQUEBMjf31+DBg1Sbm6uaTvX3oNYfLl8x44dGjt2rGrVqiVfX1/16NFDZ86cMa1rtVo1depUhYaGysfHRw8//LAOHz5cqvsar1d/aXrw7bffqlatWpKkadOmyWKxyGKxaOrUqbY5R48e1eOPP67AwEB5eXmpXbt2+vjjj2/0xyRJWrlypdq2bavq1avLz89PERERmj9/vmlOdna2xowZo4YNG8rT01N169bVgAEDdPbs2RJ9evXVV1W3bl15eXmpS5cuOnHiRIl9pqWl6ZFHHpG/v798fHz00EMPaceOHSXmff7557rvvvvk5eWlxo0b6+2333bY3+Tk5BLLru2TIxs2bNADDzwgX19fVa9eXbGxsTp06NAN1wPuFJxBBFDuMjMz9dvf/lYWi0WjRo1SrVq1tGHDBg0ZMkQ5OTkaPXq0JCknJ0d/+ctf1K9fPw0dOlQXL17UO++8o5iYGO3atUutWrUybXfp0qW6cuWKhg0bJk9PTwUGBtqW9e7dW2FhYUpMTNTevXv1l7/8RbVr19asWbNuWO9zzz2nu+66S1OmTNG3336refPmadSoUXr//fdtcyZMmKDZs2ere/fuiomJ0ZdffqmYmBhduXKl1H2xV39pelCrVi0tXrxYI0aMUI8ePfSHP/xBknTvvfdKkg4dOqSOHTuqTp06eumll+Tr66tVq1YpLi5OH374oXr06OGwppSUFPXr109dunSx9erIkSPasWOH4uPjJUmXLl3SAw88oCNHjmjw4MFq06aNzp49q48//ljff/+9atasadvea6+9JhcXF40bN04XLlzQ7Nmz1b9/f6WlpdnmbNmyRY8++qjatm2rKVOmyMXFRUuXLlXnzp3173//W+3bt5ckHThwQN26dVOtWrU0depUFRYWasqUKQoKCip1z0vjb3/7mwYOHKiYmBjNmjVLubm5Wrx4se6//37t27dPDRs2vKX7AyolAwB+haVLlxqSjC+++MLhnCFDhhghISHG2bNnTeN9+/Y1/P39jdzcXMMwDKOwsNDIy8szzfnpp5+MoKAgY/DgwbaxkydPGpIMPz8/IysryzR/ypQphiTTfMMwjB49ehg1atQwjTVo0MAYOHBgiWOJjo42rFarbXzMmDGGq6urkZ2dbRiGYWRkZBhubm5GXFycaXtTp041JJm2ac/16i9tD86cOWNIMqZMmVJi+126dDEiIiKMK1eu2MasVqvRoUMHIzw8/Lq1xcfHG35+fkZhYaHDOQkJCYYkY82aNSWWFfdt69athiSjWbNmpuOZP3++Ick4cOCAbX54eLgRExNj6nlubq4RFhZmdO3a1TYWFxdneHl5GadOnbKNHT582HB1dTV++c9ZcX+XLl1aor5re1b8Z37y5EnDMAzj4sWLRkBAgDF06FDTehkZGYa/v3+JceBOxSVmAOXKMAx9+OGH6t69uwzD0NmzZ22/YmJidOHCBe3du1eS5OrqarsHz2q16vz58yosLFS7du1sc36pZ8+etkut1xo+fLjp+wceeEDnzp1TTk7ODWseNmyY6bUpDzzwgIqKinTq1ClJ0ubNm1VYWKhnn33WtN5zzz13w23fqP6y9uBa58+f15YtW9S7d29dvHjR1utz584pJiZGx48f1w8//OBw/YCAAF2+fFkpKSkO53z44Ydq2bKl3TOR175uZtCgQab7Kh944AFJ0jfffCNJ2r9/v44fP64//vGPOnfunK3ey5cvq0uXLtq+fbusVquKior06aefKi4uTvXr17dtr1mzZoqJiblhX0orJSVF2dnZ6tevn+ln1dXVVZGRkSVudwDuVFxiBlCuzpw5o+zsbC1ZskRLliyxOycrK8v29bJlyzR37lwdPXpUBQUFtvGwsLAS69kbK/bLECFJd911lyTpp59+kp+f33Vrvt66kmxBsUmTJqZ5gYGBtrml4aj+svTgWidOnJBhGJo8ebImT55sd05WVpbq1Kljd9mzzz6rVatW6dFHH1WdOnXUrVs39e7dW4888ohtztdff62ePXvesBbpxr08fvy4JGngwIEOt3HhwgXl5eXp559/Vnh4eInld999t9avX1+qem6kuJ7OnTvbXX6jnx3gTkFABFCurFarJOmJJ55wGAKK7537+9//rqeeekpxcXEaP368ateuLVdXVyUmJurrr78usZ63t7fD/bq6utodNwzjhjX/mnXLwl79Ze3BtYr7PW7cOIdn1q4Ntr9Uu3Zt7d+/X59++qk2bNigDRs2aOnSpRowYICWLVtWyiP7rxv1srjeOXPmlLjHtFi1atWUl5dX6n06eml2UVHRDdctrudvf/ubgoODSyx3c+OfTVQN/KQDKFe1atVS9erVVVRUpOjo6OvO/eCDD9SoUSOtWbPG9I/8lClTyrvMMmnQoIGkq2frfnlW79y5c7YzYzertD1wFIIaNWokSXJ3d79hvx3x8PBQ9+7d1b17d1mtVj377LN6++23NXnyZDVp0kSNGzfWwYMHb2rb12rcuLGkq2fmrldvrVq15O3tbTvD90vHjh0zfV98ljI7O9s0XnzmtzT11K5d+6b7B9wJuAcRQLlydXVVz5499eGHH9oNFb98fUzx2aZfnqlLS0tTampq+RdaBl26dJGbm5sWL15sGl+4cOGv3nZpe+Dj4yOpZAiqXbu2OnXqpLffflunT58usf1rX9dzrXPnzpm+d3FxsZ3hLT6L17NnT3355Zf66KOPSqxf1rOsbdu2VePGjfX666/r0qVLDut1dXVVTEyM1q5dq/T0dNvyI0eO6NNPPzWt4+fnp5o1a2r79u2m8bfeeuuG9cTExMjPz08zZ840Xd6/th7gTscZRAC3xLvvvquNGzeWGI+Pj9drr72m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leHq6moKUK6uriosLJSXl9cdERBvldv7YjsAAABuOQIiAAAATAiIAAAAMKkUAXHRokVq2LChvLy8FBkZqV27dl13/urVq9W0aVN5eXkpIiJC69evNy03DEMJCQkKCQmRt7e3oqOjdfz4cdOcV199VR06dJCPj48CAgLs7ic9PV2xsbHy8fFR7dq1NX78eBUWFtqdu2PHDrm5ualVq1alPm4AAIDKyOkB8f3339fYsWM1ZcoU7d27Vy1btlRMTEyJx9CL7dy5U/369dOQIUO0b98+xcXFKS4uTgcPHrTNmT17thYsWKCkpCSlpaXJ19dXMTExunLlim1Ofn6+evXqpREjRtjdT1FRkWJjY5Wfn6+dO3dq2bJlSk5OVkJCQom52dnZGjBggLp06fIruwEAAOB8Tg+Ib7zxhoYOHapBgwapefPmSkpKko+Pj95991278+fPn69HHnlE48ePV7NmzfTKK6+oTZs2WrhwoaSrZw/nzZunSZMm6X/+539077336q9//at+/PFHrV271radadOmacyYMYqIiLC7n02bNunw4cP6+9//rlatWunRRx/VK6+8okWLFik/P980d/jw4frjH/+oqKioW9MUAAAAJ3Lqa27y8/O1Z88eTZgwwTbm4uKi6Ohopaam2l0nNTVVY8eONY3FxMTYwt/JkyeVkZGh6Oho23J/f39FRkYqNTVVffv2LVVtqampioiIUFBQkGk/I0aM0KFDh9S6dWtJ0tKlS/XNN9/o73//u2bMmHHdbebl5SkvL8/2fU5OjqSr72D65TuZ7lTFx1gVjrWs6I199MUxemMffXGM3thX1fpS2uN0akA8e/asioqKTCFMkoKCgnT06FG762RkZNidn5GRYVtePOZoTmk42s8v93H8+HG99NJL+ve//y03txu3MjExUdOmTSsxvmnTJvn4+JS6tttdSkqKs0uotOiNffTFMXpjH31xjN7YV1X6UtrPo+ZF2TepqKhIf/zjHzVt2jT95je/KdU6EyZMMJ39zMnJUb169dStWzf5+fmVV6mVRkFBgVJSUtS1a1deRnoNemMffXGM3thHXxyjN/ZVtb4UX728EacGxJo1a8rV1VWZmZmm8czMTIefIRgcHHzd+cW/Z2ZmKiQkxDSnLE8YBwcHl3iauni/wcHBunjxonbv3q19+/Zp1KhRkq5+4LdhGHJzc9OmTZvUuXNn0/qenp7y9PQssS93d/cq8UNZrKodb1nQG/voi2P0xj764hi9sa+q9KW0x+jUh1Q8PDzUtm1bbd682TZmtVq1efNmhw98REVFmeZLV08LF88PCwtTcHCwaU5OTo7S0tLK9BBJVFSUDhw4YHqaOiUlRX5+fmrevLn8/Px04MAB7d+/3/Zr+PDhuvvuu7V//35FRkaWel8AAACVidMvMY8dO1YDBw5Uu3bt1L59e82bN0+XL1/WoEGDJEkDBgxQnTp1lJiYKEmKj4/XQw89pLlz5yo2NlYrV67U7t27tWTJEklXP4x79OjRmjFjhsLDwxUWFqbJkycrNDRUcXFxtv2mp6fr/PnzSk9PV1FRkfbv3y9JatKkiapVq6Zu3bqpefPmevLJJzV79mxlZGRo0qRJGjlypO0sYIsWLUzHUrt2bXl5eZUYBwAAuJ04PSD26dNHZ86cUUJCgjIyMtSqVStt3LjR9kBIenq6XFz+e6KzQ4cOWr58uSZNmqSJEycqPDxca9euNYWyF154QZcvX9awYcOUnZ2t+++/Xxs3bpSXl5dtTkJCgpYtW2b7vvip5K1bt6pTp05ydXXVunXrNGLECEVFRcnX11cDBw7U9OnTy7slAAAATmUxDMNwdhFVVU5Ojvz9/XXhwoUq85DK+vXr9bvf/a5K3OdRFvTGPvriGL2xj744Rm/sq2p9KW32cPqLsgEAAFC5EBABAABgQkAEAACACQERAAAAJgREAAAAmBAQAQAAYEJABAAAgAkBEQAAACYERAAAAJgQEAEAAGBCQAQAAIAJAREAAAAmBEQAAACYEBABAABgQkAEAACACQERAAAAJgREAAAAmBAQAQAAYEJABAAAgAkBEQAAACYERAAAAJgQEAEAAGBCQAQAAIAJAREAAAAmBEQAAACYEBABAABgQkAEAACACQERAAAAJgREAAAAmBAQAQAAYEJABAAAgAkBEQAAACYERAAAAJgQEAEAAGBCQAQAAIAJAREAAAAmBEQAAACYEBABAABgQkAEAACACQERAAAAJgREAAAAmBAQAQAAYEJABAAAgAkBEQAAACYERAAAAJhUioC4aNEiNWzYUF5eXoqMjNSuXbuuO3/16tVq2rSpvLy8FBERofXr15uWG4ahhIQEhYSEyNvbW9HR0Tp+/LhpzquvvqoOHTrIx8dHAQEBdveTnp6u2NhY+fj4qHbt2ho/frwKCwtty9esWaOuXbuqVq1a8vPzU1RUlD799NObawIAAEAl4fSA+P7772vs2LGaMmWK9u7dq5YtWyomJkZZWVl25+/cuVP9+vXTkCFDtG/fPsXFxSkuLk4HDx60zZk9e7YWLFigpKQkpaWlydfXVzExMbpy5YptTn5+vnr16qURI0bY3U9RUZFiY2OVn5+vnTt3atmyZUpOTlZCQoJtzvbt29W1a1etX79ee/bs0cMPP6zu3btr3759t6g7AAAATmA4Wfv27Y2RI0favi8qKjJCQ0ONxMREu/N79+5txMbGmsYiIyONZ555xjAMw7BarUZwcLAxZ84c2/Ls7GzD09PTWLFiRYntLV261PD39y8xvn79esPFxcXIyMiwjS1evNjw8/Mz8vLyHB5P8+bNjWnTpjlc/ksXLlwwJBkXLlwo1fzbXX5+vrF27VojPz/f2aVUOvTGPvriGL2xj744Rm/sq2p9KW32cHNmOM3Pz9eePXs0YcIE25iLi4uio6OVmppqd53U1FSNHTvWNBYTE6O1a9dKkk6ePKmMjAxFR0fblvv7+ysyMlKpqanq27dvqWpLTU1VRESEgoKCTPsZMWKEDh06pNatW5dYx2q16uLFiwoMDLS7zby8POXl5dm+z8nJkSQVFBSooKCgVHXdzoqPsSoca1nRG/voi2P0xj764hi9sa+q9aW0x+nUgHj27FkVFRWZQpgkBQUF6ejRo3bXycjIsDs/IyPDtrx4zNGc0nC0n1/u41qvv/66Ll26pN69e9tdnpiYqGnTppUY37Rpk3x8fEpd2+0uJSXF2SVUWvTGPvriGL2xj744Rm/sqyp9yc3NLdU8pwbEO8ny5cs1bdo0/eMf/1Dt2rXtzpkwYYLp7GdOTo7q1aunbt26yc/Pr6JKdZqCggKlpKSoa9eucnd3d3Y5lQq9sY++OEZv7KMvjtEb+6paX4qvXt6IUwNizZo15erqqszMTNN4ZmamgoOD7a4THBx83fnFv2dmZiokJMQ0p1WrVqWuLTg4uMTT1MX7vba2lStX6umnn9bq1atNl7av5enpKU9PzxLj7u7uVeKHslhVO96yoDf20RfH6I199MUxemNfVelLaY/RqU8xe3h4qG3bttq8ebNtzGq1avPmzYqKirK7TlRUlGm+dPW0cPH8sLAwBQcHm+bk5OQoLS3N4TYd7efAgQOmp6lTUlLk5+en5s2b28ZWrFihQYMGacWKFYqNjS319gEAACorp19iHjt2rAYOHKh27dqpffv2mjdvni5fvqxBgwZJkgYMGKA6deooMTFRkhQfH6+HHnpIc+fOVWxsrFauXKndu3dryZIlkiSLxaLRo0drxowZCg8PV1hYmCZPnqzQ0FDFxcXZ9puenq7z588rPT1dRUVF2r9/vySpSZMmqlatmrp166bmzZvrySef1OzZs5WRkaFJkyZp5MiRtrOAy5cv18CBAzV//nxFRkba7k309vaWv79/BXUQAADg1nJ6QOzTp4/OnDmjhIQEZWRkqFWrVtq4caPtgZD09HS5uPz3RGeHDh20fPlyTZo0SRMnTlR4eLjWrl2rFi1a2Oa88MILunz5soYNG6bs7Gzdf//92rhxo7y8vGxzEhIStGzZMtv3xU8lb926VZ06dZKrq6vWrVunESNGKCoqSr6+vho4cKCmT59uW2fJkiUqLCzUyJEjNXLkSNv4wIEDlZycfMt7BQAAUBGcHhAladSoURo1apTdZdu2bSsx1qtXL/Xq1cvh9iwWi6ZPn24Kc9dKTk6+YYhr0KBBiU9puVFtAAAAtzunf5IKAAAAKhcCIgAAAEwIiAAAADAhIAIAAMCEgAgAAAATAiIAAABMbiog/vvf/9YTTzyhqKgo/fDDD5Kkv/3tb/r8889vaXEAAACoeGUOiB9++KFiYmLk7e2tffv2KS8vT5J04cIFzZw585YXCAAAgIpV5oA4Y8YMJSUl6c9//rPpA587duyovXv33tLiAAAAUPHKHBCPHTumBx98sMS4v7+/srOzb0VNAAAAcKIyB8Tg4GCdOHGixPjnn3+uRo0a3ZKiAAAA4DxlDohDhw5VfHy80tLSZLFY9OOPP+q9997TuHHjNGLEiPKoEQAAABXIrawrvPTSS7JarerSpYtyc3P14IMPytPTU+PGjdNzzz1XHjUCAACgApU5IFosFr388ssaP368Tpw4oUuXLql58+aqVq1aedQHAACAClbmS8yDBw/WxYsX5eHhoebNm6t9+/aqVq2aLl++rMGDB5dHjQAAAKhAZQ6Iy5Yt088//1xi/Oeff9Zf//rXW1IUAAAAnKfUl5hzcnJkGIYMw9DFixfl5eVlW1ZUVKT169erdu3a5VIkAAAAKk6pA2JAQIAsFossFot+85vflFhusVg0bdq0W1ocAAAAKl6pA+LWrVtlGIY6d+6sDz/8UIGBgbZlHh4eatCggUJDQ8ulSAAAAFScUgfEhx56SJJ08uRJ1atXTy4uZb59EQAAALeBMr/mpkGDBpKk3NxcpaenKz8/37T83nvvvTWVAQAAwCnKHBDPnDmjQYMGacOGDXaXFxUV/eqiAAAA4Dxlvk48evRoZWdnKy0tTd7e3tq4caOWLVum8PBwffzxx+VRIwAAACpQmc8gbtmyRf/4xz/Url07ubi4qEGDBuratav8/PyUmJio2NjY8qgTAAAAFaTMZxAvX75se9/hXXfdpTNnzkiSIiIitHfv3ltbHQAAACpcmQPi3XffrWPHjkmSWrZsqbfffls//PCDkpKSFBIScssLBAAAQMUq8yXm+Ph4nT59WpI0ZcoUPfLII3rvvffk4eGh5OTkW10fAAAAKliZA+ITTzxh+7pt27Y6deqUjh49qvr166tmzZq3tDgAAABUvDJdYi4oKFDjxo115MgR25iPj4/atGlDOAQAALhDlCkguru768qVK+VVCwAAACqBMj+kMnLkSM2aNUuFhYXlUQ8AAACcrMz3IH7xxRfavHmzNm3apIiICPn6+pqWr1mz5pYVBwAAgIpX5oAYEBCgnj17lkctAAAAqATKHBCXLl1aHnUAAACgkijzPYgAAAC4sxEQAQAAYEJABAAAgAkBEQAAACYERAAAAJiU+SnmBQsW2B23WCzy8vJSkyZN9OCDD8rV1fVXFwcAAICKV+aA+Oabb+rMmTPKzc3VXXfdJUn66aef5OPjo2rVqikrK0uNGjXS1q1bVa9evVteMAAAAMpXmS8xz5w5U/fdd5+OHz+uc+fO6dy5c/rqq68UGRmp+fPnKz09XcHBwRozZkx51AsAAIByVuYziJMmTdKHH36oxo0b28aaNGmi119/XT179tQ333yj2bNn82krAAAAt6kyn0E8ffq0CgsLS4wXFhYqIyNDkhQaGqqLFy/++uoAAABQ4cocEB9++GE988wz2rdvn21s3759GjFihDp37ixJOnDggMLCwm5dlQAAAKgwZQ6I77zzjgIDA9W2bVt5enrK09NT7dq1U2BgoN555x1JUrVq1TR37txSb3PRokVq2LChvLy8FBkZqV27dl13/urVq9W0aVN5eXkpIiJC69evNy03DEMJCQkKCQmRt7e3oqOjdfz4cdOcV199VR06dJCPj48CAgLs7ic9PV2xsbHy8fFR7dq1NX78+BJnT7dt26Y2bdrI09NTTZo0UXJycqmPGwAAoDIqc0AMDg5WSkqKDh8+rNWrV2v16tU6fPiwNm3apKCgIElXzzJ269atVNt7//33NXbsWE2ZMkV79+5Vy5YtFRMTo6ysLLvzd+7cqX79+mnIkCHat2+f4uLiFBcXp4MHD9rmzJ49WwsWLFBSUpLS0tLk6+urmJgYXblyxTYnPz9fvXr10ogRI+zup6ioSLGxscrPz9fOnTu1bNkyJScnKyEhwTbn5MmTio2N1cMPP6z9+/dr9OjRevrpp/Xpp5+W6tgBAAAqI4thGIYzC4iMjNR9992nhQsXSpKsVqvq1aun5557Ti+99FKJ+X369NHly5e1bt0629hvf/tbtWrVSklJSTIMQ6GhoXr++ec1btw4SdKFCxcUFBSk5ORk9e3b17S95ORkjR49WtnZ2abxDRs26LHHHtOPP/5oC75JSUl68cUXdebMGXl4eOjFF1/UJ598Ygqnffv2VXZ2tjZu3HjDY8/JyZG/v78uXLggPz+/0jWsDAzD0M8FRbd8uzeroKBAn366STEx3eTu7u7scioVemMffXGM3thHXxyjN/ZVxr54u7vKYrGUy7ZLmz3K/BRzUVGRkpOTtXnzZmVlZclqtZqWb9mypdTbys/P1549ezRhwgTbmIuLi6Kjo5Wammp3ndTUVI0dO9Y0FhMTo7Vr10q6elYvIyND0dHRtuX+/v6KjIxUampqiYDoSGpqqiIiImzhsHg/I0aM0KFDh9S6dWulpqaa9lM8Z/To0Xa3mZeXp7y8PNv3OTk5kq7+cBYUFJSqrrLIzS9Uy1dK/+dRMdz0wq7KVlNlQW/soy+O0Rv76Itj9Ma+ytWXLyd3lo9HmSNaqZQ2b5R57/Hx8UpOTlZsbKxatGjxqxLu2bNnVVRUZAphkhQUFKSjR4/aXScjI8Pu/OInqIt/v96c0nC0n1/uw9GcnJwc/fzzz/L29jYtS0xM1LRp00rsa9OmTfLx8Sl1baWVVyTdxB8xAABwok8/3STPcvpAutzc3FLNK3N6WLlypVatWqXf/e53ZS6qqpswYYLp7GdOTo7q1aunbt26ldsl5piYynSJuVBbtmxR586d5e5OcP0lemMffXGM3thHXxyjN/ZVxr6U9yXm0ihzJzw8PNSkSZMyF2RPzZo15erqqszMTNN4ZmamgoOD7a4THBx83fnFv2dmZiokJMQ0p1WrVqWuLTg4uMTT1MX7/eW+7NXi5+dX4uyhJNtT39dyd3cvt/sePDzKZbM3paCgQJ6ukr+vV6W5z6OyoDf20RfH6I199MUxemNfVetLaY+xzE8xP//885o/f75uxbMtHh4eatu2rTZv3mwbs1qt2rx5s6KiouyuExUVZZovSSkpKbb5YWFhCg4ONs3JyclRWlqaw2062s+BAwdMT1OnpKTIz89PzZs3L1UtAAAAt6Myn0H8/PPPtXXrVm3YsEH33HNPiSS6Zs2aMm1v7NixGjhwoNq1a6f27dtr3rx5unz5sgYNGiRJGjBggOrUqaPExERJV++BfOihhzR37lzFxsZq5cqV2r17t5YsWSJJslgsGj16tGbMmKHw8HCFhYVp8uTJCg0NVVxcnG2/6enpOn/+vNLT01VUVKT9+/dLuvqxgdWqVVO3bt3UvHlzPfnkk5o9e7YyMjI0adIkjRw50nYWcPjw4Vq4cKFeeOEFDR48WFu2bNGqVav0ySeflLWtAAAAlUaZA2JAQIB69Ohxywro06ePzpw5o4SEBGVkZKhVq1bauHGj7eGP9PR0ubj890Rnhw4dtHz5ck2aNEkTJ05UeHi41q5dqxYtWtjmvPDCC7p8+bKGDRum7Oxs3X///dq4caO8vLxscxISErRs2TLb961bt5Ykbd26VZ06dZKrq6vWrVunESNGKCoqSr6+vho4cKCmT59uWycsLEyffPKJxowZo/nz56tu3br6y1/+opiYmFvWHwAAgIpW5oC4dOnSW17EqFGjNGrUKLvLtm3bVmKsV69e6tWrl8PtWSwWTZ8+3RTmrpWcnHzDTz1p0KBBiU9puVanTp1MHzsIAABwuyvzPYgAAAC4s5XqDGKbNm20efNm3XXXXWrduvV1H73eu3fvLSsOAAAAFa9UAfF//ud/bA9m/PJBDwAAANx5ShUQp0yZYvdrAAAA3Hlu+pXh+fn5dj+LuX79+r+6KAAAADhPmQPiV199pSFDhmjnzp2mccMwZLFYVFRUeT7aDQAAAGVX5oA4aNAgubm5ad26dQoJCSm3zwoEAACAc5Q5IO7fv1979uxR06ZNy6MeAAAAOFmZ34PYvHlznT17tjxqAQAAQCVQ5oA4a9YsvfDCC9q2bZvOnTunnJwc0y8AAADc3sp8iTk6OlqS1KVLF9M4D6kAAADcGcocELdu3VoedQAAAKCSKFNALCgo0PTp05WUlKTw8PDyqgkAAABOVKZ7EN3d3fV///d/5VULAAAAKoEyP6TyxBNP6J133imPWgAAAFAJlPkexMLCQr377rv617/+pbZt28rX19e0/I033rhlxQEAAKDilTkgHjx4UG3atJF09WP3folPVQEAALj98RQzAAAATMp8DyIAAADubGU+gyhJu3fv1qpVq5Senq78/HzTsjVr1tySwgAAAOAcZT6DuHLlSnXo0EFHjhzRRx99pIKCAh06dEhbtmyRv79/edQIAACAClTmgDhz5ky9+eab+uc//ykPDw/Nnz9fR48eVe/evVW/fv3yqBEAAAAVqMwB8euvv1ZsbKwkycPDQ5cvX5bFYtGYMWO0ZMmSW14gAAAAKlaZA+Jdd92lixcvSpLq1KmjgwcPSpKys7OVm5t7a6sDAABAhSvzQyoPPvigUlJSFBERoV69eik+Pl5btmxRSkqKunTpUh41AgAAoAKVOSAuXLhQV65ckSS9/PLLcnd3186dO9WzZ09NmjTplhcIAACAilXmgBgYGGj72sXFRS+99NItLQgAAADOdVMvyv766681adIk9evXT1lZWZKkDRs26NChQ7e0OAAAAFS8MgfEzz77TBEREUpLS9OaNWt06dIlSdKXX36pKVOm3PICAQAAULHKHBBfeuklzZgxQykpKfLw8LCNd+7cWf/5z39uaXEAAACoeGUOiAcOHFCPHj1KjNeuXVtnz569JUUBAADAecocEAMCAnT69OkS4/v27VOdOnVuSVEAAABwnjIHxL59++rFF19URkaGLBaLrFarduzYoXHjxmnAgAHlUSMAAAAq0E19FnPTpk1Vr149Xbp0Sc2bN9eDDz6oDh068B5EAACAO0CZ34Po4eGhP//5z5o8ebIOHjyoS5cuqXXr1goPDy+P+gAAAFDByhwQi9WvX1/169e/lbUAAACgEihVQBw7dmypN/jGG2/cdDEAAABwvlIFxH379pVqYxaL5VcVAwAAAOcrVUDcunVredcBAACASuKmPosZAAAAdy4CIgAAAEwIiAAAADAhIAIAAMCEgAgAAAATAiIAAABMnB4QFy1apIYNG8rLy0uRkZHatWvXdeevXr1aTZs2lZeXlyIiIrR+/XrTcsMwlJCQoJCQEHl7eys6OlrHjx83zTl//rz69+8vPz8/BQQEaMiQIbp06ZJpzqpVq9SqVSv5+PioQYMGmjNnTola3nvvPbVs2VI+Pj4KCQnR4MGDde7cuZvsBAAAQOXg1ID4/vvva+zYsZoyZYr27t2rli1bKiYmRllZWXbn79y5U/369dOQIUO0b98+xcXFKS4uTgcPHrTNmT17thYsWKCkpCSlpaXJ19dXMTExunLlim1O//79dejQIaWkpGjdunXavn27hg0bZlu+YcMG9e/fX8OHD9fBgwf11ltv6c0339TChQttc3bs2KEBAwZoyJAhOnTokFavXq1du3Zp6NCh5dApAACACmQ4Ufv27Y2RI0favi8qKjJCQ0ONxMREu/N79+5txMbGmsYiIyONZ555xjAMw7BarUZwcLAxZ84c2/Ls7GzD09PTWLFihWEYhnH48GFDkvHFF1/Y5mzYsMGwWCzGDz/8YBiGYfTr1894/PHHTftZsGCBUbduXcNqtRqGYRhz5swxGjVqVGJOnTp1Sn38Fy5cMCQZFy5cKPU6t7P8/Hxj7dq1Rn5+vrNLqXTojX30xTF6Yx99cYze2FfV+lLa7FGqT1IpD/n5+dqzZ48mTJhgG3NxcVF0dLRSU1PtrpOamlric6FjYmK0du1aSdLJkyeVkZGh6Oho23J/f39FRkYqNTVVffv2VWpqqgICAtSuXTvbnOjoaLm4uCgtLU09evRQXl6efHx8TPvx9vbW999/r1OnTqlhw4aKiorSxIkTtX79ej366KPKysrSBx98oN/97ncOjzkvL095eXm273NyciRJBQUFKigouEHHbn/Fx1gVjrWs6I199MUxemMffXGM3thX1fpS2uN0WkA8e/asioqKFBQUZBoPCgrS0aNH7a6TkZFhd35GRoZtefHY9ebUrl3btNzNzU2BgYG2OTExMRozZoyeeuopPfzwwzpx4oTmzp0rSTp9+rQaNmyojh076r333lOfPn105coVFRYWqnv37lq0aJHDY05MTNS0adNKjG/atKlEIL2TpaSkOLuESove2EdfHKM39tEXx+iNfVWlL7m5uaWa57SAWJkNHTpUX3/9tR577DEVFBTIz89P8fHxmjp1qlxcrt62efjwYcXHxyshIUExMTE6ffq0xo8fr+HDh+udd96xu90JEyaYzoDm5OSoXr166tatm/z8/Crk2JypoKBAKSkp6tq1q9zd3Z1dTqVCb+yjL47RG/voi2P0xr6q1pfiq5c34rSAWLNmTbm6uiozM9M0npmZqeDgYLvrBAcHX3d+8e+ZmZkKCQkxzWnVqpVtzrUPwRQWFur8+fO29S0Wi2bNmqWZM2cqIyNDtWrV0ubNmyVJjRo1knT1bGDHjh01fvx4SdK9994rX19fPfDAA5oxY4Zp/8U8PT3l6elZYtzd3b1K/FAWq2rHWxb0xj764hi9sY++OEZv7KsqfSntMTrtKWYPDw+1bdvWFrwkyWq1avPmzYqKirK7TlRUlGm+dPWUcPH8sLAwBQcHm+bk5OQoLS3NNicqKkrZ2dnas2ePbc6WLVtktVoVGRlp2rarq6vq1KkjDw8PrVixQlFRUapVq5akq6doi88m/nK+dPVVOwAAALcrp15iHjt2rAYOHKh27dqpffv2mjdvni5fvqxBgwZJkgYMGKA6deooMTFRkhQfH6+HHnpIc+fOVWxsrFauXKndu3dryZIlkq6e+Rs9erRmzJih8PBwhYWFafLkyQoNDVVcXJwkqVmzZnrkkUc0dOhQJSUlqaCgQKNGjVLfvn0VGhoq6er9kR988IE6deqkK1euaOnSpVq9erU+++wzW+3du3fX0KFDtXjxYtsl5tGjR6t9+/a27QAAANyOnBoQ+/TpozNnzighIUEZGRlq1aqVNm7caHvIJD093XSWrkOHDlq+fLkmTZqkiRMnKjw8XGvXrlWLFi1sc1544QVdvnxZw4YNU3Z2tu6//35t3LhRXl5etjnvvfeeRo0apS5dusjFxUU9e/bUggULTLUtW7ZM48aNk2EYioqK0rZt29S+fXvb8qeeekoXL17UwoUL9fzzzysgIECdO3fWrFmzyqtdAAAAFcLpD6mMGjVKo0aNsrts27ZtJcZ69eqlXr16OdyexWLR9OnTNX36dIdzAgMDtXz5cofLa9as6fBVO7/03HPP6bnnnrvhPAAAgNuJ0z9qDwAAAJULAREAAAAmBEQAAACYEBABAABgQkAEAACACQERAAAAJgREAAAAmBAQAQAAYEJABAAAgAkBEQAAACYERAAAAJgQEAEAAGBCQAQAAIAJAREAAAAmBEQAAACYEBABAABgQkAEAACACQERAAAAJgREAAAAmBAQAQAAYEJABAAAgAkBEQAAACYERAAAAJgQEAEAAGBCQAQAAIAJAREAAAAmBEQAAACYEBABAABgQkAEAACACQERAAAAJgREAAAAmBAQAQAAYEJABAAAgAkBEQAAACYERAAAAJgQEAEAAGBCQAQAAIAJAREAAAAmBEQAAACYEBABAABgQkAEAACACQERAAAAJgREAAAAmBAQAQAAYEJABAAAgInTA+KiRYvUsGFDeXl5KTIyUrt27bru/NWrV6tp06by8vJSRESE1q9fb1puGIYSEhIUEhIib29vRUdH6/jx46Y558+fV//+/eXn56eAgAANGTJEly5dMs1ZtWqVWrVqJR8fHzVo0EBz5swpUUteXp5efvllNWjQQJ6enmrYsKHefffdm+wEAABA5eDUgPj+++9r7NixmjJlivbu3auWLVsqJiZGWVlZdufv3LlT/fr105AhQ7Rv3z7FxcUpLi5OBw8etM2ZPXu2FixYoKSkJKWlpcnX11cxMTG6cuWKbU7//v116NAhpaSkaN26ddq+fbuGDRtmW75hwwb1799fw4cP18GDB/XWW2/pzTff1MKFC0319O7dW5s3b9Y777yjY8eOacWKFbr77rtvcZcAAAAqmOFE7du3N0aOHGn7vqioyAgNDTUSExPtzu/du7cRGxtrGouMjDSeeeYZwzAMw2q1GsHBwcacOXNsy7Ozsw1PT09jxYoVhmEYxuHDhw1JxhdffGGbs2HDBsNisRg//PCDYRiG0a9fP+Pxxx837WfBggVG3bp1DavValvH39/fOHfu3M0evnHhwgVDknHhwoWb3sbtJD8/31i7dq2Rn5/v7FIqHXpjH31xjN7YR18cozf2VbW+lDZ7uDkrmObn52vPnj2aMGGCbczFxUXR0dFKTU21u05qaqrGjh1rGouJidHatWslSSdPnlRGRoaio6Nty/39/RUZGanU1FT17dtXqampCggIULt27WxzoqOj5eLiorS0NPXo0UN5eXny8fEx7cfb21vff/+9Tp06pYYNG+rjjz9Wu3btNHv2bP3tb3+Tr6+vfv/73+uVV16Rt7e33frz8vKUl5dn+z4nJ0eSVFBQoIKCglJ07fZWfIxV4VjLit7YR18cozf20RfH6I19Va0vpT1OpwXEs2fPqqioSEFBQabxoKAgHT161O46GRkZdudnZGTYlhePXW9O7dq1Tcvd3NwUGBhomxMTE6MxY8boqaee0sMPP6wTJ05o7ty5kqTTp0+rYcOG+uabb/T555/Ly8tLH330kc6ePatnn31W586d09KlS+3Wn5iYqGnTppUY37RpU4lAeidLSUlxdgmVFr2xj744Rm/soy+O0Rv7qkpfcnNzSzXPaQGxMhs6dKi+/vprPfbYYyooKJCfn5/i4+M1depUubhcvW3TarXKYrHovffek7+/vyTpjTfe0OOPP6633nrL7lnECRMmmM6A5uTkqF69eurWrZv8/Pwq5uCcqKCgQCkpKeratavc3d2dXU6lQm/soy+O0Rv76Itj9Ma+qtaX4quXN+K0gFizZk25uroqMzPTNJ6Zmang4GC76wQHB193fvHvmZmZCgkJMc1p1aqVbc61D8EUFhbq/PnztvUtFotmzZqlmTNnKiMjQ7Vq1dLmzZslSY0aNZIkhYSEqE6dOrZwKEnNmjWTYRj6/vvvFR4eXqJ+T09PeXp6lhh3d3evEj+Uxara8ZYFvbGPvjhGb+yjL47RG/uqSl9Ke4xOe4rZw8NDbdu2tQUv6epZuc2bNysqKsruOlFRUab50tVTwsXzw8LCFBwcbJqTk5OjtLQ025yoqChlZ2drz549tjlbtmyR1WpVZGSkaduurq6qU6eOPDw8tGLFCkVFRalWrVqSpI4dO+rHH380vR7nq6++kouLi+rWrXszLQEAAKgUnPqam7Fjx+rPf/6zli1bpiNHjmjEiBG6fPmyBg0aJEkaMGCA6SGW+Ph4bdy4UXPnztXRo0c1depU7d69W6NGjZJ09czf6NGjNWPGDH388cc6cOCABgwYoNDQUMXFxUm6epbvkUce0dChQ7Vr1y7t2LFDo0aNUt++fRUaGirp6v2RSUlJOnr0qPbv36/4+HitXr1a8+bNs9Xyxz/+UTVq1NCgQYN0+PBhbd++XePHj9fgwYMdPqQCAABwO3DqPYh9+vTRmTNnlJCQoIyMDLVq1UobN260PWSSnp5uu+dPkjp06KDly5dr0qRJmjhxosLDw7V27Vq1aNHCNueFF17Q5cuXNWzYMGVnZ+v+++/Xxo0b5eXlZZvz3nvvadSoUerSpYtcXFzUs2dPLViwwFTbsmXLNG7cOBmGoaioKG3btk3t27e3La9WrZpSUlL03HPPqV27dqpRo4Z69+6tGTNmlFe7AAAAKoTTH1IZNWqU7QzgtbZt21ZirFevXurVq5fD7VksFk2fPl3Tp093OCcwMFDLly93uLxmzZoOX7XzS02bNq0yTz0BAICqw+kftQcAAIDKhYAIAAAAEwIiAAAATAiIAAAAMCEgAgAAwISACAAAABMCIgAAAEwIiAAAADAhIAIAAMCEgAgAAAATAiIAAABMCIgAAAAwISACAADAhIAIAAAAEwIiAAAATAiIAAAAMCEgAgAAwISACAAAABMCIgAAAEwIiAAAADAhIAIAAMCEgAgAAAATAiIAAABMCIgAAAAwISACAADAhIAIAAAAEwIiAAAATAiIAAAAMCEgAgAAwISACAAAABMCIgAAAEwIiAAAADAhIAIAAMCEgAgAAAATN2cXUJUZhiFJysnJcXIlFaOgoEC5ubnKycmRu7u7s8upVOiNffTFMXpjH31xjN7YV9X6Upw5ijOIIwREJ7p48aIkqV69ek6uBAAAVCUXL16Uv7+/w+UW40YREuXGarXqxx9/VPXq1WWxWJxdTrnLyclRvXr19N1338nPz8/Z5VQq9MY++uIYvbGPvjhGb+yran0xDEMXL15UaGioXFwc32nIGUQncnFxUd26dZ1dRoXz8/OrEv8R3gx6Yx99cYze2EdfHKM39lWlvlzvzGExHlIBAACACQERAAAAJgREVBhPT09NmTJFnp6ezi6l0qE39tEXx+iNffTFMXpjH32xj4dUAAAAYMIZRAAAAJgQEAEAAGBCQAQAAIAJAREAAAAmBESUu8TERN13332qXr26ateurbi4OB07dszZZVU6r732miwWi0aPHu3sUiqFH374QU888YRq1Kghb29vRUREaPfu3c4uy6mKioo0efJkhYWFydvbW40bN9Yrr7xyw89UvRNt375d3bt3V2hoqCwWi9auXWtabhiGEhISFBISIm9vb0VHR+v48ePOKbYCXa8vBQUFevHFFxURESFfX1+FhoZqwIAB+vHHH51XcAW60c/MLw0fPlwWi0Xz5s2rsPoqGwIiyt1nn32mkSNH6j//+Y9SUlJUUFCgbt266fLly84urdL44osv9Pbbb+vee+91dimVwk8//aSOHTvK3d1dGzZs0OHDhzV37lzdddddzi7NqWbNmqXFixdr4cKFOnLkiGbNmqXZs2frT3/6k7NLq3CXL19Wy5YttWjRIrvLZ8+erQULFigpKUlpaWny9fVVTEyMrly5UsGV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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "В работе была построена модель распознавания голосовых команд по аудиозаписям. В качестве признаков использовались log-Mel spectrogram, а классификация выполнялась с помощью сверточной нейронной сети. Уже после одной эпохи модель показала высокое качество, а после полного обучения достигла val_acc = 0.9569 и val_f1_macro = 0.9568. Полученные результаты показывают, что выбранный подход хорошо подходит для решения задачи классификации коротких аудиокоманд."
      ],
      "metadata": {
        "id": "CTJgi6b9lq5d"
      }
    }
  ]
}