форкнуто от main/is_dnn
Родитель
dee57ad5f2
Сommit
4ea5a02099
@ -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
|
||||||
|
}
|
||||||
Загрузка…
Ссылка в новой задаче