Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

12 KiB

10 % 3
from google.colab import drive
drive.mount('/content/drive')
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab2')
!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/lab02_lib.py
!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/letter_train.txt
!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/letter_test.txt
# импорт модулей
import numpy as np
import lab02_lib as lib
  1. Сгенерировать индивидуальный набор двумерных данных в пространстве признаков с координатами центра (k, k), где k – номер бригады. Вывести полученные данные на рисунок и в консоль.
k = 10
data = lib.datagen(k, k, 1000, 2)
print('Размерность данных:', data.shape)
print('Пример данных:', data)

3-4. Создать и обучить автокодировщик AE1 простой архитектуры, выбрав небольшое количество эпох обучения. Зафиксировать в таблице вида табл.1 количество скрытых слоёв и нейронов в них.

# AE1 — простая сеть, меньше эпох
patience = 300
ae1_trained, IRE1, IREth1 = lib.create_fit_save_ae(
    data, 'out/AE1.h5', 'out/AE1_ire_th.txt',
    1000, False, patience,  verbose_every_n_epochs = 100, early_stopping_delta = 0.001
)
lib.ire_plot('training', IRE1, IREth1, 'AE1')
print('AE1 IREth =', IREth1)

#1
#1

5-6. Создать и обучить второй автокодировщик AE2 с усложненной архитектурой, задав большее количество эпох обучения.

# AE2 — более сложная сеть, больше эпох
ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(
    data, 'out/AE2.h5', 'out/AE2_ire_th.txt',
    3000, False, patience, verbose_every_n_epochs = 500, early_stopping_delta = 0.001
)
lib.ire_plot('training', IRE2, IREth2, 'AE2')
print('AE2 IREth =', IREth2)

# 5 3 2 3 5
  1. Рассчитать характеристики качества обучения EDCA для AE1 и AE2. Визуализировать и сравнить области пространства признаков, распознаваемые автокодировщиками AE1 и AE2. Сделать вывод о пригодности AE1 и AE2 для качественного обнаружения аномалий.
#AE1
numb_square = 20
xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True)
#AE2
numb_square = 20
xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True)
#Сравнение
lib.plot2in1(data, xx, yy, Z1, Z2)
  1. Изучить сохраненный набор данных и пространство признаков. Создать тестовую выборку, состоящую, как минимум, из 4ёх элементов, не входящих в обучающую выборку. Элементы должны быть такими, чтобы AE1 распознавал их как норму, а AE2 детектировал как аномалии.
with open('data_test.txt', 'w') as file:
    file.write("10.5 9.5\n")
    file.write("9.0 10.2\n")
    file.write("9.6 10.5\n")
    file.write("9.0 9.0\n")
data_test = np.loadtxt('data_test.txt', dtype=float)
print(data_test)
data_test = np.loadtxt('data_test.txt', dtype=float)
print(data_test)
  1. Применить обученные автокодировщики AE1 и AE2 к тестовым данным и вывести значения ошибки реконструкции для каждого элемента тестовой выборки относительно порога на график и в консоль.
# AE1
predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1)
lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1)
lib.ire_plot('test', ire1, IREth1, 'AE1')

# AE2
predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2)
lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2)
lib.ire_plot('test', ire2, IREth2, 'AE2')
  1. Визуализировать элементы обучающей и тестовой выборки в областях пространства признаков, распознаваемых автокодировщиками AE1 и AE2.
lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)

12-13 таблицы и выводы

Часть 2

  1. Загрузить многомерную обучающую выборку реальных данных name_train.txt.
train = np.loadtxt('letter_train.txt', dtype=float)
  1. Вывести полученные данные и их размерность в консоли.
print('train.shape =', train.shape)
print('Пример train:', train)

4-6. Создать и обучить автокодировщик с подходящей для данных архитектурой. Выбрать необходимое количество эпох обучения

patience = 5000
ae3_trained, IRE3, IREth3 = lib.create_fit_save_ae(
    train, 'out/AE3.h5', 'out/AE3_ire_th.txt',
    100000, False, patience, verbose_every_n_epochs = 1000, early_stopping_delta = 0.001, early_stopping_value = 0.01
)


# 32 16 12 8 7 8 12 16 32

# 30 24 19 15 11 15 19 24 30

# 28 21 16 12 9 12 16 21 28
# 32 26 22 18 15 12 15 18 22 26 32
# 35 28 21 14 7 14 21 28 35
lib.ire_plot('training', IRE3, IREth3, 'AE3')
print('AE3 IREth =', IREth3)
  1. Подать тестовую выборку на вход обученного автокодировщика для обнаружения аномалий. Вывести график ошибки реконструкции элементов тестовой выборки относительно порога.
test = np.loadtxt('letter_test.txt', dtype=float)
print('test.shape =', test.shape)
print('Пример train:', test)
predicted_labels3, ire3 = lib.predict_ae(ae3_trained, test, IREth3)
lib.anomaly_detection_ae(predicted_labels3, ire3, IREth3)
lib.ire_plot('test', ire3, IREth3, 'AE3')