From 4ea5a020991975e96dd948477b176876799a9ef5 Mon Sep 17 00:00:00 2001 From: sasha Date: Thu, 13 Nov 2025 08:10:08 +0300 Subject: [PATCH] add .ipynb file --- labworks/LW2/lw2.ipynb | 474 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 474 insertions(+) create mode 100644 labworks/LW2/lw2.ipynb diff --git a/labworks/LW2/lw2.ipynb b/labworks/LW2/lw2.ipynb new file mode 100644 index 0000000..ccb6f47 --- /dev/null +++ b/labworks/LW2/lw2.ipynb @@ -0,0 +1,474 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mWA2s-HPT5L9" + }, + "outputs": [], + "source": [ + "10 % 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8_zCzPa3T_VE" + }, + "outputs": [], + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hBLeHBeiUOAy" + }, + "outputs": [], + "source": [ + "import os\n", + "os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab2')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dREn2NGEUfIy" + }, + "outputs": [], + "source": [ + "!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/lab02_lib.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FVyzYbb6Up8S" + }, + "outputs": [], + "source": [ + "!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/letter_train.txt\n", + "!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/letter_test.txt\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "QGPmkl3FU2Et" + }, + "outputs": [], + "source": [ + "# импорт модулей\n", + "import numpy as np\n", + "import lab02_lib as lib\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Hlmf3aY4dbg6" + }, + "source": [ + "2. Сгенерировать индивидуальный набор двумерных данных в пространстве\n", + "признаков с координатами центра (k, k), где k – номер бригады. Вывести\n", + "полученные данные на рисунок и в консоль.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "r7gSmNgWdXo2" + }, + "outputs": [], + "source": [ + "k = 10\n", + "data = lib.datagen(k, k, 1000, 2)\n", + "print('Размерность данных:', data.shape)\n", + "print('Пример данных:', data)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Na7tT2TReMcu" + }, + "source": [ + "3-4. Создать и обучить автокодировщик AE1 простой архитектуры, выбрав\n", + "небольшое количество эпох обучения. Зафиксировать в таблице вида\n", + "табл.1 количество скрытых слоёв и нейронов в них.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "emmU0JGJeOVD" + }, + "outputs": [], + "source": [ + "# AE1 — простая сеть, меньше эпох\n", + "patience = 300\n", + "ae1_trained, IRE1, IREth1 = lib.create_fit_save_ae(\n", + " data, 'out/AE1.h5', 'out/AE1_ire_th.txt',\n", + " 1000, False, patience, verbose_every_n_epochs = 100, early_stopping_delta = 0.001\n", + ")\n", + "lib.ire_plot('training', IRE1, IREth1, 'AE1')\n", + "print('AE1 IREth =', IREth1)\n", + "\n", + "#1\n", + "#1" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1Pu38Xylsvjr" + }, + "source": [ + "5-6. Создать и обучить второй автокодировщик AE2 с усложненной\n", + "архитектурой, задав большее количество эпох обучения.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CToPhfVgs4Ya" + }, + "outputs": [], + "source": [ + "# AE2 — более сложная сеть, больше эпох\n", + "ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(\n", + " data, 'out/AE2.h5', 'out/AE2_ire_th.txt',\n", + " 3000, False, patience, verbose_every_n_epochs = 500, early_stopping_delta = 0.001\n", + ")\n", + "lib.ire_plot('training', IRE2, IREth2, 'AE2')\n", + "print('AE2 IREth =', IREth2)\n", + "\n", + "# 5 3 2 3 5" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aiMYnnw5ybt2" + }, + "source": [ + "8. Рассчитать характеристики качества обучения EDCA для AE1 и AE2.\n", + "Визуализировать и сравнить области пространства признаков,\n", + "распознаваемые автокодировщиками AE1 и AE2. Сделать вывод о\n", + "пригодности AE1 и AE2 для качественного обнаружения аномалий." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "N6F98jegybGj" + }, + "outputs": [], + "source": [ + "#AE1\n", + "numb_square = 20\n", + "xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Rc5-WXjC9rAk" + }, + "outputs": [], + "source": [ + "#AE2\n", + "numb_square = 20\n", + "xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "id6lkBOi9y1v" + }, + "outputs": [], + "source": [ + "#Сравнение\n", + "lib.plot2in1(data, xx, yy, Z1, Z2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NZRB1Vg1y0ta" + }, + "source": [ + "9. Изучить сохраненный набор данных и пространство признаков. Создать\n", + "тестовую выборку, состоящую, как минимум, из 4ёх элементов, не\n", + "входящих в обучающую выборку. Элементы должны быть такими, чтобы\n", + "AE1 распознавал их как норму, а AE2 детектировал как аномалии." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "on7YZMauy4ZS" + }, + "outputs": [], + "source": [ + "with open('data_test.txt', 'w') as file:\n", + " file.write(\"10.5 9.5\\n\")\n", + " file.write(\"9.0 10.2\\n\")\n", + " file.write(\"9.6 10.5\\n\")\n", + " file.write(\"9.0 9.0\\n\")\n", + "data_test = np.loadtxt('data_test.txt', dtype=float)\n", + "print(data_test)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8FuMOxLu_wVZ" + }, + "outputs": [], + "source": [ + "data_test = np.loadtxt('data_test.txt', dtype=float)\n", + "print(data_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cib_DiqazAWM" + }, + "source": [ + "10. Применить обученные автокодировщики AE1 и AE2 к тестовым данным\n", + "и вывести значения ошибки реконструкции для каждого элемента тестовой\n", + "выборки относительно порога на график и в консоль." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IprWT-m4zDR1" + }, + "outputs": [], + "source": [ + "# AE1\n", + "predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1)\n", + "lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1)\n", + "lib.ire_plot('test', ire1, IREth1, 'AE1')\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3jD3wEhr5f6t" + }, + "outputs": [], + "source": [ + "# AE2\n", + "predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2)\n", + "lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2)\n", + "lib.ire_plot('test', ire2, IREth2, 'AE2')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "67myAxUazRQ1" + }, + "source": [ + "11. Визуализировать элементы обучающей и тестовой выборки в областях\n", + "пространства признаков, распознаваемых автокодировщиками AE1 и AE2." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jzFhJTrNzS4A" + }, + "outputs": [], + "source": [ + "lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hpP0MebIzZFi" + }, + "source": [ + "12-13 таблицы и выводы\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RF2lQ2NMzdIZ" + }, + "source": [ + "Часть 2\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R_YSpxv0zj0W" + }, + "source": [ + "2. Загрузить многомерную обучающую выборку реальных данных\n", + "name_train.txt." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "XRZI769HzjMQ" + }, + "outputs": [], + "source": [ + "train = np.loadtxt('letter_train.txt', dtype=float)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sDimn5kIzvff" + }, + "source": [ + "3. Вывести полученные данные и их размерность в консоли." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "dbb7jXUjzzNT" + }, + "outputs": [], + "source": [ + "print('train.shape =', train.shape)\n", + "print('Пример train:', train)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cCoweu23z4sx" + }, + "source": [ + "4-6. Создать и обучить автокодировщик с подходящей для данных\n", + "архитектурой. Выбрать необходимое количество эпох обучения" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "mqiCTs1H0HL5" + }, + "outputs": [], + "source": [ + "patience = 5000\n", + "ae3_trained, IRE3, IREth3 = lib.create_fit_save_ae(\n", + " train, 'out/AE3.h5', 'out/AE3_ire_th.txt',\n", + " 100000, False, patience, verbose_every_n_epochs = 1000, early_stopping_delta = 0.001, early_stopping_value = 0.01\n", + ")\n", + "\n", + "\n", + "# 32 16 12 8 7 8 12 16 32\n", + "\n", + "# 30 24 19 15 11 15 19 24 30\n", + "\n", + "# 28 21 16 12 9 12 16 21 28\n", + "# 32 26 22 18 15 12 15 18 22 26 32\n", + "# 35 28 21 14 7 14 21 28 35" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "S-bT1nnDckWS" + }, + "outputs": [], + "source": [ + "lib.ire_plot('training', IRE3, IREth3, 'AE3')\n", + "print('AE3 IREth =', IREth3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HUoWlB7T4lPH" + }, + "source": [ + "8. Подать тестовую выборку на вход обученного автокодировщика для\n", + "обнаружения аномалий. Вывести график ошибки реконструкции\n", + "элементов тестовой выборки относительно порога." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "m9o31pOLG5IR" + }, + "outputs": [], + "source": [ + "test = np.loadtxt('letter_test.txt', dtype=float)\n", + "print('test.shape =', test.shape)\n", + "print('Пример train:', test)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "gyGWxfCt4jT5" + }, + "outputs": [], + "source": [ + "predicted_labels3, ire3 = lib.predict_ae(ae3_trained, test, IREth3)\n", + "lib.anomaly_detection_ae(predicted_labels3, ire3, IREth3)\n", + "lib.ire_plot('test', ire3, IREth3, 'AE3')" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "authorship_tag": "ABX9TyP7I3xYtv8vwrxTVttwH659", + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}