1
0
ответвлено от main/neurocomputers-python

Загрузить файлы в «lab3»

Этот коммит содержится в:
2026-02-22 11:41:49 +00:00
родитель 9fc6c9d6ca
Коммит fcd8f1d75a

Просмотреть файл

@@ -12,7 +12,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "15BpjnZQzAUG"
},
"source": [ "source": [
"> Цель работы: знакомство с применением многослойного персептрона для решения задач сжатия данных, прогнозирования временных рядов и распознавания образов.\n", "> Цель работы: знакомство с применением многослойного персептрона для решения задач сжатия данных, прогнозирования временных рядов и распознавания образов.\n",
">\n", ">\n",
@@ -27,7 +29,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "F1-sSuk2zAUI"
},
"source": [ "source": [
"Импорт библиотек:" "Импорт библиотек:"
] ]
@@ -42,11 +46,11 @@
"source": [ "source": [
"import numpy as np\n", "import numpy as np\n",
"import pandas as pd\n", "import pandas as pd\n",
"import seaborn as sns\n",
"import torch\n", "import torch\n",
"import matplotlib.pyplot as plt\n", "import matplotlib.pyplot as plt\n",
"from IPython.display import clear_output\n", "from IPython.display import clear_output\n",
"from mpl_toolkits.mplot3d import Axes3D\n", "from mpl_toolkits.mplot3d import Axes3D\n",
"from sklearn.model_selection import train_test_split\n",
"\n", "\n",
"from torch import nn\n", "from torch import nn\n",
"\n", "\n",
@@ -55,7 +59,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "GtZJ1mGmzAUL"
},
"source": [ "source": [
"### Содержание: \n", "### Содержание: \n",
"[1. Подготовка данных](#p_1) \n", "[1. Подготовка данных](#p_1) \n",
@@ -65,14 +71,18 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "HZNHPPKUzAUM"
},
"source": [ "source": [
"## 1. Подготовка данных<a id=\"p_1\"></a>" "## 1. Подготовка данных<a id=\"p_1\"></a>"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "h2JqhwwrzAUN"
},
"source": [ "source": [
"Загрузим в датафрейм `data` данные о сорока образцах минеральной воды, хранящиеся в файле `min_water.txt`." "Загрузим в датафрейм `data` данные о сорока образцах минеральной воды, хранящиеся в файле `min_water.txt`."
] ]
@@ -86,7 +96,7 @@
"height": 256 "height": 256
}, },
"id": "PkNWYbQCpsl_", "id": "PkNWYbQCpsl_",
"outputId": "ee2dd8c3-2d7d-4962-bc40-a5cc2dded5db" "outputId": "1de6457f-9cc1-42a1-b4f1-2c13c5b66100"
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -96,7 +106,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "YjqpAWl9zAUR"
},
"source": [ "source": [
"Вынесем в отдельные переменные:\n", "Вынесем в отдельные переменные:\n",
" - `y_binary` — выходной признак для задачи бинарной классификации (первый столбец датафрейма);\n", " - `y_binary` — выходной признак для задачи бинарной классификации (первый столбец датафрейма);\n",
@@ -120,7 +132,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "rpgOkJkPzAUT"
},
"source": [ "source": [
"Выпишите в список `features` отобранные в прошлой лабораторной работе признаки (формат: `features = ['VAR1', 'VAR2']`):" "Выпишите в список `features` отобранные в прошлой лабораторной работе признаки (формат: `features = ['VAR1', 'VAR2']`):"
] ]
@@ -128,7 +142,9 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "R0bIf4PUzAUT"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"features = # Ваш код здесь" "features = # Ваш код здесь"
@@ -136,7 +152,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "ddwgNPoyzAUV"
},
"source": [ "source": [
"Датафрейм с отобранными входными признаками `X_data_filtered`:" "Датафрейм с отобранными входными признаками `X_data_filtered`:"
] ]
@@ -150,7 +168,7 @@
"height": 206 "height": 206
}, },
"id": "d6eTUCk2Cjdc", "id": "d6eTUCk2Cjdc",
"outputId": "d89643dd-a410-42b2-9b91-c4534966fd1d" "outputId": "656c9a35-26f6-4425-b35e-ca06930abc82"
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -162,7 +180,7 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"Произведите нормализацию или стандартизацию (на выбор) отобранных входных данных `X_data_filtered`. Результат сохраните в переменную `X_data_preprocessed`, которую затем представьте в виде тензора `X_data_tensor`:" "C помощью функции `train_test_split` разбейте данные (`X_data_filtered`, `y_multiclass`) на обучающую (`X_multiclass_train`, `y_multiclass_train`), валидационную (`X_multiclass_valid`, `y_multiclass_valid`) и тестовую выборки (`X_multiclass_test`, `y_multiclass_test`) с сохранением соотншений классов (сортов минеральной воды):"
] ]
}, },
{ {
@@ -173,19 +191,37 @@
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"# Ваш код здесь\n", "X_multiclass_train, X_multiclass_test, y_multiclass_train, y_multiclass_test = # Ваш код здесь\n",
"\n", "\n",
"X_data_preprocessed = # Ваш код здесь\n", "X_multiclass_train, X_multiclass_valid, y_multiclass_train, y_multiclass_valid = # Ваш код здесь"
"\n", ]
"X_data_tensor = # Ваш код здесь" },
{
"cell_type": "markdown",
"metadata": {
"id": "LAOh4V56zAUV"
},
"source": [
"Произведите нормализацию или стандартизацию (на выбор) входных данных. Результат сохраните в переменные (`X_multiclass_train`, `X_multiclass_valid`, `X_multiclass_test`), которую затем представьте в виде тензоров:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X_means = # Ваш код здесь\n",
"X_stds = # Ваш код здесь\n",
"\n",
"X_multiclass_train = # Ваш код здесь\n",
"X_multiclass_valid = # Ваш код здесь\n",
"X_multiclass_test = # Ваш код здесь"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": { "metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "AtGktiZmJiUV", "id": "AtGktiZmJiUV",
"outputId": "f9edb4f0-c5ab-4a62-af28-6552c981512f" "outputId": "f9edb4f0-c5ab-4a62-af28-6552c981512f"
}, },
@@ -211,7 +247,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "asRgUuyNzAUY"
},
"source": [ "source": [
"Допишите класс `Autoencoder` структурами энкодера и декодера на основе полносвязных слоёв `nn.Linear`. В качестве функций активации используйте `nn.ReLU()`. При этом на выходе энкодера функцию активации можно не применять — это позволит сохранить отрицательные значения в кодированном представлении." "Допишите класс `Autoencoder` структурами энкодера и декодера на основе полносвязных слоёв `nn.Linear`. В качестве функций активации используйте `nn.ReLU()`. При этом на выходе энкодера функцию активации можно не применять — это позволит сохранить отрицательные значения в кодированном представлении."
] ]
@@ -219,7 +257,9 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "F297Z81wzAUY"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"class Autoencoder(nn.Module):\n", "class Autoencoder(nn.Module):\n",
@@ -240,7 +280,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "R5sVUOy7zAUZ"
},
"source": [ "source": [
"Создайте экземпляр модели с двумя нейронами в «узком горле»:" "Создайте экземпляр модели с двумя нейронами в «узком горле»:"
] ]
@@ -248,7 +290,9 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "MlSSzk2yzAUa"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"model_2 = Autoencoder(# Ващ код здесь\n", "model_2 = Autoencoder(# Ващ код здесь\n",
@@ -258,9 +302,6 @@
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": { "metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "tGS2_TqjK_SI", "id": "tGS2_TqjK_SI",
"outputId": "a1a63c33-5dd5-461e-8d20-97fc34455f21" "outputId": "a1a63c33-5dd5-461e-8d20-97fc34455f21"
}, },
@@ -276,16 +317,18 @@
"base_uri": "https://localhost:8080/" "base_uri": "https://localhost:8080/"
}, },
"id": "Y3GS-3AaKYt7", "id": "Y3GS-3AaKYt7",
"outputId": "981a4cd8-3b19-4bf6-ac07-ddd13e3df131" "outputId": "81ecb257-7d72-443e-aa9e-256271a17a6e"
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"model_2(X_data_tensor[:3])" "model_2(X_multiclass_train[:3])"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "8hJk8GWIzAUb"
},
"source": [ "source": [
"Удостоверимся, что размерность её выхода совпадает с размерностью её входа:" "Удостоверимся, что размерность её выхода совпадает с размерностью её входа:"
] ]
@@ -293,15 +336,19 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "pDmdGMRZzAUc"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"assert X_data_tensor[:3].shape == model_2(X_data_tensor[:3]).shape" "assert X_multiclass_train[:3].shape == model_2(X_multiclass_train[:3]).shape"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "IjoYYn-ozAUc"
},
"source": [ "source": [
"Проверим, как модель обучается. Зададим оптимизатор и среднеквадратическую функцию потерь:" "Проверим, как модель обучается. Зададим оптимизатор и среднеквадратическую функцию потерь:"
] ]
@@ -320,7 +367,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "HqcQqxN7zAUd"
},
"source": [ "source": [
"Рассчитаем значение функции потерь:" "Рассчитаем значение функции потерь:"
] ]
@@ -333,19 +382,21 @@
"base_uri": "https://localhost:8080/" "base_uri": "https://localhost:8080/"
}, },
"id": "5kKYW89_KY8j", "id": "5kKYW89_KY8j",
"outputId": "94e90485-ca86-4204-e61d-75d247a87fc4" "outputId": "a5ece716-5c89-4553-c78c-1e5c7e20eedf"
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"decoded = model_2(X_data_tensor)\n", "decoded = model_2(X_multiclass_train)\n",
"\n", "\n",
"loss = criterion(decoded, X_data_tensor)\n", "loss = criterion(decoded, X_multiclass_train)\n",
"loss" "loss"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "JVplv7O8zAUd"
},
"source": [ "source": [
"Выполните несколько раз эту и предыдущую ячейку, чтобы убедиться в уменьшении ошибки:" "Выполните несколько раз эту и предыдущую ячейку, чтобы убедиться в уменьшении ошибки:"
] ]
@@ -365,7 +416,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "iXqI-DurzAUe"
},
"source": [ "source": [
"Задайте параметры для обучения автоассоциативной сети с двумя нейронами в «узком горле»:" "Задайте параметры для обучения автоассоциативной сети с двумя нейронами в «узком горле»:"
] ]
@@ -373,7 +426,9 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "5s4GjW_PzAUe"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"torch.manual_seed(seed=42)\n", "torch.manual_seed(seed=42)\n",
@@ -391,7 +446,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "SN8PZ41vzAUp"
},
"source": [ "source": [
"**Обучение нейронной сети:**" "**Обучение нейронной сети:**"
] ]
@@ -402,16 +459,21 @@
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
"loss_history = []\n", "loss_train_history, loss_valid_history = [], []\n",
"\n", "\n",
"for epoch in range(epochs):\n", "for epoch in range(epochs):\n",
" # Ваш код здесь\n", " # Ваш код здесь\n",
"\n", "\n",
" # Отключаем градиенты для этапа валидации\n",
" with torch.no_grad():\n",
" # Ваш код здесь\n",
"\n",
" if (epoch + 1) % 5 == 0:\n", " if (epoch + 1) % 5 == 0:\n",
"\n", "\n",
" clear_output(True)\n", " clear_output(True)\n",
" plt.plot(range(1, epoch+2), loss_history, label='Loss')\n", " plt.plot(range(1, epoch+2), loss_train_history, label='Train', color='green')\n",
" plt.title(f'Epoch: {epoch + 1}, Loss: {loss_history[-1]:.6f}')\n", " plt.plot(range(1, epoch+2), loss_valid_history, label='Valid', color='red')\n",
" plt.title(f'Epoch: {epoch + 1}, Loss Train: {loss_train_history[-1]:.6f}, Loss Valid: {loss_valid_history[-1]:.6f}')\n",
" plt.grid(True, alpha=0.3)\n", " plt.grid(True, alpha=0.3)\n",
" plt.legend(loc='best')\n", " plt.legend(loc='best')\n",
" plt.show()" " plt.show()"
@@ -420,6 +482,54 @@
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [
"Проверим качество обученной сети на тестовой выборке:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "t-Xkwg4h3gyS",
"outputId": "ddfc13ae-f942-4328-9036-92b318c726bc"
},
"outputs": [],
"source": [
"with torch.no_grad():\n",
" decoded_test = model_2(X_multiclass_test)\n",
" loss_test = criterion(decoded_test, X_multiclass_test)\n",
"\n",
"print(f'Loss Test: {loss_test.item():.6f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Далее необходимо через обученную сети пропустить все имеющиеся входные данные. Здесь можно сконкатенировать обучающую, валидационную и тестовую выборки, но можно и заново стандартизировать исходные данные `X_data_filtered` с помощью переменных `X_means` и `X_stds`, которые обязательно должны быть ранее рассчитаны на обучающей выборке `X_multiclass_train` (аналогично будет и для нормировки данных). Результат будет прелставлен в виде тензора.\n",
"\n",
"Такой вариант сохранит исходный порядок записей в данных и позволит нам использовать исходный вектор `y_multiclass` для разметки классов ниже."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "0RbKOwMeZUcn"
},
"outputs": [],
"source": [
"X_data_tensor = torch.tensor(((X_data_filtered - X_means) / X_stds).values).float()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TrWOUf0vzAUq"
},
"source": [ "source": [
"После обучения сети получим двумерные данные с выхода энкодера:" "После обучения сети получим двумерные данные с выхода энкодера:"
] ]
@@ -432,7 +542,7 @@
"base_uri": "https://localhost:8080/" "base_uri": "https://localhost:8080/"
}, },
"id": "HFcSAdGoOaog", "id": "HFcSAdGoOaog",
"outputId": "36330737-7606-4a6a-e532-6bf372deb34d" "outputId": "1233f17c-2188-402e-d1dc-697dc6c0bfb4"
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -442,7 +552,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "GjtM4NXLzAUr"
},
"source": [ "source": [
"Построим двумерную диаграмму рассеяния и отметим классы с помощью `y_multiclass`:" "Построим двумерную диаграмму рассеяния и отметим классы с помощью `y_multiclass`:"
] ]
@@ -456,7 +568,7 @@
"height": 430 "height": 430
}, },
"id": "KkToPCInQQ1J", "id": "KkToPCInQQ1J",
"outputId": "244bae8a-94a9-4817-a564-69c630efea98" "outputId": "8469b911-292a-4016-fbd3-38f92997adad"
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -472,7 +584,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "t0EmzLHXzAUs"
},
"source": [ "source": [
"По аналогии обучите автоассоциативную сеть с тремя нейронами в «узком горле»:" "По аналогии обучите автоассоциативную сеть с тремя нейронами в «узком горле»:"
] ]
@@ -480,7 +594,9 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "WasLielLzAUt"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"torch.manual_seed(seed=42)\n", "torch.manual_seed(seed=42)\n",
@@ -493,7 +609,9 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "cFxc9xD-zAUt"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"# Ваш код здесь" "# Ваш код здесь"
@@ -501,15 +619,19 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "18f786y5zAUv"
},
"source": [ "source": [
"После обучения сети получите трёхмерные данные с выхода энкодера:" "После обучения сети получите трёхмерные данные с выхода энкодера (снова по всем данным `X_data_tensor`, которые уже были подготовлены выше):"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "PLjKuu-szAUw"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"encoded_3d = # Ваш код здесь" "encoded_3d = # Ваш код здесь"
@@ -517,7 +639,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "BYn45sTnzAUx"
},
"source": [ "source": [
"Построим трёхмерную диаграмму рассеяния:" "Построим трёхмерную диаграмму рассеяния:"
] ]
@@ -531,7 +655,7 @@
"height": 653 "height": 653
}, },
"id": "RpqVg5EeT72I", "id": "RpqVg5EeT72I",
"outputId": "2f5e070d-aa49-4eab-cd8e-277bd3a2c4b5" "outputId": "7b9aac3c-68d5-44d7-db56-8f7a53e3aa37"
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
@@ -561,7 +685,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "NNWL9ZakzAUy"
},
"source": [ "source": [
"Сохраним в бинарные файлы `.npy` выходы энкодеров обеих моделей — для следующей лабораторной работы:" "Сохраним в бинарные файлы `.npy` выходы энкодеров обеих моделей — для следующей лабораторной работы:"
] ]
@@ -569,7 +695,9 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "p2Zx-Jz4zAUz"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"np.save('encoded_2d.npy', encoded_2d)\n", "np.save('encoded_2d.npy', encoded_2d)\n",
@@ -578,14 +706,18 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "K-pYtaxBzAUz"
},
"source": [ "source": [
"## 3. Автоассоциативная нейронная сеть на неполных данных<a id=\"p_3\"></a>" "## 3. Автоассоциативная нейронная сеть на неполных данных<a id=\"p_3\"></a>"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "J3RSV5WDzAU0"
},
"source": [ "source": [
"Выберите класс, который нужно исключить:" "Выберите класс, который нужно исключить:"
] ]
@@ -593,7 +725,9 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "_UuEf5TRzAU0"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"label_to_exclude = # Ваш код здесь" "label_to_exclude = # Ваш код здесь"
@@ -601,7 +735,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "MmlBKShgzAU1"
},
"source": [ "source": [
"Создадим маску для исключения данных этого класса:" "Создадим маску для исключения данных этого класса:"
] ]
@@ -619,7 +755,9 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"id": "SA3A39ARzAU1"
},
"source": [ "source": [
"Данные исключены:" "Данные исключены:"
] ]
@@ -628,22 +766,60 @@
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": { "metadata": {
"colab": { "id": "I7sTKdWgQRWQ"
"base_uri": "https://localhost:8080/"
},
"id": "I7sTKdWgQRWQ",
"outputId": "95d2a292-7e2f-401e-e473-7d5f09b0d7fb"
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"X_data_tensor[mask_to_exclude].shape" "X_data_include = X_data_filtered.loc[mask_to_exclude, :]\n",
"y_include = y_multiclass[mask_to_exclude]"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"По аналогии с предыдущим пунктом реализуйте обучение автоассоциативных сетей с двумя и тремя нейронами в «узком горле» на неполных данных (т.е. на каждой эпохе вместо полных данных `X_data_tensor` на модель нужно подавать неполные данные `X_data_tensor[mask_to_exclude]`).\n", "По аналогии с помощью функции `train_test_split` разбейте данные (`X_data_include`, `y_include`) на обучающую (`X_include_train`, `y_include_train`), валидационную (`X_include_valid`, `y_include_valid`) и тестовую выборки (`X_include_test`, `y_include_test`) с сохранением соотншений классов:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X_include_train, X_include_test, y_include_train, y_include_test = # Ваш код здесь\n",
"\n",
"X_include_train, X_include_valid, y_include_train, y_include_valid = # Ваш код здесь"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обратите внимание, что `X_means` и `X_stds` перерасчитываются уже на другой по составу обучающей выборке."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X_means = # Ваш код здесь\n",
"X_stds = # Ваш код здесь\n",
"\n",
"X_include_train = # Ваш код здесь\n",
"X_include_valid = # Ваш код здесь\n",
"X_include_test = # Ваш код здесь"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "V2MUFTkczAU2"
},
"source": [
"По аналогии с предыдущим пунктом реализуйте обучение автоассоциативных сетей с двумя и тремя нейронами в «узком горле».\n",
"\n", "\n",
"Результаты выходов энкодеров в обоих случаях также сохраните в отдельные бинарные файлы." "Результаты выходов энкодеров в обоих случаях также сохраните в отдельные бинарные файлы."
] ]
@@ -651,7 +827,9 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "qnSnyqNGzAU2"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"# Ваш код здесь" "# Ваш код здесь"
@@ -660,12 +838,41 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {
"id": "MMW6h5P1zAU3"
},
"outputs": [], "outputs": [],
"source": [ "source": [
"# Ваш код здесь" "# Ваш код здесь"
] ]
}, },
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обратите внимание, что тензор `X_data_tensor` снова получен из исходных данных `X_data_filtered`, но уже с пересчитанными `X_means` и `X_stds` (без одного класса):"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "1FjpRmrCaOp4"
},
"outputs": [],
"source": [
"X_data_tensor = torch.tensor(((X_data_filtered - X_means) / X_stds).values).float()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"encoded_2d_include = # Ваш код здесь"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
@@ -678,8 +885,38 @@
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "code",
"execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [],
"source": [
"# Ваш код здесь"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"encoded_3d_include = # Ваш код здесь"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"np.save('encoded_2d_include.npy', encoded_2d_include)\n",
"np.save('encoded_3d_include.npy', encoded_3d_include)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-BXig37czAU6"
},
"source": [ "source": [
"### Литература:\n", "### Литература:\n",
"1. Бородкин А.А., Елисеев В.Л. Основы и применение искусственных нейронных сетей. Сборник лабораторных работ: методическое пособие. – М.: Издательский дом МЭИ, 2017.\n", "1. Бородкин А.А., Елисеев В.Л. Основы и применение искусственных нейронных сетей. Сборник лабораторных работ: методическое пособие. – М.: Издательский дом МЭИ, 2017.\n",
@@ -689,10 +926,10 @@
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {
"source": [ "id": "-KIqZEHczAU6"
" " },
] "source": []
} }
], ],
"metadata": { "metadata": {