# Отчёт по лабораторной работе №2

**Касимов Азамат, Немыкин Никита — А-01-22**

---

## Задание 1

### 1) В среде Google Colab создали новый блокнот (notebook). Импортировали необходимые для работы библиотеки и модули.

```python
# импорт модулей
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab2')
```

```python
import lab02_lib as lib
```

### 2) Сгенерировали индивидуальный набор двумерных данных в пространстве признаков с координатами центра (6, 6), где 6 – номер бригады. Вывели полученные данные на рисунок и в консоль.

```python
# генерация датасета
data = lib.datagen(6, 6, 1000, 2)

# вывод данных и размерности
print('Исходные данные:')
print(data)
print('Размерность данных:')
print(data.shape)
```

![o](images/1.png)

```output
Исходные данные:
[[5.85155463 5.90866047]
 [5.89835027 5.87217268]
 [5.95502834 6.13788939]
 ...
 [5.97194799 6.15187645]
 [6.24367408 6.18137502]
 [6.04890409 6.24554664]]
Размерность данных:
(1000, 2)
```

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

```python
# обучение AE1
patience = 300
ae1_trained, IRE1, IREth1 = lib.create_fit_save_ae(data,'out/AE1.h5','out/AE1_ire_th.txt',
1000, True, patience)
```


4) Зафиксировали ошибку MSE, на которой обучение завершилось. Построили график ошибки реконструкции обучающей выборки. Зафиксировали порог ошибки реконструкции – порог обнаружения аномалий.

Ошибка MSE_AE1 = 16.0985

```python
# Построение графика ошибки реконструкции
lib.ire_plot('training', IRE1, IREth1, 'AE1')
```

![o](images/2.png)

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

```python
# обучение AE2
ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ire_th.txt',
3000, True, patience)
```

### 6) Зафиксировали ошибку MSE, на которой обучение завершилось. Построили график ошибки реконструкции обучающей выборки. Зафиксировали второй порог ошибки реконструкции – порог обнаружения аномалий.

Ошибка MSE_AE2 = 0.0112

```python
# Построение графика ошибки реконструкции
lib.ire_plot('training', IRE2, IREth2, 'AE2')
```

![o](images/3.png)

### 7) Рассчитали характеристики качества обучения EDCA для AE1 и AE2. Визуализировали и сравнили области пространства признаков, распознаваемые автокодировщиками AE1 и AE2. Сделали вывод о пригодности AE1 и AE2 для качественного обнаружения аномалий.

```python
# построение областей покрытия и границ классов
# расчет характеристик качества обучения
numb_square = 20
xx, yy, Z1 = lib.square_calc(numb_square, data, ae1_trained, IREth1, '1', True)
```
![o](images/4.png)

```output
amount:  21
amount_ae:  301
```

![o](images/5.png)

![o](images/6.png)

```output

Оценка качества AE1
IDEAL = 0. Excess:  13.333333333333334
IDEAL = 0. Deficit:  0.0
IDEAL = 1. Coating:  1.0
summa:  1.0
IDEAL = 1. Extrapolation precision (Approx):  0.06976744186046512
```

```python
# построение областей покрытия и границ классов
# расчет характеристик качества обучения
numb_square = 20
xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True)
```

![o](images/7.png)

```output
amount:  21
amount_ae:  36
```

![o](images/8.png)

![o](images/9.png)

```output

Оценка качества AE2
IDEAL = 0. Excess:  0.7142857142857143
IDEAL = 0. Deficit:  0.0
IDEAL = 1. Coating:  1.0
summa:  1.0
IDEAL = 1. Extrapolation precision (Approx):  0.5833333333333335
```

```python
# сравнение характеристик качества обучения и областей аппроксимации
lib.plot2in1(data, xx, yy, Z1, Z2)
```

![o](images/10.png)

### 8) Если автокодировщик AE2 недостаточно точно аппроксимирует область обучающих данных, то подобрать подходящие параметры автокодировщика и повторить шаги (6) – (8).

Полученные показатели EDCA для автокодировщика AE2 нас устраивают.

### 9) Изучили сохраненный набор данных и пространство признаков. Создали тестовую выборку, состоящую, как минимум, из 4ёх элементов, не входящих в обучающую выборку. Элементы должны быть такими, чтобы AE1 распознавал их как норму, а AE2 детектировал как аномалии.

```python
# загрузка тестового набора
data_test = np.loadtxt('data_test.txt', dtype=float)
print(data_test)
```

```output
[[4.85155463 4.90866047]
 [4.89835027 4.87217268]
 [4.95502834 4.13788939]
 [4.9958611  4.8697867 ]]
```

### 10) Применили обученные автокодировщики AE1 и AE2 к тестовым данным и вывели значения ошибки реконструкции для каждого элемента тестовой выборки относительно порога на график и в консоль.

```python
# тестирование АE1
predicted_labels1, ire1 = lib.predict_ae(ae1_trained, data_test, IREth1)
```

```python
# тестирование АE1
lib.anomaly_detection_ae(predicted_labels1, ire1, IREth1)
lib.ire_plot('test', ire1, IREth1, 'AE1')
```

```output
Аномалий не обнаружено
```

![o](images/11.png)

```python
# тестирование АE2
predicted_labels2, ire2 = lib.predict_ae(ae2_trained, data_test, IREth2)
```

```python
# тестирование АE2
lib.anomaly_detection_ae(predicted_labels2, ire2, IREth2)
lib.ire_plot('test', ire2, IREth2, 'AE2')
```

```output

i         Labels    IRE       IREth     
0         [1.]      [1.48]    0.44      
1         [1.]      [1.47]    0.44      
2         [1.]      [2.04]    0.44      
3         [1.]      [1.41]    0.44      
Обнаружено  4.0  аномалий
```

![o](images/12.png)

### 11) Визуализировали элементы обучающей и тестовой выборки в областях пространства признаков, распознаваемых автокодировщиками AE1 и AE2.

```python
lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)
```

![o](images/13.png)

### 12) Результаты исследования занесли в таблицу:
Табл. 1 Результаты задания №1

|      | Количество<br>скрытых слоев | Количество<br>нейронов в скрытых слоях | Количество<br>эпох обучения | Ошибка<br>MSE_stop | Порог ошибки<br>реконструкции | Значение показателя<br>Excess | Значение показателя<br>Approx | Количество обнаруженных<br>аномалий |
|-----:|------------------------------|----------------------------------------|-----------------------------|--------------------|-------------------------------|-------------------------------|--------------------------------|-------------------------------------|
| AE1  | 1                            | 1                            | 1000                        | 16.0985             | 6                         | 13.333333333333334                          | 0.06976744186046512                           | 0                                   |
| AE2  | 5                            | 3,2,1,2,3                                | 3000                          | 0.0112             | 0.44                         | 0.7142857142857143                          | 0.5833333333333335                           | 4                                   |

### 13) Сделали выводы о требованиях к:
- данным для обучения,
- архитектуре автокодировщика,
- количеству эпох обучения,
- ошибке MSE_stop, приемлемой для останова обучения,
- ошибке реконструкции обучающей выборки (порогу обнаружения
аномалий),
- характеристикам качества обучения EDCA одноклассового
классификатора

для качественного обнаружения аномалий в данных.

1) Данные для обучения должны быть без аномалий, чтобы автокодировщик смог рассчитать верное пороговое значение
2) Архитектура автокодировщика должна постепенно сужатся к бутылочному горлышку,а затем постепенно возвращатся к исходным выходным размерам, кол-во скрытых слоев 3-5
3) В рамках данного набора данных оптимальное кол-во эпох 3000 с patience 300 эпох
4) Оптимальная ошибка MSE-stop в районе 0.01, желательно не меньше для предотвращения переобучения
5) Значение порога в районе 0.45
6) Значение Excess не больше 0.75, значение Deficit равное 0, значение Coating равное 1, значение Approx не меньше 0.58

## Задание 2

### 1) Изучить описание своего набора реальных данных, что он из себя представляет

Бригада 6 => набор данных Cardio. Это реальный набор данных, который состоит из измерений частоты сердечных сокращений плода и
сокращений матки на кардиотокограммах, классифицированных экспертами
акушерами. Исходный набор данных предназначен для классификации. В нем
представлено 3 класса: «норма», «подозрение» и «патология». Для обнаружения
аномалий класс «норма» принимается за норму, класс «патология» принимается за
аномалии, а класс «подозрение» был отброшен.

| Количество<br>признаков | Количество<br>примеров | Количество<br>нормальных примеров | Количество<br>аномальных примеров |
|-------------------------:|-----------------------:|----------------------------------:|-----------------------------------:|
| 21                       | 1764                   | 1655                               | 109                                |

### 2) Загрузить многомерную обучающую выборку реальных данных Cardio.txt.

```python
# загрузка обчуающей выборки
train = np.loadtxt('cardio_train.txt', dtype=float)
```

### 3) Вывести полученные данные и их размерность в консоли.

```python
print('train:\n', train)
print('train.shape:', np.shape(train))
```

```output
train:
 [[ 0.00491231  0.69319077 -0.20364049 ...  0.23149795 -0.28978574
  -0.49329397]
 [ 0.11072935 -0.07990259 -0.20364049 ...  0.09356344 -0.25638541
  -0.49329397]
 [ 0.21654639 -0.27244466 -0.20364049 ...  0.02459619 -0.25638541
   1.1400175 ]
 ...
 [ 0.85144861 -0.91998844 -0.20364049 ...  0.57633422 -0.65718941
   1.1400175 ]
 [ 0.85144861 -0.91998844 -0.20364049 ...  0.57633422 -0.62378908
  -0.49329397]
 [ 1.0630827  -0.51148142 -0.16958144 ...  0.57633422 -0.65718941
  -0.49329397]]
train.shape: (1654, 21)
```

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

```python
# **kwargs
# verbose_every_n_epochs - отображать прогресс каждые N эпох (по умолчанию - 1000)
# early_stopping_delta - дельта для ранней остановки (по умолчанию - 0.01)
# early_stopping_value = значение для ранней остановки (по умолчанию -  0.0001)

from time import time

patience = 4000
start = time()
ae3_v1_trained, IRE3_v1, IREth3_v1 = lib.create_fit_save_ae(train,'out/AE3_V1.h5','out/AE3_v1_ire_th.txt',
100000, False, patience, early_stopping_delta = 0.001)
print("Время на обучение: ", time() - start)
```


```output

Время на обучение:  1232.8548789024353
```

### 5) Зафиксировать ошибку MSE, на которой обучение завершилось. Построить график ошибки реконструкции обучающей выборки. Зафиксировать порог ошибки реконструкции – порог обнаружения аномалий.

Скрытых слоев 7, нейроны: 46->26->14->10->14->26->48

Ошибка MSE_AE3_v1 = 0.0137

```python
lib.ire_plot('training', IRE3_v1, IREth3_v1, 'AE3_v1')
```

![o](images/14.png)

### 6) Сделать вывод о пригодности обученного автокодировщика для качественного обнаружения аномалий. Если порог ошибки реконструкции слишком велик, то подобрать подходящие параметры автокодировщика и повторить шаги (4) – (6).

```python
# **kwargs
# verbose_every_n_epochs - отображать прогресс каждые N эпох (по умолчанию - 1000)
# early_stopping_delta - дельта для ранней остановки (по умолчанию - 0.01)
# early_stopping_value = значение для ранней остановки (по умолчанию -  0.0001)

from time import time

patience = 4000
start = time()
ae3_v2_trained, IRE3_v2, IREth3_v2 = lib.create_fit_save_ae(train,'out/AE3_V2.h5','out/AE3_v2_ire_th.txt',
100000, False, patience, early_stopping_delta = 0.001)
print("Время на обучение: ", time() - start)
```

```output

Время на обучение:  1298.1322848796844
```

Скрытых слоев 11, нейроны: 48->36->28->22->16->12->16->22->28->36->48

Ошибка MSE_AE3_v1 = 0.0077

```python
# Построение графика ошибки реконструкции
lib.ire_plot('training', IRE3_v2, IREth3_v2, 'AE3_v2')
```

![o](images/15.png)

### 7) Изучить и загрузить тестовую выборку Cardio.txt.

```python
#загрузка тестовой выборки
test = np.loadtxt('cardio_test.txt', dtype=float)
print('\n test:\n', test)
print('test.shape:', np.shape(test))
```

```output

 test:
 [[ 0.21654639 -0.65465178 -0.20364049 ... -2.0444214   4.987467
  -0.49329397]
 [ 0.21654639 -0.5653379  -0.20364049 ... -2.1133887   6.490482
  -0.49329397]
 [-0.3125388  -0.91998844  6.9653692  ... -1.1478471   3.9186563
  -0.49329397]
 ...
 [-0.41835583 -0.91998844 -0.16463485 ... -1.4926834   0.24461959
  -0.49329397]
 [-0.41835583 -0.91998844 -0.15093411 ... -1.4237162   0.14441859
  -0.49329397]
 [-0.41835583 -0.91998844 -0.20364049 ... -1.2857816   3.5846529
  -0.49329397]]
test.shape: (109, 21)
```

### 8) Подать тестовую выборку на вход обученного автокодировщика для обнаружения аномалий. Вывести график ошибки реконструкции элементов тестовой выборки относительно порога.

```python
# тестирование АE3
predicted_labels3_v1, ire3_v1 = lib.predict_ae(ae3_v1_trained, test, IREth3_v1)
```

```python
# Построение графика ошибки реконструкции
lib.ire_plot('test', ire3_v1, IREth3_v1, 'AE3_v1')
```

![o](images/16.png)

```python
# тестирование АE3
predicted_labels3_v2, ire3_v2 = lib.predict_ae(ae3_v2_trained, test, IREth3_v2)
```

```python
# Построение графика ошибки реконструкции
lib.ire_plot('test', ire3_v2, IREth3_v2, 'AE3_v2')
```

![o](images/17.png)

```python
# тестирование АE1
lib.anomaly_detection_ae(predicted_labels3_v1, IRE3_v1, IREth3_v1)
```

```output

i         Labels    IRE       IREth     
0         [1.]      0.62      1.82      
1         [1.]      0.81      1.82      
2         [1.]      0.68      1.82      
3         [1.]      0.68      1.82      
4         [1.]      1.14      1.82      
5         [1.]      0.64      1.82      
6         [1.]      0.84      1.82      
7         [1.]      0.87      1.82      
8         [1.]      0.51      1.82      
9         [1.]      0.46      1.82      
10        [1.]      0.5       1.82      
11        [1.]      0.67      1.82      
12        [1.]      0.74      1.82      
13        [1.]      0.9       1.82      
14        [1.]      0.66      1.82      
15        [1.]      1.33      1.82      
16        [1.]      0.66      1.82      
17        [1.]      0.5       1.82      
18        [1.]      0.64      1.82      
19        [1.]      0.5       1.82      
20        [1.]      0.4       1.82      
21        [1.]      0.49      1.82      
22        [1.]      0.43      1.82      
23        [1.]      0.61      1.82      
24        [1.]      0.43      1.82      
25        [1.]      0.98      1.82      
26        [1.]      0.49      1.82      
27        [1.]      0.92      1.82      
28        [1.]      0.91      1.82      
29        [0.]      0.41      1.82      
30        [1.]      0.55      1.82      
31        [1.]      0.55      1.82      
32        [1.]      0.58      1.82      
33        [1.]      0.39      1.82      
34        [1.]      0.73      1.82      
35        [1.]      0.4       1.82      
36        [1.]      0.22      1.82      
37        [1.]      0.62      1.82      
38        [0.]      0.36      1.82      
39        [0.]      0.31      1.82      
40        [0.]      0.38      1.82      
41        [0.]      0.5       1.82      
42        [1.]      0.84      1.82      
43        [1.]      0.38      1.82      
44        [1.]      1.03      1.82      
45        [1.]      0.3       1.82      
46        [1.]      0.3       1.82      
47        [1.]      0.8       1.82      
48        [0.]      0.67      1.82      
49        [1.]      0.6       1.82      
50        [1.]      0.59      1.82      
51        [1.]      0.66      1.82      
52        [1.]      0.71      1.82      
53        [1.]      0.48      1.82      
54        [0.]      0.25      1.82      
55        [1.]      0.95      1.82      
56        [1.]      0.33      1.82      
57        [1.]      0.6       1.82      
58        [1.]      0.6       1.82      
59        [1.]      0.71      1.82      
60        [1.]      0.39      1.82      
61        [0.]      0.33      1.82      
62        [0.]      0.57      1.82      
63        [0.]      0.93      1.82      
64        [0.]      0.78      1.82      
65        [0.]      0.4       1.82      
66        [1.]      0.44      1.82      
67        [1.]      0.71      1.82      
68        [1.]      0.57      1.82      
69        [1.]      0.32      1.82      
70        [1.]      0.27      1.82      
71        [1.]      0.47      1.82      
72        [1.]      0.62      1.82      
73        [1.]      0.46      1.82      
74        [1.]      0.61      1.82      
75        [1.]      1.2       1.82      
76        [1.]      0.38      1.82      
77        [1.]      1.46      1.82      
78        [1.]      0.58      1.82      
79        [1.]      0.92      1.82      
80        [1.]      0.51      1.82      
81        [1.]      0.9       1.82      
82        [1.]      0.99      1.82      
83        [1.]      0.56      1.82      
84        [1.]      0.55      1.82      
85        [1.]      0.58      1.82      
86        [1.]      0.76      1.82      
87        [1.]      0.65      1.82      
88        [1.]      0.34      1.82      
89        [1.]      0.98      1.82      
90        [1.]      0.52      1.82      
91        [1.]      0.22      1.82      
92        [1.]      0.57      1.82      
93        [1.]      0.46      1.82      
94        [1.]      0.29      1.82      
95        [1.]      0.37      1.82      
96        [1.]      0.38      1.82      
97        [1.]      0.51      1.82      
98        [1.]      0.54      1.82      
99        [1.]      0.61      1.82      
100       [1.]      0.47      1.82      
101       [1.]      0.57      1.82      
102       [1.]      0.48      1.82      
103       [1.]      0.46      1.82      
104       [1.]      0.45      1.82      
105       [1.]      0.43      1.82      
106       [1.]      0.19      1.82      
107       [1.]      0.24      1.82      
108       [1.]      0.71      1.82      
Обнаружено  97.0  аномалий
```

Для AE3_v1 точность составляет 92%

```python
# тестирование АE2
lib.anomaly_detection_ae(predicted_labels3_v2, IRE3_v2, IREth3_v2)
```

```output

i         Labels    IRE       IREth     
0         [1.]      0.37      1.15      
1         [1.]      0.43      1.15      
2         [1.]      0.36      1.15      
3         [1.]      0.57      1.15      
4         [1.]      1.03      1.15      
5         [1.]      0.37      1.15      
6         [1.]      0.56      1.15      
7         [1.]      0.6       1.15      
8         [1.]      0.5       1.15      
9         [1.]      0.5       1.15      
10        [1.]      0.28      1.15      
11        [1.]      0.57      1.15      
12        [1.]      0.69      1.15      
13        [1.]      0.54      1.15      
14        [1.]      0.89      1.15      
15        [1.]      0.48      1.15      
16        [1.]      0.4       1.15      
17        [1.]      0.48      1.15      
18        [1.]      0.37      1.15      
19        [1.]      0.18      1.15      
20        [1.]      0.48      1.15      
21        [1.]      0.31      1.15      
22        [1.]      0.39      1.15      
23        [1.]      0.52      1.15      
24        [1.]      0.35      1.15      
25        [1.]      0.62      1.15      
26        [1.]      0.28      1.15      
27        [1.]      0.44      1.15      
28        [1.]      0.53      1.15      
29        [0.]      0.38      1.15      
30        [1.]      0.24      1.15      
31        [1.]      0.6       1.15      
32        [1.]      0.25      1.15      
33        [1.]      0.18      1.15      
34        [1.]      0.47      1.15      
35        [1.]      0.25      1.15      
36        [1.]      0.13      1.15      
37        [1.]      0.38      1.15      
38        [0.]      0.21      1.15      
39        [0.]      0.21      1.15      
40        [0.]      0.28      1.15      
41        [1.]      0.51      1.15      
42        [1.]      0.67      1.15      
43        [1.]      0.2       1.15      
44        [1.]      0.67      1.15      
45        [1.]      0.31      1.15      
46        [1.]      0.31      1.15      
47        [1.]      0.25      1.15      
48        [1.]      0.25      1.15      
49        [1.]      0.29      1.15      
50        [1.]      0.28      1.15      
51        [1.]      0.31      1.15      
52        [1.]      0.41      1.15      
53        [1.]      0.35      1.15      
54        [0.]      0.19      1.15      
55        [1.]      0.43      1.15      
56        [1.]      0.25      1.15      
57        [1.]      0.52      1.15      
58        [1.]      0.61      1.15      
59        [1.]      0.49      1.15      
60        [1.]      0.39      1.15      
61        [0.]      0.31      1.15      
62        [0.]      0.42      1.15      
63        [0.]      0.47      1.15      
64        [0.]      0.57      1.15      
65        [0.]      0.21      1.15      
66        [1.]      0.37      1.15      
67        [1.]      0.58      1.15      
68        [1.]      0.19      1.15      
69        [1.]      0.34      1.15      
70        [1.]      0.18      1.15      
71        [1.]      0.26      1.15      
72        [1.]      0.3       1.15      
73        [1.]      0.3       1.15      
74        [1.]      0.51      1.15      
75        [1.]      0.51      1.15      
76        [1.]      0.22      1.15      
77        [1.]      1.05      1.15      
78        [1.]      0.36      1.15      
79        [1.]      0.81      1.15      
80        [1.]      0.38      1.15      
81        [1.]      0.56      1.15      
82        [1.]      0.55      1.15      
83        [1.]      0.3       1.15      
84        [1.]      0.44      1.15      
85        [1.]      0.37      1.15      
86        [1.]      0.43      1.15      
87        [1.]      0.39      1.15      
88        [1.]      0.27      1.15      
89        [1.]      0.74      1.15      
90        [1.]      0.44      1.15      
91        [1.]      0.2       1.15      
92        [1.]      0.45      1.15      
93        [1.]      0.24      1.15      
94        [1.]      0.25      1.15      
95        [1.]      0.41      1.15      
96        [1.]      0.43      1.15      
97        [1.]      0.35      1.15      
98        [1.]      0.41      1.15      
99        [1.]      0.42      1.15      
100       [1.]      0.5       1.15      
101       [1.]      0.42      1.15      
102       [1.]      0.47      1.15      
103       [1.]      0.49      1.15      
104       [1.]      0.29      1.15      
105       [1.]      0.14      1.15      
106       [1.]      0.16      1.15      
107       [1.]      0.13      1.15      
108       [1.]      0.73      1.15      
Обнаружено  99.0  аномалий
```

Для AE3_v2 точность составляет 92%

### 9) Если результаты обнаружения аномалий не удовлетворительные (обнаружено менее 70% аномалий), то подобрать подходящие параметры автокодировщика и повторить шаги (4) – (9)

Результаты обнаружения аномалий удовлетворены.

### 10) Параметры наилучшего автокодировщика и результаты обнаружения аномалий занести в таблицу:
Табл. 2 Результаты задания №2

| Dataset name | Количество<br>скрытых слоев | Количество<br>нейронов в скрытых слоях | Количество<br>эпох обучения | Ошибка<br>MSE_stop | Порог ошибки<br>реконструкции | % обнаруженных<br>аномалий |
|:-------------|:-----------------------------|:----------------------------------------|:-----------------------------|:-------------------|:-------------------------------|:---------------------------|
| Cardio       | 11                             | 48, 36, 28, 22, 16, 10, 16, 22, 28, 36, 48              | 100000                      | 0.0077              | 1                           | 99%                      |

### 11) Сделать выводы о требованиях к:
- данным для обучения,
- архитектуре автокодировщика,  
- количеству эпох обучения,
- ошибке MSE_stop, приемлемой для останова обучения,
- ошибке реконструкции обучающей выборки (порогу обнаружения
аномалий)

для качественного обнаружения аномалий в случае, когда размерность
пространства признаков высока.

1) Данные для обучения должны быть без аномалий, чтобы автокодировщик смог рассчитать верное пороговое значение
2) Архитектура автокодировщика должна постепенно сужатся к бутылочному горлышку,а затем постепенно возвращатся к исходным выходным размерам, кол-во скрытых слоев 7-11.
3) В рамках данного набора данных оптимальное кол-во эпох 100000 с patience 4000 эпох
4) Оптимальная ошибка MSE-stop в районе 0.001, желательно не меньше для предотвращения переобучения
5) Значение порога 1 - идеальное
