Сравнить коммиты

...

7 Коммитов
main ... main

Автор SHA1 Сообщение Дата
wrldon fce75b6d65 IS_LR4
23 часов назад
wrldon 3b57f40c5c LR3
1 день назад
wrldon 8a89c64779 Выполненная лабораторная работа №2
4 недель назад
YusufovYB 890521d005 Выполненная Лабораторная работа №2
4 недель назад
Yunus ebfc38e26d report V2
2 месяцев назад
Yunus 5bfe82f81b new report V1
2 месяцев назад
Yunus a19dc9554b labwork1
2 месяцев назад

Двоичные данные
labworks/LW1/0n.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.1 KiB

Двоичные данные
labworks/LW1/2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 292 B

Двоичные данные
labworks/LW1/2_90.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 358 B

Двоичные данные
labworks/LW1/5n.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.1 KiB

Двоичные данные
labworks/LW1/6.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.1 KiB

Двоичные данные
labworks/LW1/6_90.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 1.2 KiB

Двоичные данные
labworks/LW1/7n.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.7 KiB

Двоичные данные
labworks/LW1/9n.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.1 KiB

Двоичные данные
labworks/LW1/H_2l_100.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Двоичные данные
labworks/LW1/H_2l_300.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Двоичные данные
labworks/LW1/H_2l_500.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Двоичные данные
labworks/LW1/H_3l_100_100.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 30 KiB

Двоичные данные
labworks/LW1/H_3l_100_50.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 30 KiB

Двоичные данные
labworks/LW1/H_p.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 32 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Двоичные данные
labworks/LW1/NN1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 16 KiB

Двоичные данные
labworks/LW1/NN2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

Двоичные данные
labworks/LW1/NN3.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 21 KiB

Двоичные данные
labworks/LW1/NN4.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 21 KiB

Двоичные данные
labworks/LW1/NN5.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 24 KiB

Двоичные данные
labworks/LW1/NN6.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 24 KiB

Двоичные данные
labworks/LW1/best_model_2l_100_LR1.keras

Двоичный файл не отображается.

Двоичные данные
labworks/LW1/p2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.1 KiB

Двоичные данные
labworks/LW1/p6.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.9 KiB

@ -0,0 +1,503 @@
# Отчет по лабораторной работе №1
Юсуфов Юнус,Романов Мирон , А-01-22
## 1. В среде GoogleColab создали блокнот. Импортировали все нужные модули для работы
```
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
import sklearn
from tensorflow.keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense
```
## 2. Загрузили датасет MNIST, содержащий рукописные цифры
```
from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
```
## 3. Разбили набор данных на обучающие и тестовые выборки
```
from sklearn.model_selection import train_test_split
```
* объединили в один набор
```
X = np.concatenate((X_train, X_test))
y = np.concatenate((y_train, y_test))
```
* разбили по вариантам
```
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size = 10000,train_size = 60000, random_state = 35)
```
* Вывели размерности
```
print('Shape of X train:', X_train.shape)
print('Shape of y train:', y_train.shape)
```
> Shape of X train: (60000, 28, 28)
> Shape of y train: (60000,)
## 4. Вывод элементов обучающих данных
* Вывел 4-е элемента выборки
```
print(y_train[0])
plt.imshow(X_train[0], cmap=plt.get_cmap('gray'))
plt.show()
print(y_train[1])
plt.imshow(X_train[1], cmap=plt.get_cmap('gray'))
plt.show()
print(y_train[2])
plt.imshow(X_train[2], cmap=plt.get_cmap('gray'))
plt.show()
print(y_train[3])
plt.imshow(X_train[3], cmap=plt.get_cmap('gray'))
plt.show()
```
0
![Первый элемент](0n.png)
9
![Второй элемент](9n.png)
7
![Третий элемен](7n.png)
5
![Четвертый элемент](5n.png)
## 5. Предобработка данных
* развернули каждое изображение 28*28 в вектор 784
```
num_pixels = X_train.shape[1] * X_train.shape[2]
X_train = X_train.reshape(X_train.shape[0], num_pixels) / 255
X_test = X_test.reshape(X_test.shape[0], num_pixels) / 255
print('Shape of transformed X train:', X_train.shape)
```
> Shape of transformed X train: (60000, 784)
* перевели метки в one-hot
```
from keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
print('Shape of transformed y train:', y_train.shape)
num_classes = y_train.shape[1]
```
> Shape of transformed y train: (60000, 10)
## 6. Реализация и обучение однослойной нейронной сети
* 6.1.Создали модель, объявиил ее объектом класса Sequential и скомпилировали.
```
model_p = Sequential()
model_p.add(Dense(units=num_classes,input_dim=num_pixels, activation='softmax'))
model_p.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
```
* 6.2. Вывели архитектуру модели
```
model_p.summary()
```
![Архитектура](NN1.png)
* Обучил модель
```
H_p = model_p.fit(X_train, y_train,batch_size = 512, validation_split=0.1, epochs=200)
```
* Вывели график функции ошибок
```
plt.plot(H_p.history['loss'])
plt.plot(H_p.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss','val_loss'])
plt.title('Loss by epochs')
plt.show()
```
![график функции ошибки](H_p.png)
## 7. Примененили модели к тестовым данным
```
scores=model_p.evaluate(X_test,y_test);
print('Loss on test data:',scores[0]);
print('Accuracy on test data:',scores[1])
```
> accuracy: 0.9178 - loss: 0.2926
>Loss on test data: 0.3017258942127228
>Accuracy on test data: 0.9168999791145325
## 8. Добавили один скрытый слой и повторил п. 6-7
* при 100 нейронах в скрытом слое
```
model_2l_100 = Sequential()
model_2l_100.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))
model_2l_100.add(Dense(units=num_classes, activation='softmax'))
model_2l_100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
model_2l_100.summary()
```
![Архитектура](NN2.png)
* Обучили модель
```
H_2l_100=model_2l_100.fit(X_train,y_train,batch_size =512, validation_split=0.1,epochs=200)
```
* Вывели график функции ошибки
```
plt.plot(H_2l_100.history['loss'])
plt.plot(H_2l_100.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss','val_loss'])
plt.title('Loss by epochs')
plt.show()
```
![график функции ошибки](H_2l_100.png)
```
scores=model_2l_100.evaluate(X_test,y_test);
print('Loss on test data:',scores[0]);
print('Accuracy on test data:',scores[1])
```
> accuracy: 0.9166 - loss: 0.3003
>Loss on test data: 0.30692651867866516
>Accuracy on test data: 0.9154999852180481
* при 300 нейронах в скрытом слое
```
model_2l_300 = Sequential()
model_2l_300.add(Dense(units=300,input_dim=num_pixels, activation='sigmoid'))
model_2l_300.add(Dense(units=num_classes, activation='softmax'))
model_2l_300.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
model_2l_300.summary()
```
![Архитектура](NN3.png)
* Обучили модель
```
H_2l_300=model_2l_300.fit(X_train,y_train,batch_size = 512,validation_split=0.1,epochs=200)
```
* Вывели график функции ошибки
```
plt.plot(H_2l_300.history['loss'])
plt.plot(H_2l_300.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss','val_loss'])
plt.title('Loss by epochs')
plt.show()
```
![график функции ошибки](H_2l_300.png)
```
scores=model_2l_300.evaluate(X_test,y_test);
print('Loss on test data:',scores[0]);
print('Accuracy on test data:',scores[1])
```
> - accuracy: 0.9155 - loss: 0.3049
>Loss on test data: 0.3119920790195465
>Accuracy on test data: 0.9139000177383423
* при 500 нейронах в скрытом слое
```
model_2l_500 = Sequential()
model_2l_500.add(Dense(units=500,input_dim=num_pixels, activation='sigmoid'))
model_2l_500.add(Dense(units=num_classes, activation='softmax'))
model_2l_500.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
model_2l_500.summary()
```
![Архитектура](NN4.png)
* Обучаем модель
```
H_2l_500=model_2l_500.fit(X_train,y_train,batch_size = 512,validation_split=0.1,epochs=200)
```
* Выводим график функции ошибки
```
plt.plot(H_2l_500.history['loss'])
plt.plot(H_2l_500.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss','val_loss'])
plt.title('Loss by epochs')
plt.show()
```
![график функции ошибки](H_2l_500.png)
```
scores=model_2l_500.evaluate(X_test,y_test);
print('Loss on test data:',scores[0]);
print('Accuracy on test data:',scores[1])
```
> accuracy: 0.9138 - loss: 0.3062
>Loss on test data: 0.3137015998363495
>Accuracy on test data: 0.9122999906539917
Наилучший результат получился у ИНС с 100 нейронами в скрытом слое (0.9154999852180481). В следующих пунктах будем строить 3-х слойную сеть на основе этой конфигурации.
## 9. Добавление второго скрытого слоя
* при 50 нейронах во втором скрытом слое
```
model_3l_100_50 = Sequential()
model_3l_100_50.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))
model_3l_100_50.add(Dense(units=50, activation='sigmoid'))
model_3l_100_50.add(Dense(units=num_classes, activation='softmax'))
model_3l_100_50.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
model_3l_100_50.summary()
```
![Архитектура](NN5.png)
* Обучили модель
```
H_3l_100_50=model_3l_100_50.fit(X_train,y_train,batch_size = 512,validation_split=0.1,epochs=200)
```
* Вывели график функции ошибки
```
plt.plot(H_3l_100_50.history['loss'])
plt.plot(H_3l_100_50.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss','val_loss'])
plt.title('Loss by epochs')
plt.show()
```
![график функции ошибки](H_3l_100_50.png)
```
scores=model_3l_100_50.evaluate(X_test,y_test);
print('Loss on test data:',scores[0]);
print('Accuracy on test data:',scores[1])
```
> - accuracy: 0.9067 - loss: 0.3484
>Loss on test data: 0.3573007583618164
>Accuracy on test data: 0.9021999835968018
* при 100 нейронах во втором скрытом слое
```
model_3l_100_100 = Sequential()
model_3l_100_100.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))
model_3l_100_100.add(Dense(units=100, activation='sigmoid'))
model_3l_100_100.add(Dense(units=num_classes, activation='softmax'))
model_3l_100_100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
model_3l_100_100.summary()
```
![Архитектура](NN6.png)
* Обучили модель
```
H_3l_100_100=model_3l_100_100.fit(X_train,y_train,batch_size = 512,validation_split=0.1,epochs=200)
```
* Вывели график функции ошибки
```
plt.plot(H_3l_100_100.history['loss'])
plt.plot(H_3l_100_100.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss','val_loss'])
plt.title('Loss by epochs')
plt.show()
```
![график функции ошибки](H_3l_100_100.png)
```
scores=model_3l_100_100.evaluate(X_test,y_test);
print('Loss on test data:',scores[0]);
print('Accuracy on test data:',scores[1])
```
> accuracy: 0.9062 - loss: 0.3420
>Loss on test data: 0.35140201449394226
>Accuracy on test data: 0.9049000144004822
| Кол-во слоёв | Нейронов в 1-м | Нейронов во 2-м | Accuracy |
|---------------|----------------|-----------------|-----|
| 0 | – | – | 0.9151999950408936 |
| 1 | 100 | – | 0.9154999852180481 |
| 1 | 300 | – | 0.9139000177383423 |
| 1 | 500 | – | 0.9122999906539917 |
| 2 | 100 | 50 | 0.9021999835968018 |
| 2 | 100 | 100 | 0.9049000144004822 |
По значениям метрики качества классификации можно увидеть, что лучше всего справилась двухслойная сеть с 100 нейронами в скрытом слое. Наращивание кол-во слоев и кол-во нейронов в них не привели к желаемому росту значения метрики качества, а наоборот ухудшили ее. Вероятно связано это с тем, что для более мощных архитектур нужно увеличить обучающую выборку, чем есть сейчас у нас, иначе это приводит к переобучению сети.
## 11. Сохранение наилучшей модели на диск
```
model_2l_100.save(filepath='best_model_2l_100_LR1.keras')
```
## 12. Вывод тестовых изображений и результатов распознаваний
```
n = 70
result = model_2l_100.predict(X_test[n:n+1])
print('NN output:', result)
plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray'))
plt.show()
print('Real mark: ', str(np.argmax(y_test[n])))
print('NN answer: ', str(np.argmax(result)))
```
![alt text](p2.png)
>Real mark: 2
>NN answer: 2
```
n = 888
result = model_2l_100.predict(X_test[n:n+1])
print('NN output:', result)
plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray'))
plt.show()
print('Real mark: ', str(np.argmax(y_test[n])))
print('NN answer: ', str(np.argmax(result)))
```
![alt text](p6.png)
>Real mark: 6
>NN answer: 6
## 12. Тестирование на собственных изображениях
* загрузили 1-ое собственное изображения
```
from PIL import Image
file_1_data = Image.open('6.png')
file_1_data = file_1_data.convert('L') #перевод в градации серого
test_1_img = np.array(file_1_data)
```
* вывели собственное изображения
```
plt.imshow(test_1_img, cmap=plt.get_cmap('gray'))
plt.show())
```
![1-ое изображение](6.png)
* предобработка
```
test_1_img = test_1_img / 255
test_1_img = test_1_img.reshape(1, num_pixels)
```
* распознавание
```
result_1 = model_2l_100.predict(test_1_img)
print('I think it\'s', np.argmax(result_1))
```
> I think it's 6
* тест на 2-ом изображении
```
file_2_data = Image.open('2.png')
file_2_data = file_2_data.convert('L') #перевод в градации серого
test_2_img = np.array(file_2_data)
plt.imshow(test_2_img, cmap=plt.get_cmap('gray'))
plt.show()
```
![2-ое изображение](2.png)
```
test_2_img = test_2_img / 255
test_2_img = test_2_img.reshape(1, num_pixels)
result_2 = model.predict(test_2_img)
print('I think it\'s', np.argmax(result_2))
```
> I think it's 2
Сеть корректно распознала обе цифры
## 14. Тестирование на собственных повернутых изображениях
```
file_3_data = Image.open('6_90.png')
file_3_data = file_3_data.convert('L') #перевод в градации серого
test_3_img = np.array(file_3_data)
plt.imshow(test_3_img, cmap=plt.get_cmap('gray'))
plt.show()
```
![1-ое перевернутое изображение](6_90.png)
```
test_3_img = test_3_img / 255
test_3_img = test_3_img.reshape(1, num_pixels)
result_3 = model_2l_100.predict(test_3_img)
print('I think it\'s', np.argmax(result_3))
```
> I think it's 9
```
file_4_data = Image.open('2_90.png')
file_4_data = file_4_data.convert('L') #перевод в градации серого
test_4_img = np.array(file_4_data)
plt.imshow(test_4_img, cmap=plt.get_cmap('gray'))
plt.show()
```
![2-ое перевернутое изображение](2_90.png)
```
test_4_img = test_4_img / 255
test_4_img = test_4_img.reshape(1, num_pixels)
result_4 = model_2l_100.predict(test_4_img)
print('I think it\'s', np.argmax(result_4))
```
> I think it's 5
Сеть не смогла распознать ни одну из перевернутых изображений.Связано это с тем, что мы не использовали при обучении перевернутые изображения.

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

@ -0,0 +1,4 @@
8.1 8.5
7.2 8.0
9.0 8.0
8.5 9.5

Двоичный файл не отображается.

Двоичные данные
labworks/LW2/ae1_EDCA.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 94 KiB

Двоичные данные
labworks/LW2/ae1_EDCA1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 105 KiB

Двоичные данные
labworks/LW2/ae1_ae2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

Двоичные данные
labworks/LW2/ae1_ae2_test.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 21 KiB

Двоичные данные
labworks/LW2/ae1_class.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 33 KiB

Двоичные данные
labworks/LW2/ae1_test.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 34 KiB

Двоичные данные
labworks/LW2/ae1_training.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 55 KiB

Двоичные данные
labworks/LW2/ae2_EDCA.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 64 KiB

Двоичные данные
labworks/LW2/ae2_EDCA1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 73 KiB

Двоичные данные
labworks/LW2/ae2_class.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 31 KiB

Двоичные данные
labworks/LW2/ae2_test.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 40 KiB

Двоичные данные
labworks/LW2/ae2_training.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 102 KiB

Двоичные данные
labworks/LW2/ae3_test.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 57 KiB

Двоичные данные
labworks/LW2/ae3_training.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 84 KiB

@ -0,0 +1,109 @@
2.165463900000000053e-01 -6.546517800000000165e-01 -2.036404900000000073e-01 2.034008599999999944e+00 2.385968699999999831e+00 -6.140064399999999728e-02 3.200971200000000128e+00 -1.112015200000000092e+00 5.159934400000000032e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 2.015500100000000128e+00 -1.439841399999999938e+00 1.964730400000000099e+00 2.786245700000000158e-01 3.865805400000000169e+00 -3.606048100000000201e+00 -1.658481099999999930e+00 -2.044421400000000055e+00 4.987466999999999651e+00 -4.932939700000000260e-01
2.165463900000000053e-01 -5.653378999999999488e-01 -2.036404900000000073e-01 2.778793499999999916e+00 2.051602599999999832e+00 -6.140064399999999728e-02 4.372112699999999741e+00 -9.325388300000000408e-01 5.623183000000000042e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 2.015500100000000128e+00 -1.439841399999999938e+00 1.964730400000000099e+00 6.226310299999999742e-01 3.865805400000000169e+00 -3.906626000000000154e+00 -1.658481099999999930e+00 -2.113388699999999787e+00 6.490482000000000085e+00 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 6.965369199999999594e+00 -7.104097199999999390e-02 4.354484899999999659e-02 -6.140064399999999728e-02 5.285028299999999568e+00 -8.727133700000000438e-01 7.590724599999999489e-01 -4.204873499999999820e-01 4.874045800000000039e-02 1.433020200000000077e+00 -1.297293599999999936e+00 9.747052600000000178e-01 3.030676300000000101e+00 -4.882788900000000210e-01 -4.199225699999999950e-01 -1.850025400000000042e+00 -1.147847099999999898e+00 3.918656299999999870e+00 -4.932939700000000260e-01
-4.183558299999999841e-01 -9.199884400000000184e-01 6.834588300000000061e+00 -5.695920399999999661e-01 3.073559799999999731e-01 -6.140064399999999728e-02 4.776187700000000369e+00 -6.334115099999999554e-01 1.222321100000000049e+00 -4.204873499999999820e-01 -7.172275099999999570e-01 1.883118300000000023e+00 -1.297293599999999936e+00 1.909729000000000010e+00 2.342663400000000173e+00 9.630825400000000425e-01 -3.666163699999999803e+00 -2.169265799999999800e+00 -2.389257699999999929e+00 4.252659600000000317e+00 -2.126605500000000148e+00
-9.474410199999999671e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 8.098599499999999951e-01 7.405433699999999786e-02 -6.140064399999999728e-02 3.586204599999999854e+00 -1.112015200000000092e+00 3.306939900000000154e+00 -4.204873499999999820e-01 1.904085100000000086e+00 1.909594599999999920e+00 -1.439841399999999938e+00 1.744724799999999965e+00 1.310643999999999920e+00 9.630825400000000425e-01 -6.002693000000000056e-01 -1.786177300000000079e+00 -1.630617900000000065e+00 3.217249300000000201e+00 -4.932939700000000260e-01
4.912314699999999895e-03 -9.199884400000000184e-01 6.242462399999999967e+00 -3.778152200000000072e-01 4.855851999999999946e-01 -6.140064399999999728e-02 5.685267299999999580e+00 -5.735860400000000192e-01 1.453945400000000054e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.883118300000000023e+00 -1.297293599999999936e+00 1.909729000000000010e+00 1.654650399999999966e+00 2.414444000000000035e+00 -3.666163699999999803e+00 -2.743898600000000076e+00 -4.044471800000000172e+00 2.783044900000000155e+00 -2.126605500000000148e+00
4.912314699999999895e-03 -9.199884400000000184e-01 6.078098400000000012e+00 -9.221169799999999750e-01 -2.026570700000000086e-02 -6.140064399999999728e-02 6.488522699999999865e+00 -4.539351099999999750e-01 9.906967700000000043e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 9.829221200000000103e-01 -1.297293599999999936e+00 3.968151000000000317e-02 2.786245700000000158e-01 9.630825400000000425e-01 -3.666163699999999803e+00 -2.935442800000000130e+00 -4.113439099999999904e+00 2.181838899999999803e+00 -2.126605500000000148e+00
1.107293500000000042e-01 -9.199884400000000184e-01 7.394861299999999638e+00 -1.786230199999999935e-01 -6.446275900000000315e-03 -6.140064399999999728e-02 3.175601499999999966e+00 -1.590619000000000005e+00 1.453945400000000054e+00 -4.204873499999999820e-01 2.261536800000000014e+00 8.770166900000000432e-01 -8.340133899999999656e-01 5.346940799999999605e-01 -6.538189499999999543e-02 -4.882788900000000210e-01 -1.261540600000000012e+00 -8.284559599999999913e-01 -1.078879900000000003e+00 9.126262600000000225e-01 -4.932939700000000260e-01
-1.009047200000000033e-01 -7.090911399999999531e-01 7.585824800000000145e+00 -4.691003599999999940e-01 4.007486699999999735e-01 -6.140064399999999728e-02 2.487126700000000135e+00 -9.325388300000000408e-01 6.432603000000000071e-01 -4.204873499999999820e-01 -1.934558299999999953e-02 9.829221200000000103e-01 -1.297293599999999936e+00 3.968151000000000317e-02 3.374682700000000146e+00 -4.882788900000000210e-01 -4.199225699999999950e-01 -1.339240699999999951e+00 -5.961090999999999474e-01 2.749644599999999883e+00 1.140017499999999906e+00
-1.009047200000000033e-01 -9.199884400000000184e-01 6.856868600000000313e+00 -5.412246600000000241e-01 3.337194099999999941e-01 -6.140064399999999728e-02 2.316181199999999940e+00 -6.334115099999999554e-01 8.748846200000000017e-01 -4.204873499999999820e-01 -7.512705299999999919e-01 1.433020200000000077e+00 -1.297293599999999936e+00 9.747052600000000178e-01 1.998656900000000070e+00 9.630825400000000425e-01 -3.666163699999999803e+00 -2.169265799999999800e+00 -2.389257699999999929e+00 4.252659600000000317e+00 -2.126605500000000148e+00
-2.067217600000000044e-01 -9.199884400000000184e-01 7.093301099999999693e+00 -5.184923999999999644e-01 3.548458199999999785e-01 -6.140064399999999728e-02 5.018415400000000304e+00 -9.325388300000000408e-01 8.748846200000000017e-01 -4.204873499999999820e-01 -7.041011499999999534e-02 1.644831099999999990e+00 -1.297293599999999936e+00 1.414716400000000096e+00 3.030676300000000101e+00 -4.882788900000000210e-01 -4.199225699999999950e-01 -1.722329199999999894e+00 -1.009912600000000049e+00 3.618053300000000139e+00 -4.932939700000000260e-01
-1.009047200000000033e-01 -9.199884400000000184e-01 6.600593299999999886e+00 -1.051022399999999912e+00 -1.400649300000000042e-01 -6.140064399999999728e-02 2.494063399999999930e+00 9.818760600000000505e-01 5.274481500000000045e-01 -4.204873499999999820e-01 6.955578500000000330e-01 1.433020200000000077e+00 -1.226019699999999935e+00 1.084708100000000064e+00 2.342663400000000173e+00 -4.882788900000000210e-01 -1.193446900000000033e-01 -8.284559599999999913e-01 -3.892073400000000127e-01 1.213229300000000066e+00 -4.932939700000000260e-01
-1.009047200000000033e-01 -9.199884400000000184e-01 7.711561900000000414e+00 -1.635871099999999911e+00 -6.835984699999999581e-01 -6.140064399999999728e-02 5.538793799999999656e+00 2.118559900000000162e+00 -1.325546300000000066e+00 -4.204873499999999820e-01 -1.044531399999999999e-01 -6.586120500000000044e-01 1.994578700000000093e-01 -1.060346400000000022e+00 -4.093883600000000067e-01 -4.882788900000000210e-01 -1.682349700000000059e+00 -5.092155200000000326e-01 -5.961090999999999474e-01 8.124252600000000379e-01 1.140017499999999906e+00
-2.067217600000000044e-01 -9.199884400000000184e-01 7.089064900000000335e+00 -1.635871099999999911e+00 -6.835984699999999581e-01 -6.140064399999999728e-02 4.935133699999999735e+00 2.118559900000000162e+00 -1.325546300000000066e+00 -4.204873499999999820e-01 -1.384961600000000070e-01 -6.586120500000000044e-01 1.994578700000000093e-01 -1.060346400000000022e+00 -4.093883600000000067e-01 -4.882788900000000210e-01 -1.682349700000000059e+00 -6.369116900000000303e-01 -1.009912600000000049e+00 6.120232599999999579e-01 1.140017499999999906e+00
-2.067217600000000044e-01 -9.199884400000000184e-01 7.237258899999999606e+00 -1.635871099999999911e+00 -6.835984699999999581e-01 -6.140064399999999728e-02 8.587321700000000391e+00 2.118559900000000162e+00 -1.325546300000000066e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 -1.188139199999999951e+00 5.914642100000000458e-01 -1.555358999999999936e+00 -1.097401300000000024e+00 -4.882788900000000210e-01 -1.682349700000000059e+00 -8.284559599999999913e-01 -1.147847099999999898e+00 7.761792400000000480e-02 -2.126605500000000148e+00
-4.183558299999999841e-01 -9.199884400000000184e-01 2.030279600000000073e-01 -5.706745500000000026e-01 3.063499399999999873e-01 -6.140064399999999728e-02 4.771056299999999695e+00 -9.325388300000000408e-01 8.748846200000000017e-01 -4.204873499999999820e-01 -1.725391799999999864e-01 1.883118300000000023e+00 -1.297293599999999936e+00 1.909729000000000010e+00 3.374682700000000146e+00 -4.882788900000000210e-01 -4.199225699999999950e-01 -1.658481099999999930e+00 -8.719781199999999677e-01 3.517852299999999932e+00 -4.932939700000000260e-01
-4.183558299999999841e-01 -9.199884400000000184e-01 1.867770699999999895e-01 -4.214977300000000149e-01 6.879286399999999524e-02 -6.140064399999999728e-02 5.478199199999999713e+00 -8.727133700000000438e-01 7.590724599999999489e-01 -4.204873499999999820e-01 6.576196900000000345e-02 1.433020200000000077e+00 -1.297293599999999936e+00 9.747052600000000178e-01 2.686669800000000219e+00 -4.882788900000000210e-01 -4.199225699999999950e-01 -1.850025400000000042e+00 -1.147847099999999898e+00 3.785054900000000000e+00 -4.932939700000000260e-01
-4.183558299999999841e-01 -9.199884400000000184e-01 3.201495300000000155e-01 -5.497234699999999918e-01 3.258209799999999823e-01 -6.140064399999999728e-02 4.870370699999999609e+00 -6.334115099999999554e-01 1.106508899999999906e+00 -4.204873499999999820e-01 -7.853135500000000269e-01 1.883118300000000023e+00 -1.297293599999999936e+00 1.909729000000000010e+00 2.342663400000000173e+00 9.630825400000000425e-01 -3.666163699999999803e+00 -2.233113900000000207e+00 -3.492733799999999889e+00 4.119058299999999839e+00 -2.126605500000000148e+00
-4.183558299999999841e-01 -9.199884400000000184e-01 3.852575100000000252e-01 -3.333030000000000159e-01 5.269529699999999650e-01 -6.140064399999999728e-02 5.896268599999999971e+00 -5.137605800000000222e-01 1.338133199999999912e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.221209299999999942e+00 -1.297293599999999936e+00 5.346940799999999605e-01 1.310643999999999920e+00 2.414444000000000035e+00 -3.666163699999999803e+00 -2.680050500000000113e+00 -3.975504599999999833e+00 2.916646300000000025e+00 -2.126605500000000148e+00
4.912314699999999895e-03 -9.199884400000000184e-01 -2.036404900000000073e-01 6.278152299999999464e-01 -6.835984699999999581e-01 1.585204200000000085e+01 1.510130500000000042e+00 -7.530624399999999996e-01 -1.674247799999999953e-01 -4.204873499999999820e-01 9.168374900000000327e-01 4.533949700000000083e-01 -1.083471999999999991e+00 -7.303380499999999609e-01 -1.097401300000000024e+00 9.630825400000000425e-01 -2.223389899999999919e+00 -1.083848300000000098e+00 -8.030108700000000432e-01 1.714234299999999989e+00 1.140017499999999906e+00
4.912314699999999895e-03 -9.199884400000000184e-01 -2.036404900000000073e-01 1.259323799999999993e+00 -1.454642800000000014e-01 -6.140064399999999728e-02 2.466523399999999810e+00 -8.727133700000000438e-01 2.958238400000000046e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 4.269186099999999762e-01 -1.083471999999999991e+00 -7.853394399999999997e-01 -4.093883600000000067e-01 -4.882788900000000210e-01 -2.223389899999999919e+00 -1.850025400000000042e+00 -2.389257699999999929e+00 4.116212599999999888e-01 -4.932939700000000260e-01
4.912314699999999895e-03 -9.199884400000000184e-01 -2.036404900000000073e-01 2.304856099999999852e+00 -2.258054300000000014e-01 -6.140064399999999728e-02 -2.782949499999999854e-01 -7.530624399999999996e-01 -1.674247799999999953e-01 -4.204873499999999820e-01 1.018966599999999945e+00 4.269186099999999762e-01 -1.083471999999999991e+00 -7.853394399999999997e-01 -7.533948200000000206e-01 3.865805400000000169e+00 -2.223389899999999919e+00 -1.020000199999999912e+00 -8.030108700000000432e-01 1.346830600000000100e+00 1.140017499999999906e+00
-2.323062499999999808e+00 -1.069149800000000067e-01 -1.697457099999999941e-01 6.132577799999999746e-01 1.667926900000000101e+00 -6.140064399999999728e-02 2.387091299999999805e+00 1.400654300000000019e+00 1.917194000000000065e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.565401999999999960e+00 -1.083471999999999991e+00 1.579720599999999919e+00 1.310643999999999920e+00 -4.882788900000000210e-01 -2.704314500000000177e+00 -3.190835199999999983e+00 -2.872028499999999873e+00 7.122242600000000534e-01 -2.126605500000000148e+00
-2.323062499999999808e+00 2.038597400000000115e-01 -2.036404900000000073e-01 1.472924799999999923e+00 1.483288600000000068e+00 -6.140064399999999728e-02 3.405861300000000202e+00 1.400654300000000019e+00 1.801381899999999980e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.565401999999999960e+00 -1.083471999999999991e+00 1.579720599999999919e+00 9.666375000000000384e-01 -4.882788900000000210e-01 -2.704314500000000177e+00 -2.935442800000000130e+00 -2.872028499999999873e+00 6.788239299999999643e-01 -2.126605500000000148e+00
-2.323062499999999808e+00 -4.350371599999999783e-02 -1.671022699999999972e-01 7.886664300000000294e-01 1.569663599999999937e+00 -6.140064399999999728e-02 2.594963900000000212e+00 1.400654300000000019e+00 1.801381899999999980e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.565401999999999960e+00 -1.083471999999999991e+00 1.579720599999999919e+00 6.226310299999999742e-01 -4.882788900000000210e-01 -2.704314500000000177e+00 -3.126987100000000019e+00 -2.940995800000000049e+00 8.124252600000000379e-01 -2.126605500000000148e+00
-2.323062499999999808e+00 -4.884767700000000046e-01 -1.316864000000000090e-01 -1.039045999999999914e+00 2.089721200000000056e+00 -6.140064399999999728e-02 2.550835199999999858e+00 1.400654300000000019e+00 2.033006199999999986e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.327114799999999928e+00 -9.765611499999999889e-01 1.249712200000000051e+00 6.226310299999999742e-01 9.630825400000000425e-01 -2.704314500000000177e+00 -3.510075599999999962e+00 -2.940995800000000049e+00 6.120232599999999579e-01 -2.126605500000000148e+00
-2.323062499999999808e+00 1.281601300000000110e-01 -1.599460799999999905e-01 1.762508700000000039e-01 2.010976100000000155e+00 -6.140064399999999728e-02 1.439705299999999966e+00 1.340828799999999932e+00 2.148818299999999848e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.485972899999999930e+00 -9.765611499999999889e-01 1.579720599999999919e+00 2.786245700000000158e-01 -4.882788900000000210e-01 -2.884661200000000036e+00 -3.063139000000000056e+00 -2.734093999999999802e+00 1.280029899999999943e+00 -2.126605500000000148e+00
-2.323062499999999808e+00 -1.101699000000000012e-01 -1.698813999999999880e-01 6.042540499999999870e-01 1.398278600000000038e+00 -6.140064399999999728e-02 2.376421300000000070e+00 1.400654300000000019e+00 1.917194000000000065e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.565401999999999960e+00 -1.083471999999999991e+00 1.579720599999999919e+00 1.310643999999999920e+00 -4.882788900000000210e-01 -2.704314500000000177e+00 -3.254683299999999946e+00 -2.872028499999999873e+00 7.122242600000000534e-01 -2.126605500000000148e+00
-1.009047200000000033e-01 -9.199884400000000184e-01 -1.466606299999999863e-01 -6.906291300000000355e-01 1.951804700000000059e+00 -6.140064399999999728e-02 4.202435600000000271e+00 1.340828799999999932e+00 2.958238400000000046e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 -1.555612500000000120e-01 -4.420070500000000124e-01 -1.005344999999999933e+00 9.666375000000000384e-01 -4.882788900000000210e-01 -9.008471799999999696e-01 -1.083848300000000098e+00 -1.147847099999999898e+00 -1.895847400000000016e-01 -4.932939700000000260e-01
2.165463900000000053e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 1.617520000000000069e+00 1.332110399999999917e+00 -6.140064399999999728e-02 2.292046599999999934e+00 1.161352500000000010e+00 6.419952900000000517e-02 -4.204873499999999820e-01 -7.512705299999999919e-01 -1.026085399999999981e-01 -2.638223499999999833e-01 -6.203352500000000047e-01 2.786245700000000158e-01 -4.882788900000000210e-01 6.100204299999999885e-02 -8.923040399999999650e-01 -8.719781199999999677e-01 9.794269300000000289e-01 1.140017499999999906e+00
2.165463900000000053e-01 -4.261098400000000175e-01 -1.624636299999999978e-01 -1.635871099999999911e+00 -4.876827799999999824e-02 -6.140064399999999728e-02 6.197760999999999854e+00 1.101526999999999923e+00 6.419952900000000517e-02 -4.204873499999999820e-01 -1.398087899999999939e+00 6.916821899999999745e-01 -6.914656300000000533e-01 3.696898900000000210e-01 -6.538189499999999543e-02 9.630825400000000425e-01 -2.824545599999999990e+00 -1.786177300000000079e+00 -2.182355999999999963e+00 1.714234299999999989e+00 -2.126605500000000148e+00
2.165463900000000053e-01 2.937676100000000123e-01 -1.699084100000000097e-01 -1.076287900000000075e+00 3.565073200000000164e-01 -6.140064399999999728e-02 5.026890100000000139e+00 1.041701500000000058e+00 6.419952900000000517e-02 -4.204873499999999820e-01 -1.398087899999999939e+00 1.035874799999999984e+00 -6.914656300000000533e-01 1.084708100000000064e+00 -6.538189499999999543e-02 -4.882788900000000210e-01 -2.824545599999999990e+00 -1.275392599999999987e+00 -1.837519700000000089e+00 4.252659600000000317e+00 -2.126605500000000148e+00
2.165463900000000053e-01 1.454575200000000068e-01 -1.740301599999999893e-01 -1.144663900000000067e+00 6.859228299999999834e-01 -6.140064399999999728e-02 4.378644200000000097e+00 9.220505900000000032e-01 1.800116800000000072e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.035874799999999984e+00 -6.914656300000000533e-01 1.084708100000000064e+00 9.666375000000000384e-01 -4.882788900000000210e-01 -2.824545599999999990e+00 -9.561521299999999890e-01 -1.630617900000000065e+00 5.822475299999999798e+00 -2.126605500000000148e+00
2.165463900000000053e-01 1.890722699999999867e-01 -1.805236600000000025e-01 -1.252384799999999965e+00 3.855892300000000050e-01 -6.140064399999999728e-02 5.175225900000000046e+00 9.818760600000000505e-01 4.116359900000000072e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.168256600000000089e+00 -8.696503300000000269e-01 1.084708100000000064e+00 6.226310299999999742e-01 -4.882788900000000210e-01 -2.884661200000000036e+00 -1.339240699999999951e+00 -1.768552399999999913e+00 5.388270999999999589e+00 -2.126605500000000148e+00
2.165463900000000053e-01 3.422228799999999654e-02 -1.771215600000000112e-01 -1.195947199999999988e+00 1.340947700000000020e-01 -6.140064399999999728e-02 5.977819399999999561e+00 1.041701500000000058e+00 4.116359900000000072e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.168256600000000089e+00 -8.696503300000000269e-01 1.084708100000000064e+00 2.786245700000000158e-01 -4.882788900000000210e-01 -2.884661200000000036e+00 -1.722329199999999894e+00 -2.044421400000000055e+00 3.584652900000000031e+00 -2.126605500000000148e+00
2.165463900000000053e-01 -1.571955399999999947e-01 -2.036404900000000073e-01 -1.635871099999999911e+00 -6.835984699999999581e-01 -6.140064399999999728e-02 7.223380699999999877e+00 1.161352500000000010e+00 2.958238400000000046e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.062351199999999940e+00 -8.696503300000000269e-01 8.647024700000000008e-01 6.226310299999999742e-01 9.630825400000000425e-01 -2.884661200000000036e+00 -2.041569599999999873e+00 -2.389257699999999929e+00 2.248639600000000183e+00 -2.126605500000000148e+00
2.165463900000000053e-01 -1.513992399999999905e-01 -2.036404900000000073e-01 -1.635871099999999911e+00 -6.835984699999999581e-01 -6.140064399999999728e-02 7.280384299999999698e+00 1.221177900000000038e+00 4.116359900000000072e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.062351199999999940e+00 -8.696503300000000269e-01 8.647024700000000008e-01 1.310643999999999920e+00 9.630825400000000425e-01 -2.884661200000000036e+00 -2.105417699999999837e+00 -2.458225000000000104e+00 2.081637900000000041e+00 -2.126605500000000148e+00
2.165463900000000053e-01 5.884707200000000027e-02 -2.036404900000000073e-01 -1.635871099999999911e+00 -2.642009699999999794e-01 -6.140064399999999728e-02 6.139267499999999878e+00 1.161352500000000010e+00 5.274481500000000045e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.221209299999999942e+00 -8.696503300000000269e-01 1.194710799999999962e+00 1.654650399999999966e+00 -4.882788900000000210e-01 -2.884661200000000036e+00 -1.850025400000000042e+00 -2.113388699999999787e+00 2.950046599999999852e+00 -2.126605500000000148e+00
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -4.648681900000000145e-01 3.306762800000000002e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 8.622251300000000063e-01 1.800116800000000072e-01 -4.204873499999999820e-01 2.700200899999999904e-01 2.945368300000000272e-01 -7.627395099999999539e-01 -5.653338599999999659e-01 -6.538189499999999543e-02 9.630825400000000425e-01 -2.704314500000000177e+00 -1.658481099999999930e+00 -2.044421400000000055e+00 1.380230899999999927e+00 -4.932939700000000260e-01
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -3.897682399999999880e-01 3.562676699999999919e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 8.622251300000000063e-01 1.800116800000000072e-01 -4.204873499999999820e-01 4.912997299999999901e-01 2.415841099999999908e-01 -7.627395099999999539e-01 -6.753366499999999828e-01 -6.538189499999999543e-02 9.630825400000000425e-01 -2.704314500000000177e+00 -1.722329199999999894e+00 -2.113388699999999787e+00 1.179828899999999958e+00 -4.932939700000000260e-01
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -8.835101600000000444e-02 3.151599899999999899e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 8.622251300000000063e-01 1.800116800000000072e-01 -4.204873499999999820e-01 4.402351999999999932e-01 2.415841099999999908e-01 -7.627395099999999539e-01 -6.753366499999999828e-01 -6.538189499999999543e-02 9.630825400000000425e-01 -1.862696399999999919e+00 -1.722329199999999894e+00 -2.044421400000000055e+00 3.448205899999999824e-01 -4.932939700000000260e-01
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 8.028004199999999244e-03 2.753884000000000221e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 9.220505900000000032e-01 1.800116800000000072e-01 -4.204873499999999820e-01 1.338480099999999895e-01 2.945368300000000272e-01 -7.627395099999999539e-01 -5.653338599999999659e-01 -6.538189499999999543e-02 9.630825400000000425e-01 -3.004892299999999850e+00 -1.786177300000000079e+00 -2.182355999999999963e+00 1.814435299999999973e+00 -4.932939700000000260e-01
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 4.556897699999999662e-02 2.129187599999999847e+00 -6.140064399999999728e-02 1.315811199999999959e+00 1.041701500000000058e+00 6.419952900000000517e-02 -4.204873499999999820e-01 9.980498899999999673e-02 2.945368300000000272e-01 -7.627395099999999539e-01 -5.653338599999999659e-01 2.786245700000000158e-01 9.630825400000000425e-01 -3.004892299999999850e+00 -1.977721499999999910e+00 -2.458225000000000104e+00 1.447031600000000084e+00 -2.126605500000000148e+00
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 2.525713199999999881e-01 1.422447299999999970e+00 -6.140064399999999728e-02 1.512061799999999900e+00 1.041701500000000058e+00 6.419952900000000517e-02 -4.204873499999999820e-01 1.849125399999999864e-01 2.945368300000000272e-01 -7.627395099999999539e-01 -5.653338599999999659e-01 -6.538189499999999543e-02 9.630825400000000425e-01 -3.004892299999999850e+00 -2.041569599999999873e+00 -2.665126700000000071e+00 1.447031600000000084e+00 -2.126605500000000148e+00
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -7.916692599999999858e-02 1.727626000000000106e+00 -6.140064399999999728e-02 2.181453299999999818e+00 1.161352500000000010e+00 -1.674247799999999953e-01 -4.204873499999999820e-01 3.171894799999999681e-02 2.945368300000000272e-01 -7.627395099999999539e-01 -5.653338599999999659e-01 -4.093883600000000067e-01 9.630825400000000425e-01 -3.004892299999999850e+00 -2.296962000000000170e+00 -3.009962999999999944e+00 9.126262600000000225e-01 -2.126605500000000148e+00
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -4.252467900000000273e-02 1.167387100000000011e+00 -6.140064399999999728e-02 3.498174999999999812e+00 1.161352500000000010e+00 -3.990490899999999952e-01 -4.204873499999999820e-01 -1.934558299999999953e-02 2.945368300000000272e-01 -7.627395099999999539e-01 -5.653338599999999659e-01 -7.533948200000000206e-01 9.630825400000000425e-01 -3.004892299999999850e+00 -2.233113900000000207e+00 -2.872028499999999873e+00 7.790249299999999488e-01 -2.126605500000000148e+00
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -4.825668000000000180e-01 1.192107599999999934e+00 -6.140064399999999728e-02 2.455209299999999928e+00 1.041701500000000058e+00 -1.674247799999999953e-01 -4.204873499999999820e-01 2.019340500000000038e-01 2.415841099999999908e-01 -7.627395099999999539e-01 -6.753366499999999828e-01 6.226310299999999742e-01 9.630825400000000425e-01 -3.004892299999999850e+00 -2.041569599999999873e+00 -2.458225000000000104e+00 1.179828899999999958e+00 -4.932939700000000260e-01
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -1.234333200000000019e+00 1.555435300000000076e+00 -6.140064399999999728e-02 3.528525600000000040e+00 1.161352500000000010e+00 -3.990490899999999952e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.621550400000000003e-01 -5.845548099999999803e-01 -5.653338599999999659e-01 -4.093883600000000067e-01 -4.882788900000000210e-01 -3.004892299999999850e+00 -2.169265799999999800e+00 -2.596159500000000175e+00 6.454235900000000470e-01 -2.126605500000000148e+00
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -1.023903400000000019e+00 2.444453699999999952e+00 -6.140064399999999728e-02 2.622615500000000210e+00 1.101526999999999923e+00 -1.674247799999999953e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 2.415841099999999908e-01 -7.627395099999999539e-01 -6.753366499999999828e-01 6.226310299999999742e-01 -4.882788900000000210e-01 -1.742465200000000047e+00 -2.105417699999999837e+00 -2.458225000000000104e+00 1.778189199999999914e-01 -4.932939700000000260e-01
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -9.064873300000000356e-01 2.027834799999999937e+00 -6.140064399999999728e-02 3.179202999999999779e+00 1.161352500000000010e+00 -1.674247799999999953e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 8.272596499999999853e-02 -7.627395099999999539e-01 -1.005344999999999933e+00 1.310643999999999920e+00 -4.882788900000000210e-01 -3.004892299999999850e+00 -2.233113900000000207e+00 -2.527192200000000000e+00 5.786229299999999798e-01 -4.932939700000000260e-01
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -1.969948700000000164e-02 2.620804199999999806e+00 -6.140064399999999728e-02 2.786160300000000145e+00 1.161352500000000010e+00 2.958238400000000046e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 9.829221200000000103e-01 -9.765611499999999889e-01 5.346940799999999605e-01 1.998656900000000070e+00 9.630825400000000425e-01 -3.004892299999999850e+00 -2.616202400000000150e+00 -2.389257699999999929e+00 7.456245999999999707e-01 -2.126605500000000148e+00
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -7.801124600000000631e-02 2.212019000000000180e+00 -6.140064399999999728e-02 2.183279399999999981e+00 1.101526999999999923e+00 6.432603000000000071e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.433020200000000077e+00 -9.765611499999999889e-01 1.469717799999999963e+00 2.686669800000000219e+00 2.414444000000000035e+00 -1.742465200000000047e+00 -2.552354300000000187e+00 -2.113388699999999787e+00 5.118222599999999733e-01 -2.126605500000000148e+00
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -2.033510400000000107e-01 2.359426099999999860e+00 -6.140064399999999728e-02 1.661869199999999935e+00 1.041701500000000058e+00 5.274481500000000045e-01 -4.204873499999999820e-01 -7.342490200000000300e-01 1.433020200000000077e+00 -9.765611499999999889e-01 1.469717799999999963e+00 1.998656900000000070e+00 9.630825400000000425e-01 -1.742465200000000047e+00 -2.424658099999999816e+00 -2.182355999999999963e+00 5.452225899999999514e-01 -2.126605500000000148e+00
-1.264892099999999964e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 2.009261999999999854e-02 2.394366100000000053e+00 -6.140064399999999728e-02 2.861610999999999905e+00 1.161352500000000010e+00 2.958238400000000046e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 9.829221200000000103e-01 -9.765611499999999889e-01 5.346940799999999605e-01 1.998656900000000070e+00 9.630825400000000425e-01 -3.004892299999999850e+00 -2.552354300000000187e+00 -2.458225000000000104e+00 7.122242600000000534e-01 -2.126605500000000148e+00
-1.159075099999999914e+00 -9.199884400000000184e-01 -1.692480700000000005e-01 -1.065333499999999933e+00 4.088501899999999800e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 9.818760600000000505e-01 6.432603000000000071e-01 -4.204873499999999820e-01 -5.640339199999999664e-01 6.387294799999999606e-01 -1.012198099999999990e+00 -2.353254700000000088e-01 1.310643999999999920e+00 -4.882788900000000210e-01 -1.321656200000000059e+00 -2.105417699999999837e+00 -2.113388699999999787e+00 1.280029899999999943e+00 -4.932939700000000260e-01
-1.159075099999999914e+00 -9.199884400000000184e-01 -1.836570299999999989e-01 -3.098444300000000040e-01 2.705371799999999993e+00 1.392131099999999932e+01 -2.782949499999999854e-01 1.281003399999999903e+00 7.590724599999999489e-01 -4.204873499999999820e-01 -3.087112599999999873e-01 8.240639800000000292e-01 -1.261656700000000075e+00 -2.353254700000000088e-01 9.666375000000000384e-01 -4.882788900000000210e-01 -4.147088300000000061e+00 -3.063139000000000056e+00 -3.078930300000000120e+00 2.950046599999999852e+00 -2.126605500000000148e+00
-1.159075099999999914e+00 -9.199884400000000184e-01 -1.819506200000000073e-01 -5.564280799999999916e-01 2.994759199999999844e+00 1.511530800000000063e+01 -2.782949499999999854e-01 1.340828799999999932e+00 7.590724599999999489e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 7.446349100000000387e-01 -1.261656700000000075e+00 -4.003296700000000263e-01 -6.538189499999999543e-02 9.630825400000000425e-01 -4.147088300000000061e+00 -3.318531399999999909e+00 -3.423766500000000157e+00 2.282039900000000010e+00 -2.126605500000000148e+00
-1.159075099999999914e+00 -9.199884400000000184e-01 -1.788082699999999914e-01 1.190056500000000010e-02 3.144823900000000005e+00 1.731405399999999872e+01 -2.782949499999999854e-01 1.281003399999999903e+00 7.590724599999999489e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 7.446349100000000387e-01 -1.261656700000000075e+00 -4.003296700000000263e-01 2.786245700000000158e-01 9.630825400000000425e-01 -4.147088300000000061e+00 -3.190835199999999983e+00 -3.216864800000000191e+00 2.582642900000000186e+00 -2.126605500000000148e+00
-1.159075099999999914e+00 -9.199884400000000184e-01 -1.795185800000000109e-01 -4.353921499999999778e-01 2.663423900000000177e+00 1.681704500000000024e+01 -2.782949499999999854e-01 1.400654300000000019e+00 7.590724599999999489e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 7.446349100000000387e-01 -1.261656700000000075e+00 -4.003296700000000263e-01 -4.093883600000000067e-01 9.630825400000000425e-01 -4.147088300000000061e+00 -3.446227499999999999e+00 -3.768602800000000030e+00 2.081637900000000041e+00 -2.126605500000000148e+00
-1.159075099999999914e+00 -9.199884400000000184e-01 -2.036404900000000073e-01 -2.160894999999999899e-01 2.395199100000000136e+00 1.990038699999999849e+01 -2.782949499999999854e-01 1.520305199999999912e+00 5.274481500000000045e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 7.446349100000000387e-01 -1.261656700000000075e+00 -4.003296700000000263e-01 6.226310299999999742e-01 2.414444000000000035e+00 -4.147088300000000061e+00 -3.637771799999999889e+00 -3.975504599999999833e+00 1.580632899999999896e+00 -2.126605500000000148e+00
6.398145400000000427e-01 -9.199884400000000184e-01 -1.558342500000000075e-01 1.536369600000000002e+00 3.738620000000000054e+00 -6.140064399999999728e-02 3.481048200000000037e+00 9.220505900000000032e-01 1.338133199999999912e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 8.505403400000000058e-01 -1.261656700000000075e+00 -1.803240799999999977e-01 1.310643999999999920e+00 2.414444000000000035e+00 -1.141309499999999977e+00 -2.169265799999999800e+00 -1.354748899999999923e+00 1.981436900000000056e+00 -4.932939700000000260e-01
6.398145400000000427e-01 -9.199884400000000184e-01 -1.662600800000000045e-01 1.464656699999999923e+00 2.774200099999999836e+00 -6.140064399999999728e-02 2.661191399999999874e+00 7.425741900000000228e-01 1.338133199999999912e+00 -4.204873499999999820e-01 -1.278937400000000002e+00 8.505403400000000058e-01 -1.261656700000000075e+00 -1.803240799999999977e-01 6.226310299999999742e-01 9.630825400000000425e-01 -5.922911000000000148e-02 -1.658481099999999930e+00 -1.009912600000000049e+00 3.350850599999999790e+00 1.140017499999999906e+00
6.398145400000000427e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 1.620549199999999912e+00 3.553331599999999924e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 7.425741900000000228e-01 1.222321100000000049e+00 -4.204873499999999820e-01 -1.278937400000000002e+00 8.505403400000000058e-01 -1.261656700000000075e+00 -1.803240799999999977e-01 6.226310299999999742e-01 9.630825400000000425e-01 -5.922911000000000148e-02 -1.530784900000000004e+00 -9.409453800000000534e-01 3.083647899999999886e+00 1.140017499999999906e+00
6.398145400000000427e-01 -9.199884400000000184e-01 -1.621394100000000116e-01 1.806447200000000031e+00 3.155374699999999866e+00 -6.140064399999999728e-02 2.985229200000000027e+00 8.023996599999999590e-01 1.222321100000000049e+00 -4.204873499999999820e-01 -1.193829800000000052e+00 8.505403400000000058e-01 -1.261656700000000075e+00 -1.803240799999999977e-01 1.310643999999999920e+00 9.630825400000000425e-01 -1.141309499999999977e+00 -1.913873399999999947e+00 -1.216814400000000074e+00 1.847835600000000023e+00 -4.932939700000000260e-01
-2.067217600000000044e-01 -4.007567300000000055e-01 -2.036404900000000073e-01 3.391185999999999812e+00 3.988334599999999952e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 8.622251300000000063e-01 7.590724599999999489e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.406543799999999900e+00 -1.439841399999999938e+00 6.996982699999999555e-01 1.310643999999999920e+00 2.414444000000000035e+00 -9.008471799999999696e-01 -2.041569599999999873e+00 -1.492683399999999994e+00 1.948036600000000007e+00 -4.932939700000000260e-01
-2.067217600000000044e-01 -4.964275599999999899e-01 -2.036404900000000073e-01 2.464927499999999938e+00 3.671953400000000034e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 9.818760600000000505e-01 6.432603000000000071e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.406543799999999900e+00 -1.439841399999999938e+00 6.996982699999999555e-01 2.786245700000000158e-01 -4.882788900000000210e-01 -9.008471799999999696e-01 -2.233113900000000207e+00 -1.492683399999999994e+00 2.449041600000000152e+00 -4.932939700000000260e-01
-2.067217600000000044e-01 -5.508412299999999595e-01 -2.036404900000000073e-01 2.448678300000000085e+00 3.586908900000000067e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 1.041701500000000058e+00 6.432603000000000071e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.406543799999999900e+00 -1.439841399999999938e+00 6.996982699999999555e-01 9.666375000000000384e-01 -4.882788900000000210e-01 -4.567897300000000271e+00 -2.424658099999999816e+00 -1.699585200000000018e+00 8.294100000000000250e+00 -4.932939700000000260e-01
-2.067217600000000044e-01 -5.894448599999999594e-01 -1.760816000000000048e-01 2.478711699999999851e+00 2.715440099999999912e+00 -6.140064399999999728e-02 1.888855699999999915e+00 1.041701500000000058e+00 8.748846200000000017e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 2.306740000000000013e+00 -1.439841399999999938e+00 2.569745800000000191e+00 1.654650399999999966e+00 -4.882788900000000210e-01 -4.567897300000000271e+00 -2.807746700000000040e+00 -1.630617900000000065e+00 7.659493600000000235e+00 -4.932939700000000260e-01
-2.067217600000000044e-01 -5.285552500000000320e-01 -1.710049600000000114e-01 1.612483799999999912e+00 2.335284399999999927e+00 -6.140064399999999728e-02 2.288067700000000038e+00 1.101526999999999923e+00 9.906967700000000043e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 2.306740000000000013e+00 -1.439841399999999938e+00 2.569745800000000191e+00 2.786245700000000158e-01 -4.882788900000000210e-01 -4.567897300000000271e+00 -2.871594700000000167e+00 -1.630617900000000065e+00 7.793095000000000105e+00 -2.126605500000000148e+00
-2.067217600000000044e-01 -4.914022499999999849e-01 -1.679073500000000108e-01 1.328023299999999907e+00 2.070918999999999954e+00 -6.140064399999999728e-02 2.531654800000000094e+00 1.161352500000000010e+00 1.106508899999999906e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 2.306740000000000013e+00 -1.439841399999999938e+00 2.569745800000000191e+00 1.310643999999999920e+00 -4.882788900000000210e-01 -4.567897300000000271e+00 -3.063139000000000056e+00 -1.699585200000000018e+00 7.425691300000000439e+00 -2.126605500000000148e+00
-2.067217600000000044e-01 -4.318304499999999768e-01 -1.629405899999999963e-01 1.064820300000000053e+00 1.826309299999999913e+00 -6.140064399999999728e-02 2.922226799999999791e+00 1.161352500000000010e+00 1.222321100000000049e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 2.306740000000000013e+00 -1.439841399999999938e+00 2.569745800000000191e+00 9.666375000000000384e-01 -4.882788900000000210e-01 -4.567897300000000271e+00 -3.190835199999999983e+00 -1.561650699999999947e+00 7.358890599999999615e+00 -2.126605500000000148e+00
-2.067217600000000044e-01 -9.199884400000000184e-01 -1.536818399999999862e-01 8.504289299999999718e-01 1.627063099999999984e+00 -6.140064399999999728e-02 3.650307600000000097e+00 1.281003399999999903e+00 1.106508899999999906e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 2.306740000000000013e+00 -1.439841399999999938e+00 2.569745800000000191e+00 9.666375000000000384e-01 -4.882788900000000210e-01 -4.567897300000000271e+00 -3.701619899999999852e+00 -1.975454199999999938e+00 5.655473599999999657e+00 -2.126605500000000148e+00
8.514486100000000501e-01 -9.199884400000000184e-01 -4.196450100000000127e-02 5.097702299999999909e-01 -1.850815199999999994e-01 -6.140064399999999728e-02 4.807196900000000106e+00 1.041701500000000058e+00 1.106508899999999906e+00 -2.960067800000000249e-01 -1.347023400000000093e+00 -4.732775499999999913e-01 -1.925484699999999993e-01 -1.280351999999999935e+00 -4.093883600000000067e-01 -4.882788900000000210e-01 -2.996914099999999914e-01 -6.369116900000000303e-01 -4.581745899999999927e-01 -3.231860799999999867e-01 1.140017499999999906e+00
1.107293500000000042e-01 -9.199884400000000184e-01 -1.722676499999999944e-01 4.459118799999999827e-01 2.837618299999999927e-01 -6.140064399999999728e-02 4.655842899999999673e+00 9.220505900000000032e-01 8.748846200000000017e-01 -4.204873499999999820e-01 -5.470124100000000045e-01 8.240639800000000292e-01 -1.083471999999999991e+00 3.968151000000000317e-02 2.786245700000000158e-01 -4.882788900000000210e-01 -2.163274299999999872e+00 -1.850025400000000042e+00 -1.975454199999999938e+00 1.046227599999999924e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -1.792111100000000068e-01 3.904298299999999777e-01 4.462962999999999791e-01 -6.140064399999999728e-02 3.563814700000000002e+00 1.041701500000000058e+00 5.274481500000000045e-01 -4.204873499999999820e-01 -6.831844900000000331e-01 8.240639800000000292e-01 -1.083471999999999991e+00 3.968151000000000317e-02 -6.538189499999999543e-02 -4.882788900000000210e-01 -4.800381400000000021e-01 -1.594632999999999967e+00 -1.423716200000000098e+00 1.680833900000000103e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -1.823664700000000027e-01 1.287078000000000111e-01 3.003563000000000205e-01 -6.140064399999999728e-02 3.067558399999999796e+00 9.818760600000000505e-01 9.906967700000000043e-01 -4.204873499999999820e-01 -5.470124100000000045e-01 8.240639800000000292e-01 -1.083471999999999991e+00 3.968151000000000317e-02 -6.538189499999999543e-02 -4.882788900000000210e-01 -4.800381400000000021e-01 -1.913873399999999947e+00 -1.423716200000000098e+00 1.647433600000000053e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -1.765072199999999925e-01 1.645898199999999978e-01 1.530374700000000088e-01 -6.140064399999999728e-02 3.989067599999999825e+00 9.220505900000000032e-01 1.569757499999999917e+00 -4.204873499999999820e-01 -1.934558299999999953e-02 8.240639800000000292e-01 -1.083471999999999991e+00 3.968151000000000317e-02 2.786245700000000158e-01 -4.882788900000000210e-01 -2.163274299999999872e+00 -2.233113900000000207e+00 -2.044421400000000055e+00 8.124252600000000379e-01 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -1.794354900000000030e-01 3.718185500000000254e-01 6.274611200000000666e-02 -6.140064399999999728e-02 3.528525600000000040e+00 9.220505900000000032e-01 1.453945400000000054e+00 -4.204873499999999820e-01 -2.324072999999999851e-03 8.240639800000000292e-01 -1.083471999999999991e+00 3.968151000000000317e-02 2.786245700000000158e-01 -4.882788900000000210e-01 -1.021078300000000105e+00 -2.105417699999999837e+00 -1.699585200000000018e+00 1.079627899999999974e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -1.819951599999999892e-01 5.185819200000000295e-01 -1.617945599999999831e-02 -6.140064399999999728e-02 3.125956200000000074e+00 9.220505900000000032e-01 1.569757499999999917e+00 -4.204873499999999820e-01 -8.743162499999999893e-02 8.240639800000000292e-01 -1.083471999999999991e+00 3.968151000000000317e-02 2.786245700000000158e-01 -4.882788900000000210e-01 -1.021078300000000105e+00 -2.105417699999999837e+00 -1.768552399999999913e+00 1.079627899999999974e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -1.786018299999999892e-01 4.409670199999999873e-01 -2.975734500000000171e-01 -6.140064399999999728e-02 3.659639299999999817e+00 9.220505900000000032e-01 1.917194000000000065e+00 -4.204873499999999820e-01 2.189555599999999935e-01 8.240639800000000292e-01 -1.083471999999999991e+00 3.968151000000000317e-02 9.666375000000000384e-01 -4.882788900000000210e-01 -2.584083300000000083e+00 -2.233113900000000207e+00 -2.044421400000000055e+00 1.213229300000000066e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 7.019600499999999466e-01 -2.490622999999999865e-01 -6.140064399999999728e-02 4.154513399999999912e+00 9.220505900000000032e-01 2.033006199999999986e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 8.240639800000000292e-01 -1.083471999999999991e+00 3.968151000000000317e-02 6.226310299999999742e-01 -4.882788900000000210e-01 -2.584083300000000083e+00 -2.488506199999999779e+00 -2.389257699999999929e+00 7.122242600000000534e-01 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 1.892891099999999938e+00 4.517521499999999773e-02 -6.140064399999999728e-02 3.438903100000000101e+00 9.220505900000000032e-01 1.801381899999999980e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 8.240639800000000292e-01 -1.083471999999999991e+00 3.968151000000000317e-02 2.786245700000000158e-01 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.296962000000000170e+00 -2.182355999999999963e+00 1.981436900000000056e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 2.550347599999999826e+00 -3.299172300000000058e-01 -6.140064399999999728e-02 3.329692699999999839e+00 9.220505900000000032e-01 1.801381899999999980e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 6.122531199999999840e-01 -1.154745799999999933e+00 -5.103324599999999878e-01 -6.538189499999999543e-02 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.360809999999999853e+00 -2.182355999999999963e+00 1.948036600000000007e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 1.877137700000000020e+00 4.046818699999999991e-01 -6.140064399999999728e-02 1.572006699999999979e+00 9.220505900000000032e-01 2.148818299999999848e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.886314000000000046e-01 -1.154745799999999933e+00 -1.390354799999999891e+00 -7.533948200000000206e-01 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.360809999999999853e+00 -1.768552399999999913e+00 1.814435299999999973e+00 1.140017499999999906e+00
1.107293500000000042e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 1.951201100000000022e+00 4.276256600000000185e-01 -6.140064399999999728e-02 2.555671400000000038e+00 9.220505900000000032e-01 1.801381899999999980e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 7.975876200000000527e-01 -1.154745799999999933e+00 -1.253226799999999919e-01 2.786245700000000158e-01 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.424658099999999816e+00 -2.320290500000000034e+00 2.315440300000000118e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 1.813760199999999934e+00 3.028448200000000146e-01 -6.140064399999999728e-02 3.495309699999999964e+00 9.818760600000000505e-01 1.569757499999999917e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 8.240639800000000292e-01 -1.190382800000000074e+00 -1.253226799999999919e-01 6.226310299999999742e-01 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.360809999999999853e+00 -2.320290500000000034e+00 2.482441899999999979e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -7.384623500000000451e-01 -2.036404900000000073e-01 1.628029900000000030e+00 4.830671999999999744e-01 -6.140064399999999728e-02 3.292136499999999799e+00 9.220505900000000032e-01 1.569757499999999917e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.406543799999999900e+00 -1.190382800000000074e+00 1.084708100000000064e+00 1.310643999999999920e+00 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.233113900000000207e+00 -2.251323199999999858e+00 2.482441899999999979e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -7.555763100000000287e-01 -2.036404900000000073e-01 1.547713799999999917e+00 3.730759799999999737e-01 -6.140064399999999728e-02 4.033461299999999916e+00 9.818760600000000505e-01 1.338133199999999912e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.538925600000000005e+00 -1.368567499999999937e+00 1.084708100000000064e+00 9.666375000000000384e-01 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.360809999999999853e+00 -2.389257699999999929e+00 2.916646300000000025e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 -3.405394900000000002e-01 5.202276700000000309e-01 -6.140064399999999728e-02 5.861965500000000162e+00 1.101526999999999923e+00 5.274481500000000045e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 7.975876200000000527e-01 -1.012198099999999990e+00 9.468290699999999671e-02 2.786245700000000158e-01 -4.882788900000000210e-01 -3.545932500000000154e+00 -2.552354300000000187e+00 -3.078930300000000120e+00 1.781034900000000087e+00 -2.126605500000000148e+00
1.107293500000000042e-01 -5.556284299999999510e-01 -2.036404900000000073e-01 1.387813699999999928e+00 7.214435799999999732e-01 -6.140064399999999728e-02 6.888291500000000234e+00 1.101526999999999923e+00 7.590724599999999489e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.565401999999999960e+00 -1.368567499999999937e+00 1.139709499999999931e+00 -6.538189499999999543e-02 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.488506199999999779e+00 -2.734093999999999802e+00 4.219259300000000046e+00 -2.126605500000000148e+00
1.107293500000000042e-01 -6.574070800000000325e-01 -2.036404900000000073e-01 1.269545600000000052e+00 6.664869300000000329e-01 -6.140064399999999728e-02 4.886410099999999979e+00 1.041701500000000058e+00 8.748846200000000017e-01 -4.204873499999999820e-01 -1.398087899999999939e+00 1.565401999999999960e+00 -1.368567499999999937e+00 1.139709499999999931e+00 2.786245700000000158e-01 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.105417699999999837e+00 -1.975454199999999938e+00 3.117048299999999994e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -7.004868300000000048e-01 -2.036404900000000073e-01 2.007249100000000119e+00 7.271353000000000399e-01 -6.140064399999999728e-02 2.599952099999999877e+00 9.818760600000000505e-01 1.453945400000000054e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.538925600000000005e+00 -1.368567499999999937e+00 1.084708100000000064e+00 2.786245700000000158e-01 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.360809999999999853e+00 -1.837519700000000089e+00 2.749644599999999883e+00 -4.932939700000000260e-01
1.107293500000000042e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 1.842792999999999903e+00 3.111469399999999830e-01 -6.140064399999999728e-02 3.527069200000000126e+00 9.818760600000000505e-01 1.569757499999999917e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 6.387294799999999606e-01 -1.190382800000000074e+00 -5.103324599999999878e-01 -6.538189499999999543e-02 -4.882788900000000210e-01 -6.603848700000000127e-01 -2.424658099999999816e+00 -2.320290500000000034e+00 2.482441899999999979e+00 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 5.692962200000000195e-01 2.595423600000000164e+00 -6.140064399999999728e-02 1.812335900000000111e+00 1.221177900000000038e+00 1.338133199999999912e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 7.181585499999999511e-01 -1.439841399999999938e+00 -7.303380499999999609e-01 1.654650399999999966e+00 2.414444000000000035e+00 -1.862696399999999919e+00 -2.680050500000000113e+00 -1.630617900000000065e+00 -2.563854099999999803e-01 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 -1.823449799999999899e-01 4.837624799999999947e-01 2.271247499999999864e+00 -6.140064399999999728e-02 1.396321499999999993e+00 1.221177900000000038e+00 1.569757499999999917e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 7.181585499999999511e-01 -1.439841399999999938e+00 -7.303380499999999609e-01 9.666375000000000384e-01 2.414444000000000035e+00 -1.862696399999999919e+00 -2.871594700000000167e+00 -1.699585200000000018e+00 -2.563854099999999803e-01 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 -1.842095699999999892e-01 2.981724199999999936e-01 2.012528300000000048e+00 -6.140064399999999728e-02 2.777687199999999912e+00 1.221177900000000038e+00 1.569757499999999917e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 7.181585499999999511e-01 -1.439841399999999938e+00 -7.303380499999999609e-01 9.666375000000000384e-01 2.414444000000000035e+00 -1.862696399999999919e+00 -2.999290900000000093e+00 -1.699585200000000018e+00 -2.563854099999999803e-01 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 -1.857890500000000111e-01 1.409597400000000000e-01 1.793368099999999909e+00 -6.140064399999999728e-02 2.529275399999999951e+00 1.221177900000000038e+00 1.685569700000000060e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 7.181585499999999511e-01 -1.439841399999999938e+00 -7.303380499999999609e-01 6.226310299999999742e-01 2.414444000000000035e+00 -1.862696399999999919e+00 -3.126987100000000019e+00 -1.768552399999999913e+00 -2.897857400000000139e-01 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 -1.878364800000000001e-01 7.236910100000000234e-01 1.509278200000000014e+00 -6.140064399999999728e-02 3.450049200000000038e+00 1.221177900000000038e+00 1.917194000000000065e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 2.809790800000000033e+00 -1.439841399999999938e+00 3.614772299999999827e+00 1.998656900000000070e+00 9.630825400000000425e-01 -1.862696399999999919e+00 -3.190835199999999983e+00 -1.699585200000000018e+00 -2.229850800000000022e-01 -2.126605500000000148e+00
-3.125388000000000055e-01 -9.199884400000000184e-01 -1.849998599999999882e-01 5.287414299999999567e-01 1.328100400000000070e+00 -6.140064399999999728e-02 4.119239099999999709e+00 1.281003399999999903e+00 1.685569700000000060e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 5.328240400000000543e-01 -1.439841399999999938e+00 -1.115347799999999889e+00 1.310643999999999920e+00 -4.882788900000000210e-01 -1.862696399999999919e+00 -3.063139000000000056e+00 -1.906486899999999984e+00 -3.231860799999999867e-01 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 -1.843164300000000033e-01 6.081039499999999487e-01 1.103934399999999982e+00 -6.140064399999999728e-02 4.280468599999999846e+00 1.281003399999999903e+00 1.569757499999999917e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 5.328240400000000543e-01 -1.439841399999999938e+00 -1.115347799999999889e+00 6.226310299999999742e-01 -4.882788900000000210e-01 -1.862696399999999919e+00 -3.063139000000000056e+00 -1.837519700000000089e+00 -3.231860799999999867e-01 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 -1.817479100000000125e-01 5.431914500000000201e-01 1.341529600000000100e+00 -6.140064399999999728e-02 3.164841700000000202e+00 1.281003399999999903e+00 2.033006199999999986e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 5.857767600000000074e-01 -1.439841399999999938e+00 -1.005344999999999933e+00 1.310643999999999920e+00 -4.882788900000000210e-01 -1.862696399999999919e+00 -3.254683299999999946e+00 -1.975454199999999938e+00 -3.565864100000000203e-01 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 -1.799788099999999891e-01 7.192773000000000083e-01 1.140380500000000019e+00 -6.140064399999999728e-02 3.443074999999999886e+00 1.340828799999999932e+00 2.033006199999999986e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.621550400000000003e-01 -8.696503300000000269e-01 -1.005344999999999933e+00 9.666375000000000384e-01 -4.882788900000000210e-01 -1.862696399999999919e+00 -3.382379400000000036e+00 -2.044421400000000055e+00 -3.899867499999999931e-01 -4.932939700000000260e-01
-3.125388000000000055e-01 -9.199884400000000184e-01 -1.810197299999999898e-01 6.156709799999999788e-01 1.060141100000000058e+00 -6.140064399999999728e-02 3.279366599999999909e+00 1.340828799999999932e+00 2.148818299999999848e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.459496600000000033e+00 -9.765611499999999889e-01 1.524719200000000052e+00 9.666375000000000384e-01 -4.882788900000000210e-01 -1.862696399999999919e+00 -3.382379400000000036e+00 -2.044421400000000055e+00 -2.229850800000000022e-01 -2.126605500000000148e+00
-4.183558299999999841e-01 -9.199884400000000184e-01 -1.805742399999999970e-01 1.042659299999999956e+00 1.094481700000000002e+00 -6.140064399999999728e-02 3.349429999999999907e+00 1.281003399999999903e+00 1.685569700000000060e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.459496600000000033e+00 -9.765611499999999889e-01 1.524719200000000052e+00 6.226310299999999742e-01 9.630825400000000425e-01 -1.982927499999999954e+00 -3.126987100000000019e+00 -1.837519700000000089e+00 -2.258307600000000054e-02 -2.126605500000000148e+00
-4.183558299999999841e-01 -9.199884400000000184e-01 -1.611781499999999923e-01 8.295637099999999542e-01 9.530231700000000306e-01 -6.140064399999999728e-02 3.060819500000000026e+00 1.221177900000000038e+00 1.338133199999999912e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.459496600000000033e+00 -9.765611499999999889e-01 1.524719200000000052e+00 6.226310299999999742e-01 -4.882788900000000210e-01 -1.982927499999999954e+00 -2.616202400000000150e+00 -1.561650699999999947e+00 2.446195899999999979e-01 -4.932939700000000260e-01
-4.183558299999999841e-01 -9.199884400000000184e-01 -1.710553999999999963e-01 7.966295399999999693e-01 8.235100100000000145e-01 -6.140064399999999728e-02 3.565299299999999949e+00 1.281003399999999903e+00 1.453945400000000054e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.459496600000000033e+00 -9.765611499999999889e-01 1.524719200000000052e+00 -6.538189499999999543e-02 -4.882788900000000210e-01 -1.862696399999999919e+00 -2.807746700000000040e+00 -1.699585200000000018e+00 1.081725700000000026e-02 -4.932939700000000260e-01
-4.183558299999999841e-01 -9.199884400000000184e-01 -1.646348499999999992e-01 9.523956000000000088e-01 1.120470300000000030e+00 -6.140064399999999728e-02 2.788995200000000008e+00 1.221177900000000038e+00 1.222321100000000049e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.459496600000000033e+00 -9.765611499999999889e-01 1.524719200000000052e+00 6.226310299999999742e-01 -4.882788900000000210e-01 -1.922811999999999966e+00 -2.488506199999999779e+00 -1.492683399999999994e+00 2.446195899999999979e-01 -4.932939700000000260e-01
-4.183558299999999841e-01 -9.199884400000000184e-01 -1.509341100000000102e-01 6.957258400000000398e-01 1.212427700000000108e+00 -6.140064399999999728e-02 2.484822299999999817e+00 1.221177900000000038e+00 1.222321100000000049e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 1.459496600000000033e+00 -9.765611499999999889e-01 1.524719200000000052e+00 2.786245700000000158e-01 -4.882788900000000210e-01 -1.321656200000000059e+00 -2.296962000000000170e+00 -1.423716200000000098e+00 1.444185900000000133e-01 -4.932939700000000260e-01
-4.183558299999999841e-01 -9.199884400000000184e-01 -2.036404900000000073e-01 1.173281800000000041e+00 2.579785699999999959e+00 -6.140064399999999728e-02 -2.782949499999999854e-01 1.101526999999999923e+00 3.191127700000000011e+00 -4.204873499999999820e-01 -1.398087899999999939e+00 4.269186099999999762e-01 -8.696503300000000269e-01 -4.553310600000000097e-01 2.786245700000000158e-01 -4.882788900000000210e-01 -4.026857099999999967e+00 -3.829316099999999778e+00 -1.285781599999999969e+00 3.584652900000000031e+00 -4.932939700000000260e-01

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Разница между файлами не показана из-за своего большого размера Загрузить разницу

@ -29,12 +29,14 @@ from pandas import DataFrame
from sklearn.metrics import precision_score, recall_score, f1_score, confusion_matrix from sklearn.metrics import precision_score, recall_score, f1_score, confusion_matrix
from tensorflow.keras.models import Sequential from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation from tensorflow.keras.layers import Dense, Activation
from tensorflow.keras.callbacks import Callback
visual = True visual = True
verbose_show = False verbose_show = False
# generate 2d classification dataset # generate 2d classification dataset
def datagen(x_c, y_c, n_samples, n_features): def datagen(x_c, y_c, n_samples, n_features):
@ -91,8 +93,27 @@ class EarlyStoppingOnValue(tensorflow.keras.callbacks.Callback):
) )
return monitor_value return monitor_value
class VerboseEveryNEpochs(Callback):
def __init__(self, every_n_epochs=1000, verbose=1):
super().__init__()
self.every_n_epochs = every_n_epochs
self.verbose = verbose
def on_epoch_end(self, epoch, logs=None):
if (epoch + 1) % self.every_n_epochs == 0:
if self.verbose:
print(f"\nEpoch {epoch + 1}/{self.params['epochs']}")
if logs:
log_str = ", ".join([f"{k}: {v:.4f}" for k, v in logs.items()])
print(f" - {log_str}")
#создание и обучение модели автокодировщика #создание и обучение модели автокодировщика
def create_fit_save_ae(cl_train, ae_file, irefile, epohs, verbose_show, patience): def create_fit_save_ae(cl_train, ae_file, irefile, epohs, verbose_show, patience, **kwargs):
verbose_every_n_epochs = kwargs.get('verbose_every_n_epochs', 1000)
early_stopping_delta = kwargs.get('early_stopping_delta', 0.01)
early_stopping_value = kwargs.get('early_stopping_value', 0.0001)
size = cl_train.shape[1] size = cl_train.shape[1]
#ans = '2' #ans = '2'
@ -140,22 +161,28 @@ def create_fit_save_ae(cl_train, ae_file, irefile, epohs, verbose_show, patience
optimizer = tensorflow.keras.optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False) optimizer = tensorflow.keras.optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False)
ae.compile(loss='mean_squared_error', optimizer=optimizer) ae.compile(loss='mean_squared_error', optimizer=optimizer)
error_stop = 0.0001
epo = epohs epo = epohs
early_stopping_callback_on_error = EarlyStoppingOnValue(monitor='loss', baseline=error_stop)
verbose = 1 if verbose_show else 0
early_stopping_callback_on_error = EarlyStoppingOnValue(monitor='loss', baseline=early_stopping_value)
early_stopping_callback_on_improving = tensorflow.keras.callbacks.EarlyStopping(monitor='loss', early_stopping_callback_on_improving = tensorflow.keras.callbacks.EarlyStopping(monitor='loss',
min_delta=0.0001, patience = patience, min_delta=early_stopping_delta, patience = patience,
verbose=1, mode='auto', verbose=verbose, mode='min',
baseline=None, baseline=None,
restore_best_weights=False) restore_best_weights=True)
history_callback = tensorflow.keras.callbacks.History() history_callback = tensorflow.keras.callbacks.History()
verbose = 1 if verbose_show else 0
history_object = ae.fit(cl_train, cl_train, history_object = ae.fit(cl_train, cl_train,
batch_size=cl_train.shape[0], batch_size=cl_train.shape[0],
epochs=epo, epochs=epo,
callbacks=[early_stopping_callback_on_error, history_callback, callbacks=[
early_stopping_callback_on_improving], early_stopping_callback_on_error,
history_callback,
early_stopping_callback_on_improving,
VerboseEveryNEpochs(every_n_epochs=verbose_every_n_epochs),
],
verbose=verbose) verbose=verbose)
ae_trainned = ae ae_trainned = ae
ae_pred = ae_trainned.predict(cl_train) ae_pred = ae_trainned.predict(cl_train)

Двоичные данные
labworks/LW2/out/AE1.h5

Двоичный файл не отображается.

Двоичные данные
labworks/LW2/out/AE1_AE2_train_def.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 21 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 22 KiB

Двоичные данные
labworks/LW2/out/AE1_train_def.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 35 KiB

Двоичные данные
labworks/LW2/out/AE2.h5

Двоичный файл не отображается.

Двоичные данные
labworks/LW2/out/AE2_train_def.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 32 KiB

Двоичные данные
labworks/LW2/out/AE3.h5

Двоичный файл не отображается.

Двоичные данные
labworks/LW2/out/IRE_testAE1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 42 KiB

Двоичные данные
labworks/LW2/out/IRE_testAE3.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 60 KiB

Двоичные данные
labworks/LW2/out/IRE_trainingAE1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 57 KiB

Двоичные данные
labworks/LW2/out/IRE_trainingAE2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 106 KiB

Двоичные данные
labworks/LW2/out/IRE_trainingAE3.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 86 KiB

Двоичные данные
labworks/LW2/out/XtXd_1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 98 KiB

Двоичные данные
labworks/LW2/out/XtXd_1_metrics.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 110 KiB

Двоичные данные
labworks/LW2/out/XtXd_2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 66 KiB

Двоичные данные
labworks/LW2/out/XtXd_2_metrics.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 77 KiB

@ -0,0 +1,5 @@
------------Оценка качества AE2 С ПОМОЩЬЮ НОВЫХ МЕТРИК------------
Approx = 0.7333333333333333
Excess = 0.36363636363636365
Deficit = 0.0
Coating = 1.0

Двоичные данные
labworks/LW2/out/train_set.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 45 KiB

@ -0,0 +1,282 @@
# Отчет по лабораторной работе №2
Юсуфов Юнус,Романов Мирон , А-01-22
## 1. Определили свой набор данных по таблице.
Бригада №9 -> k = 9 mod 3 = 0 -> Cardio
## 2. Подготовили программную среду Google Colaboratory для выполнения лабораторной работы.
```
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/cardio_train.txt
!wget -N http://uit.mpei.ru/git/main/is_dnn/raw/branch/main/labworks/LW2/data/cardio_test.txt
```
### Задание 1.
## 1. В среде GoogleColab создалиновый блокнот(notebook). Импортировали необходимые для работы библиотеки и модули.
```
import numpy as np
import lab02_lib as lib
```
## 2. Сгенерировали индивидуальный набор двумерных данныхв пространстве признаковс координатами центра (k, k), где k–номер бригады. Вывели полученные данные на рисунок и в консоль.
```
# генерация датасета
# data=lib.datagen(9, 9, 1000, 2)
data = np.loadtxt('data.txt', dtype=float)
# вывод данных и размерности
print('Исходные данные:')
print(data)
print('Размерность данных:')
print(data.shape)
```
>Исходные данные:
>[[9.19152143 8.99994525]
>[9.04581739 9.01557436]
>[9.15556184 9.0895709 ]
>...
>[8.95859907 8.92197639]
>[9.00243424 8.96375469]
>[8.86636465 9.13183014]]
>Размерность данных:
>(1000, 2)
## 3. Создали и обучили автокодировщик AE1 простой архитектуры, выбрав небольшое количество эпох обучения. Зафиксировали значения, для будущего внесения в таблицу.
```
# обучение AE1
patience = 300
ae1_trained, IRE1, IREth1 = lib.create_fit_save_ae(data,'out/AE1.h5','out/AE1_ire_th.txt', 1000, True, patience)
# Построение графика ошибки реконструкции
lib.ire_plot('training', IRE1, IREth1, 'AE1')
```
* 5 Скрытых слоев
* 5 3 1 3 5
## 4. Зафиксировали ошибку MSE, на которой обучение завершилось. Построили график ошибки реконструкции обучающей выборки. Зафиксировали порог ошибки реконструкции – порог обнаружения аномалий.
![ae1_training](ae1_training.png)
* MSE_stop = 5.3137
* IREth1 = 3.6
## 5. Создали и обучили второй автокодировщик AE2 с усложненной архитектурой, задав большее количество эпох обучения.
```
# обучение AE2
ae2_trained, IRE2, IREth2 = lib.create_fit_save_ae(data,'out/AE2.h5','out/AE2_ire_th.txt', 3000, True, patience)
lib.ire_plot('training', IRE2, IREth2, 'AE2')
```
* 7 скрытых слоев
* 5 3 2 1 2 3 5
## 6. Зафиксировали ошибку MSE, на которой обучение завершилось. Построили график ошибки реконструкции обучающей выборки. Зафиксировали второй порог ошибки реконструкции – порог обнаружения аномалий.
![ae2_training](ae2_training.png)
* MSE_stop = 0.0103
* IREth1 = 0.4
## 7. Рассчитали характеристики качества обучения 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)
```
![ae1_class](ae1_class.png)
* EDCA AE1
![ae1_EDCA](ae1_EDCA.png)
![ae1_EDCA](ae1_EDCA1.png)
* Оценка качества AE1
* IDEAL = 0. Excess: 12.636363636363637
* IDEAL = 0. Deficit: 0.0
* IDEAL = 1. Coating: 1.0
* summa: 1.0
* IDEAL = 1. Extrapolation precision (Approx): 0.07333333333333332
* AE2
```
# построение областей покрытия и границ классов
# расчет характеристик качества обучения
numb_square = 20
xx, yy, Z2 = lib.square_calc(numb_square, data, ae2_trained, IREth2, '2', True)
```
![ae2_class](ae2_class.png)
* EDCA AE2
![ae2_EDCA](ae2_EDCA.png)
![ae2_EDCA](ae2_EDCA1.png)
* Оценка качества AE2
* IDEAL = 0. Excess: 0.36363636363636365
* IDEAL = 0. Deficit: 0.0
* IDEAL = 1. Coating: 1.0
* summa: 1.0
* IDEAL = 1. Extrapolation precision (Approx): 0.7333333333333333
### Сравним области пространства признаков AE1 и AE2
```
# сравнение характеристик качества обучения и областей аппроксимации
lib.plot2in1(data, xx, yy, Z1, Z2)
```
![ae1_ae2](ae1_ae2.png)
### Вывод по пункту.
AE1 не достаточно хорошо аппроксимирует область обучающих данных, что может значительно повлиять на результаты тестов. По сравнению с AE2, AE1 плохо ограничивает нашу область признаков с "левой" стороны.
## 8. Изучили сохраненный набор данных и пространство признаков. Создали тестовую выборку, состоящую из 4-ёх элементов, не входящих в обучающую выборку. Элементы выбраны так, чтобы AE1 распознавал их как норму, а AE2 детектировал как аномалии.
```
# загрузка тестового набора
data_test = np.loadtxt('/content/drive/MyDrive/Colab Notebooks/is_lab2/Lab02/data_test.txt', dtype=float)
print(data_test)
```
>[[8.1 8.5]
>[7.2 8. ]
>[9. 8. ]
>[8.5 9.5]]
## 9. Применили обученные автокодировщики AE1 и AE2 к тестовым данным и вывели значения ошибки реконструкции для каждого элемента тестовой выборки относительно порога.
```
# тестирование АE1
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')
```
>Аномалий не обнаружено
![ae1_test](ae1_test.png)
```
# тестирование АE2
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, 'AE1')
```
>i Labels IRE IREth
>0 [1.] [1.02] 0.4
>1 [1.] [2.05] 0.4
>2 [1.] [1.] 0.4
>3 [1.] [0.69] 0.4
>Обнаружено 4.0 аномалий
![ae2_test](ae2_test.png)
## 10. Визуализировали элементы обучающей и тестовой выборки в областях пространства признаков, распознаваемых автокодировщиками AE1 и AE2.
```
# построение областей аппроксимации и точек тестового набора
lib.plot2in1_anomaly(data, xx, yy, Z1, Z2, data_test)
```
![ae1_ae2_test](ae1_ae2_test.png)
## 11. Результаты исследования занесли в таблицу:
| |Количество скрытых слоев|Количество нейронов в скрытых слоях|Количество эпох обучения|Ошибка MSE_stop|Порог ошибки реконструкции|Значение показателя Excess|Значение показателя Approx|Количество обнаруженных аномалий|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|AE1|5|5 3 1 3 5|1000|5.3137|3.6|12.636363636363637|0.07333333333333332|0|
|AE2|7|5 3 2 1 2 3 5|3000|0.0103|0.4|0.36363636363636365|0.7333333333333333|4|
## 12. Сделали выводы о требованиях к:
* Данным обучения - необходима плотная выборка нормальных состояний без выбросов, покрывающая рабочую область (в эксперименте — 1000 точек вокруг (9, 9)), чтобы модель корректно восстанавливала типичные объекты.
* Архитектуре кодировщика - оптимальна глубокая симметричная структура с узким горлышком (5-3-2-1-2-3-5), обеспечивающая точную реконструкцию и устойчивые границы нормы.
* Количеству эпох обучения - требуется не менее 3000 эпох для данного набора данных; обучение в 1000 эпох оставляет высокую ошибку и не формирует надежный порог аномалий.
* Ошибке MSE_stop, приемлемой для останова обучения - ориентир на значения порядка 0.001 или 0.01 (0.0103 для AE2); более крупные значения, как 5.3137 у AE1, свидетельствуют о недообучении.
* Ошибке реконструкции обучающей выборки - целесообразно удерживать порог ниже 0.5 (IREth = 0.4 у AE2), тогда как порог 3.6 у AE1 приводит к пропуску аномалий.
* Характеристикам EDCA, для качественного обнаружения аномалий в данных - требуется минимальный Excess (<1) и высокая Approx (0.7); такие значения достигаются AE2, тогда как AE1 с Excess = 12.6 непригоден.
### Задание 2.
## 1. Изучили описание своего набора реальных данных, что он из себя представляет.
## 2. Загрузили многомерную обучающую выборку реальных данных cardio_train.txt. Изучили и загрузили тестовую выборку cardio_test.txt.
```
train = np.loadtxt('cardio_train.txt', dtype=float)
test = np.loadtxt('cardio_test.txt', dtype=float)
print('Исходные данные:')
print(train)
print('Размерность данных:')
print(train.shape)
print('Исходные данные:')
print(test)
print('Размерность данных:')
print(test.shape)
```
Исходные данные:
>[[ 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]]
>Размерность данных:
>(1654, 21)
## 3. Создали и обучили автокодировщик с подходящей для данных
архитектурой. Выбрали необходимое количество эпох обучения.
```
# обучение AE3
patience = 7500
from time import time
start = time()
ae3_trained, IRE3, IREth3 = lib.create_fit_save_ae(train,'out/AE3.h5','out/AE3_ire_th.txt', 120000, False, 7500, early_stopping_delta = 0.001)
print("Время на обучение: ", time() - start)
# Построение графика ошибки реконструкции
lib.ire_plot('training', IRE3, IREth3, 'AE3')
```
* 15 скрытых слоев
* 21 19 17 15 13 11 9 7 9 11 13 15 17 19 21
## 4. Зафиксировали ошибку MSE, на которой обучение завершилось. Построили график ошибки реконструкции обучающей выборки. Зафиксировали порог ошибки реконструкции – порог обнаружения аномалий.
![ae3_training](ae3_training.png)
* MSE_stop = 0.0319
* IREth1 = 3.07
## 5. Подали тестовую выборку на вход обученного автокодировщика для обнаружения аномалий. Вывели график ошибки реконструкции элементов тестовой выборки относительно порога.
```
# тестирование АE3
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')
```
>Обнаружено 94.0 аномалий
>Accuracy: 86.23%
![ae3_test](ae3_test.png)
|Dataset name|Количество скрытых слоев|Количество нейронов в скрытых слоях|Количество эпох обучения|Ошибка MSE_stop|Порог ошибки реконструкции|% Обнаруженных аномалий|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|Cardio|15|21 19 17 15 13 11 9 7 9 11 13 15 17 19 21|85000|0.0319|3.07|86.23|
## 6. Сделали выводы о требованиях к:
* Данным обучения - необходима масштабированная и очищенная выборка, охватывающая все состояния нормы; 1654 нормализованных записей cardio_train дают устойчивую оценку распределения.
* Архитектуре кодировщика - эффективна глубокая симметричная сеть, которая сжимает 21 признаковое измерение до компактного латентного пространства и поддерживает высокую точность восстановления.
* Количеству эпох обучения - требуется длительное обучение (100к+ эпох) с ранней остановкой; меньшая длительность не успевает снизить ошибку реконструкции до приемлемого уровня.
* Ошибке MSE_stop, приемлемой для останова обучения - ориентир на значения порядка 0.01 (0.0319), после чего дальнейшее обучение дает минимальный прирост качества при заметном росте времени.
* Ошибке реконструкции обучающей выборки, для качественного обнаружения аномалий в случае, когда размерность пространства признаков высока - порог около 3.0 (IREth = 3.07) позволяет выделять ~86% аномалий без чрезмерного количества ложных срабатываний; важно калибровать порог по распределению ошибок.

Двоичные данные
labworks/LW3/2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 292 B

Двоичные данные
labworks/LW3/2_pr.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.7 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Двоичные данные
labworks/LW3/best_model_2l_100_LR1.keras

Двоичный файл не отображается.

Двоичные данные
labworks/LW3/bird.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 12 KiB

Двоичные данные
labworks/LW3/deer.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 12 KiB

Двоичные данные
labworks/LW3/first_attempt.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.0 KiB

Двоичные данные
labworks/LW3/heat.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 32 KiB

Двоичные данные
labworks/LW3/heat2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 68 KiB

Двоичные данные
labworks/LW3/model.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 28 KiB

Двоичные данные
labworks/LW3/model2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 18 KiB

Двоичные данные
labworks/LW3/model3.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 36 KiB

@ -0,0 +1,466 @@
# Отчёт по лабораторной работе №3
Романов Мирон, Юсуфов Юнус, А-01-22
Бригада №9
# Задание 1
## 1) В среде Google Colab создали новый блокнот (notebook). Импортировали необходимые для работы библиотеки и модули.
```python
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks/IS_LR3')
# импорт модулей
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.metrics import ConfusionMatrixDisplay
```
## 2) Загрузили набор данных MNIST, содержащий размеченные изображения рукописных цифр.
```python
# загрузка датасета
from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
```
## 3) Разбили набор данных на обучающие и тестовые данные в соотношении 60 000:10 000 элементов. Параметр random_state выбрали равным (4k – 1) = 15, где k = 4 – номер бригады. Вывели размерности полученных обучающих и тестовых массивов данных.
```python
# создание своего разбиения датасета
from sklearn.model_selection import train_test_split
# объединяем в один набор
X = np.concatenate((X_train, X_test))
y = np.concatenate((y_train, y_test))
# разбиваем по вариантам
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size = 10000,
train_size = 60000,
random_state = 35)
# вывод размерностей
print('Shape of X train:', X_train.shape)
print('Shape of y train:', y_train.shape)
print('Shape of X test:', X_test.shape)
print('Shape of y test:', y_test.shape)
```
```
Shape of X train: (60000, 28, 28)
Shape of y train: (60000,)
Shape of X test: (10000, 28, 28)
Shape of y test: (10000,)
```
## 4) Провели предобработку данных: привели обучающие и тестовые данные к формату, пригодному для обучения сверточной нейронной сети. Входные данные принимают значения от 0 до 1, метки цифр закодированы по принципу «one-hot encoding». Вывели размерности предобработанных обучающих и тестовых массивов данных.
```python
# Зададим параметры данных и модели
num_classes = 10
input_shape = (28, 28, 1)
# Приведение входных данных к диапазону [0, 1]
X_train = X_train / 255
X_test = X_test / 255
# Расширяем размерность входных данных, чтобы каждое изображение имело
# размерность (высота, ширина, количество каналов)
X_train = np.expand_dims(X_train, -1)
X_test = np.expand_dims(X_test, -1)
print('Shape of transformed X train:', X_train.shape)
print('Shape of transformed X test:', X_test.shape)
# переведем метки в one-hot
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
print('Shape of transformed y train:', y_train.shape)
print('Shape of transformed y test:', y_test.shape)
```
```
Shape of transformed X train: (60000, 28, 28, 1)
Shape of transformed X test: (10000, 28, 28, 1)
Shape of transformed y train: (60000, 10)
Shape of transformed y test: (10000, 10)
```
## 5) Реализовали модель сверточной нейронной сети и обучили ее на обучающих данных с выделением части обучающих данных в качестве валидационных. Вывели информацию об архитектуре нейронной сети.
```python
# создаем модель
model = Sequential()
model.add(layers.Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=input_shape))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))
model.add(layers.Conv2D(64, kernel_size=(3, 3), activation="relu"))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))
model.add(layers.Dropout(0.5))
model.add(layers.Flatten())
model.add(layers.Dense(num_classes, activation="softmax"))
model.summary()
```
![model](model.png)
```python
# компилируем и обучаем модель
batch_size = 512
epochs = 15
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
```
```
Epoch 15/15
106/106 ━━━━━━━━━━━━━━━━━━━━ 39s 370ms/step - accuracy: 0.9864 - loss: 0.0406 - val_accuracy: 0.9875 - val_loss: 0.0384
```
## 6) Оценили качество обучения на тестовых данных. Вывели значение функции ошибки и значение метрики качества классификации на тестовых данных.
```python
# Оценка качества работы модели на тестовых данных
scores = model.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])
```
```
313/313 ━━━━━━━━━━━━━━━━━━━━ 4s 12ms/step - accuracy: 0.9876 - loss: 0.0382
Loss on test data: 0.03760423883795738
Accuracy on test data: 0.9884999990463257
```
## 7) Подали на вход обученной модели два тестовых изображения. Вывели изображения, истинные метки и результаты распознавания.
```python
# вывод тестового изображения и результата распознавания
for n in [67, 69]:
result = model.predict(X_test[n:n+1])
print('NN output:', result)
plt.imshow(X_test[n].reshape(28,28), cmap=plt.get_cmap('gray'))
plt.show()
print('Real mark: ', np.argmax(y_test[n]))
print('NN answer: ', np.argmax(result))
```
![first](first_attempt.png)
```
Real mark: 3
NN answer: 3
```
![second](second_attempt.png)
```
Real mark: 1
NN answer: 1
```
## 8) Вывели отчет о качестве классификации тестовой выборки и матрицу ошибок для тестовой выборки.
```python
# истинные метки классов
true_labels = np.argmax(y_test, axis=1)
# предсказанные метки классов
predicted_labels = np.argmax(model.predict(X_test), axis=1)
# отчет о качестве классификации
print(classification_report(true_labels, predicted_labels))
# вычисление матрицы ошибок
conf_matrix = confusion_matrix(true_labels, predicted_labels)
# отрисовка матрицы ошибок в виде "тепловой карты"
display = ConfusionMatrixDisplay(confusion_matrix=conf_matrix)
display.plot()
plt.show()
```
```
precision recall f1-score support
0 0.99 1.00 0.99 965
1 0.99 0.99 0.99 1115
2 0.99 0.99 0.99 1020
3 1.00 0.99 0.99 1075
4 0.99 0.99 0.99 959
5 0.98 0.99 0.99 909
6 0.99 0.99 0.99 970
7 0.98 0.99 0.99 1050
8 0.98 0.97 0.98 972
9 0.99 0.98 0.99 965
accuracy 0.99 10000
macro avg 0.99 0.99 0.99 10000
weighted avg 0.99 0.99 0.99 10000
```
![heat](heat.png)
## 9) Загрузили, предобработали и подали на вход обученной нейронной сети собственное изображение, созданное при выполнении лабораторной работы №1. Вывели изображение и результат распознавания.
```python
# загрузка собственного изображения
from PIL import Image
file_data = Image.open('2.png')
file_data = file_data.convert('L') # перевод в градации серого
test_img = np.array(file_data)
# вывод собственного изображения
plt.imshow(test_img, cmap=plt.get_cmap('gray'))
plt.show()
# предобработка
test_img = test_img / 255
test_img = np.reshape(test_img, (1,28,28,1))
# распознавание
result = model.predict(test_img)
print('I think it\'s ', np.argmax(result))
```
![2_pr](2_pr.png)
```
I think it's 2
```
## 10) Загрузили с диска модель, сохраненную при выполнении лабораторной работы №1. Вывели информацию об архитектуре модели. Повторили для этой модели п. 6.
```python
model_lr1 = keras.models.load_model("/content/drive/MyDrive/Colab Notebooks/IS_LR3/best_model_2l_100_LR1.keras")
model_lr1.summary()
```
![model2](model2.png)
```python
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size = 10000,
train_size = 60000,
random_state = 35)
num_pixels = X_train.shape[1] * X_train.shape[2]
X_train = X_train.reshape(X_train.shape[0], num_pixels) / 255
X_test = X_test.reshape(X_test.shape[0], num_pixels) / 255
print('Shape of transformed X train:', X_train.shape)
print('Shape of transformed X train:', X_test.shape)
# переведем метки в one-hot
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
print('Shape of transformed y train:', y_train.shape)
print('Shape of transformed y test:', y_test.shape)
```
```
Shape of transformed X train: (60000, 784)
Shape of transformed X train: (10000, 784)
Shape of transformed y train: (60000, 10)
Shape of transformed y test: (10000, 10)
```
```python
# Оценка качества работы модели на тестовых данных
scores = model_lr1.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])
```
```
313/313 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.9166 - loss: 0.3003
Loss on test data: 0.3069264590740204
Accuracy on test data: 0.9150000214576721
```
## 11) Сравнили обученную модель сверточной сети и наилучшую модель полносвязной сети из лабораторной работы №1 по следующим показателям:
## - количество настраиваемых параметров в сети
## - количество эпох обучения
## - качество классификации тестовой выборки.
## Сделали выводы по результатам применения сверточной нейронной сети для распознавания изображений.
Таблица 1:
| Модель | Количество настраиваемых параметров | Количество эпох обучения | Качество классификации тестовой выборки |
|----------|-------------------------------------|---------------------------|-----------------------------------------|
| Сверточная | 34 826 | 15 | accuracy:0.988 ; loss:0.038 |
| Полносвязная | 79,512 | 50 | accuracy:0.915 ; loss:0.307 |
## Вывод
По результатам применения сверточной НС, а также по результатам таблицы 1 делаем выводы, что сверточная НС лучше справляется с задачами распознования изображений, чем полносвязная - имеет меньше настраиваемых параметров, быстрее обучается, имеет лучшие показатели качества.
# Задание 2
В новом блокноте выполнили п. 2–8 задания 1, изменив набор данных MNIST на CIFAR-10, содержащий размеченные цветные изображения объектов, разделенные на 10 классов.
При этом:
* в п. 3 разбиение данных на обучающие и тестовые произвели в соотношении 50 000:10 000
* после разбиения данных (между п. 3 и 4) вывели 25 изображений из обучающей выборки с подписями классов
* в п. 7 одно из тестовых изображений должно распознаваться корректно, а другое – ошибочно.
## 1) Загрузили набор данных CIFAR-10, содержащий цветные изображения размеченные на 10 классов: самолет, автомобиль, птица, кошка, олень, собака, лягушка, лошадь, корабль, грузовик.
```python
# загрузка датасета
from keras.datasets import cifar10
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
```
## 2) Разбили набор данных на обучающие и тестовые данные в соотношении 50 000:10 000 элементов. Параметр random_state выбрали равным (4k – 1)=15, где k=4 –номер бригады. Вывели размерности полученных обучающих и тестовых массивов данных.
```python
# создание своего разбиения датасета
# объединяем в один набор
X = np.concatenate((X_train, X_test))
y = np.concatenate((y_train, y_test))
# разбиваем по вариантам
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size = 10000,
train_size = 50000,
random_state = 15)
# вывод размерностей
print('Shape of X train:', X_train.shape)
print('Shape of y train:', y_train.shape)
print('Shape of X test:', X_test.shape)
print('Shape of y test:', y_test.shape)
```
```
Shape of X train: (50000, 32, 32, 3)
Shape of y train: (50000, 1)
Shape of X test: (10000, 32, 32, 3)
Shape of y test: (10000, 1)
```
## Вывели 25 изображений из обучающей выборки с подписью классов.
```python
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
'dog', 'frog', 'horse', 'ship', 'truck']
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(X_train[i])
plt.xlabel(class_names[y_train[i][0]])
plt.show()
```
![test](test.png)
## 3) Провели предобработку данных: привели обучающие и тестовые данные к формату, пригодному для обучения сверточной нейронной сети. Входные данные принимают значения от 0 до 1, метки цифр закодированы по принципу «one-hot encoding». Вывели размерности предобработанных обучающих и тестовых массивов данных.
```python
# Зададим параметры данных и модели
num_classes = 10
input_shape = (32, 32, 3)
# Приведение входных данных к диапазону [0, 1]
X_train = X_train / 255
X_test = X_test / 255
print('Shape of transformed X train:', X_train.shape)
print('Shape of transformed X test:', X_test.shape)
# переведем метки в one-hot
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
print('Shape of transformed y train:', y_train.shape)
print('Shape of transformed y test:', y_test.shape)
```
```
Shape of transformed X train: (50000, 32, 32, 3)
Shape of transformed X test: (10000, 32, 32, 3)
Shape of transformed y train: (50000, 10)
Shape of transformed y test: (10000, 10)
```
## 4) Реализовали модель сверточной нейронной сети и обучили ее на обучающих данных с выделением части обучающих данных в качестве валидационных. Вывели информацию об архитектуре нейронной сети.
```python
# создаем модель
model = Sequential()
model.add(layers.Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=input_shape))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))
model.add(layers.Conv2D(64, kernel_size=(3, 3), activation="relu"))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))
model.add(layers.Conv2D(128, kernel_size=(3, 3), activation="relu"))
model.add(layers.MaxPooling2D(pool_size=(2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(num_classes, activation="softmax"))
model.summary()
```
![model3](model3.png)
```python
# компилируем и обучаем модель
batch_size = 64
epochs = 50
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
```
Epoch 50/50
704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.8971 - loss: 0.2795 - val_accuracy: 0.7118 - val_loss: 1.3672
## 5) Оценили качество обучения на тестовых данных. Вывели значение функции ошибки и значение метрики качества классификации на тестовых данных.
```python
# Оценка качества работы модели на тестовых данных
scores = model.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])
```
```
313/313 ━━━━━━━━━━━━━━━━━━━━ 4s 9ms/step - accuracy: 0.7178 - loss: 1.3206
Loss on test data: 1.3243911266326904
Accuracy on test data: 0.7181000113487244
```
## 6) Подали на вход обученной модели два тестовых изображения. Вывели изображения, истинные метки и результаты распознавания.
```python
# вывод двух тестовых изображений и результатов распознавания
for n in [67,3]:
result = model.predict(X_test[n:n+1])
print('NN output:', result)
plt.imshow(X_test[n].reshape(32,32,3), cmap=plt.get_cmap('gray'))
plt.show()
print('Real mark: ', np.argmax(y_test[n]))
print('NN answer: ', np.argmax(result))
```
![bird](bird.png)
```
Real mark: 2
NN answer: 2
```
![deer](deer.png)
```
Real mark: 4
NN answer: 3
```
## 7) Вывели отчет о качестве классификации тестовой выборки и матрицу ошибок для тестовой выборки.
```python
true_labels = np.argmax(y_test, axis=1)
predicted_labels = np.argmax(model.predict(X_test), axis=1)
print(classification_report(true_labels, predicted_labels, target_names=class_names))
conf_matrix = confusion_matrix(true_labels, predicted_labels)
fig, ax = plt.subplots(figsize=(6, 6))
disp = ConfusionMatrixDisplay(confusion_matrix=conf_matrix,display_labels=class_names)
disp.plot(ax=ax, xticks_rotation=45)
plt.tight_layout()
plt.show()
```
```
precision recall f1-score support
airplane 0.71 0.75 0.73 982
automobile 0.80 0.84 0.82 1011
bird 0.66 0.62 0.64 974
cat 0.54 0.55 0.55 1022
deer 0.69 0.70 0.69 1016
dog 0.62 0.64 0.63 935
frog 0.78 0.76 0.77 1029
horse 0.79 0.72 0.75 989
ship 0.78 0.84 0.81 998
truck 0.81 0.75 0.78 1044
accuracy 0.72 10000
macro avg 0.72 0.72 0.72 10000
weighted avg 0.72 0.72 0.72 10000
```
![heat2](heat2.png)
## Вывод
По результатам классификации датасета CIFAR-10 созданной сверточной моделью можно сделать вывод, что она довольно неплохо справилась с задачей. Полученные метрики оценки качества имеют показатели в районе 0.72

Двоичные данные
labworks/LW3/second_attempt.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.5 KiB

Двоичные данные
labworks/LW3/test.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 123 KiB

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Двоичные данные
labworks/LW4/model.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

@ -0,0 +1,339 @@
# Отчёт по лабораторной работе №4
Романов Мирон, Юсуфов Юнус, А-01-22
Бригада №9
### Подготовка среды
```python
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks/IS_LR4')
```
## 1) В среде Google Colab создали новый блокнот (notebook). Настроили блокнот для работы с аппаратным ускорителем GPU
```python
import tensorflow as tf
device_name = tf.test.gpu_device_name()
if device_name != '/device:GPU:0':
raise SystemError('GPU device not found')
print('Found GPU at: {}'.format(device_name))
```
```
Found GPU at: /device:GPU:0
```
## 2) Загрузили набор данных IMDb, содержащий оцифрованные отзывы на фильмы, размеченные на два класса: позитивные и негативные
```python
# загрузка датасета
from keras.datasets import imdb
vocabulary_size = 5000
index_from = 3
(X_train, y_train), (X_test, y_test) = imdb.load_data(path="imdb.npz",
num_words=vocabulary_size,
skip_top=0,
maxlen=None,
seed=35,
start_char=1,
oov_char=2,
index_from=index_from
)
```
```
Shape of X train: (25000,)
Shape of y train: (25000,)
Shape of X test: (25000,)
Shape of y test: (25000,)
```
## 3) Вывесли один отзыв из обучающего множества в виде списка индексов слов. Преобразовали список индексов в текст и вывести отзыв в виде текста. Вывели длину отзыва. Вывели метку класса данного отзыва и название класса (1 – Positive, 0 – Negative)
```python
# создание словаря для перевода индексов в слова
# заргузка словаря "слово:индекс"
word_to_id = imdb.get_word_index()
# уточнение словаря
word_to_id = {key:(value + index_from) for key,value in word_to_id.items()}
word_to_id["<PAD>"] = 0
word_to_id["<START>"] = 1
word_to_id["<UNK>"] = 2
word_to_id["<UNUSED>"] = 3
# создание обратного словаря "индекс:слово"
id_to_word = {value:key for key,value in word_to_id.items()}
review_indices = X_train[19]
print("Review - index:\n", review_indices)
review_text = " ".join(id_to_word.get(i, "?") for i in review_indices)
print("\nReview - text:\n", review_text)
print("\nReview length:", len(review_indices))
label = y_train[19]
class_name = "Positive" if label == 1 else "Negative"
print("Class label:", label, "| Class name:", class_name)
```
```
Review - index:
[1, 608, 50, 26, 84, 37, 144, 24, 67, 14, 20, 10, 10, 300, 92, 67, 12, 48, 25, 92, 40, 2006, 42, 328, 1285, 241, 92, 40, 12, 48, 25, 188, 4154, 34, 4, 2, 342, 92, 67, 12, 48, 25, 181, 6, 622, 3783, 20, 10, 10, 4, 360, 7, 25, 521, 92, 1135, 8, 67, 736, 349, 45, 163, 45, 2812, 45, 6, 1917, 2, 7, 175, 78, 3783, 4896, 573, 8, 132, 2552, 2, 83, 4715, 312, 1285, 92, 2457, 4, 3028, 11, 3850, 364, 1317, 253, 7, 2, 2, 1022, 4106, 5, 4391, 2, 17, 73, 17, 6, 378, 7, 1139, 4139, 531, 34, 2, 3409, 5, 2, 2, 52, 8, 67, 4841, 2, 397, 157, 99, 13, 1498, 32, 4, 96, 143, 1254, 2, 643, 916, 21, 52]
Review - text:
<START> ok there are people who should not see this movie br br 1 don't see it if you don't like satire or black humour 2 don't like it if you got offended by the <UNK> 3 don't see it if you want a serious superhero movie br br the rest of you run don't walk to see mystery men it's funny it's quirky it's a delightful <UNK> of every bad superhero cliche known to man occasional <UNK> into junior high humour don't ruin the tongue in cheek low key fun of <UNK> <UNK> ben stiller and hank <UNK> as well as a couple of amusing smaller parts by <UNK> rush and <UNK> <UNK> good to see louise <UNK> getting work too i laughed all the way through utterly <UNK> somewhat weird but good
Review length: 134
Class label: 1 | Class name: Positive
```
## 4) Вывели максимальную и минимальную длину отзыва в обучающем множестве
```python
print("Max review length:", len(max(X_train, key=len)))
print("Min review length:", len(min(X_train, key=len)))
```
```
Max review length: 2494
Min review length: 11
```
## 5) Провели предобработку данных
```python
# предобработка данных
from tensorflow.keras.utils import pad_sequences
max_words = 500
X_train = pad_sequences(X_train, maxlen=max_words, value=0, padding='pre', truncating='post')
X_test = pad_sequences(X_test, maxlen=max_words, value=0, padding='pre', truncating='post')
```
## 6) Повторили п. 4
```python
print("Max review length:", len(max(X_train, key=len)))
print("Min review length:", len(min(X_train, key=len)))
```
```
Max review length: 500
Min review length: 500
```
## 7) Повторили п. 3. Сделали вывод о том, как отзыв преобразовался после предобработки
```python
review_indices = X_train[19]
print("Review - index:\n", review_indices)
review_text = " ".join(id_to_word.get(i, "?") for i in review_indices)
print("\nReview - text:\n", review_text)
print("\nReview length:", len(review_indices))
label = y_train[19]
class_name = "Positive" if label == 1 else "Negative"
print("Class label:", label, "| Class name:", class_name)
```
```
Review - index:
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 608 50 26 84 37 144 24 67 14 20 10
10 300 92 67 12 48 25 92 40 2006 42 328 1285 241
92 40 12 48 25 188 4154 34 4 2 342 92 67 12
48 25 181 6 622 3783 20 10 10 4 360 7 25 521
92 1135 8 67 736 349 45 163 45 2812 45 6 1917 2
7 175 78 3783 4896 573 8 132 2552 2 83 4715 312 1285
92 2457 4 3028 11 3850 364 1317 253 7 2 2 1022 4106
5 4391 2 17 73 17 6 378 7 1139 4139 531 34 2
3409 5 2 2 52 8 67 4841 2 397 157 99 13 1498
32 4 96 143 1254 2 643 916 21 52]
Review - text:
<PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <START> ok there are people who should not see this movie br br 1 don't see it if you don't like satire or black humour 2 don't like it if you got offended by the <UNK> 3 don't see it if you want a serious superhero movie br br the rest of you run don't walk to see mystery men it's funny it's quirky it's a delightful <UNK> of every bad superhero cliche known to man occasional <UNK> into junior high humour don't ruin the tongue in cheek low key fun of <UNK> <UNK> ben stiller and hank <UNK> as well as a couple of amusing smaller parts by <UNK> rush and <UNK> <UNK> good to see louise <UNK> getting work too i laughed all the way through utterly <UNK> somewhat weird but good
Review length: 500
Class label: 1 | Class name: Positive
```
```
После предобработки длина всех отзывов была приведена к 500 словам. Отзывы с меньшим количеством слов, чем 500, были дополнены нулями.
```
## 8) Вывели предобработанные массивы обучающих и тестовых данных и их размерности
```python
print("Preprocessed training set X_train (first 3 examples):")
print(X_train[:3])
print("\nPreprocessed training set X_test (first 3 examples):")
print(X_test[:3])
print("Size of X_train:", X_train.shape)
print("Size of y_train:", y_train.shape)
print("Size of X_test:", X_test.shape)
print("Size of y_test:", y_test.shape)
```
```
Preprocessed training set X_train (first 3 examples):
[[ 0 0 0 ... 8 591 1462]
[ 0 0 0 ... 28 35 585]
[ 0 0 0 ... 11 2 2]]
Preprocessed training set X_test (first 3 examples):
[[ 0 0 0 ... 14 356 22]
[ 0 0 0 ... 301 87 22]
[ 0 0 0 ... 46 7 158]]
Size of X_train: (25000, 500)
Size of y_train: (25000,)
Size of X_test: (25000, 500)
Size of y_test: (25000,)
```
## 9) Реализовали модель рекуррентной нейронной сети, состоящей из слоев Embedding, LSTM, Dropout, Dense, и обучили ее на обучающих данных с выделением части обучающих данных в качестве валидационных. Вывели информацию об архитектуре нейронной сети. Добилсь качества обучения по метрике accuracy не менее 0.8.
```python
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dropout, Dense
model = Sequential()
model.add(Embedding(
input_dim=vocabulary_size + index_from,
output_dim=32,
input_length=max_words
))
model.add(LSTM(67))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(
loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy']
)
model.build(input_shape=(None, max_words))
model.summary()
# Обучение модели
history = model.fit(
X_train,
y_train,
epochs=5,
batch_size=64,
validation_split=0.2,
verbose=1
)
```
![model](model.png)
```
Epoch 1/5
313/313 ━━━━━━━━━━━━━━━━━━━━ 13s 25ms/step - accuracy: 0.6426 - loss: 0.6635 - val_accuracy: 0.6048 - val_loss: 0.6939
Epoch 2/5
313/313 ━━━━━━━━━━━━━━━━━━━━ 17s 24ms/step - accuracy: 0.5151 - loss: 0.7202 - val_accuracy: 0.6084 - val_loss: 0.6766
Epoch 3/5
313/313 ━━━━━━━━━━━━━━━━━━━━ 7s 23ms/step - accuracy: 0.5620 - loss: 0.6804 - val_accuracy: 0.7786 - val_loss: 0.5682
Epoch 4/5
313/313 ━━━━━━━━━━━━━━━━━━━━ 10s 22ms/step - accuracy: 0.7489 - loss: 0.5362 - val_accuracy: 0.7468 - val_loss: 0.5106
Epoch 5/5
313/313 ━━━━━━━━━━━━━━━━━━━━ 8s 24ms/step - accuracy: 0.8451 - loss: 0.3959 - val_accuracy: 0.8556 - val_loss: 0.3406
```
## Вывели значение метрики качества классификации на тестовых
данных
```python
test_loss, test_accuracy = model.evaluate(X_test, y_test, verbose=0)
print("Classification results")
print(f"Test accuracy: {test_accuracy:.4f}")
```
```
Classification results
Test accuracy: 0.8519
```
## Вывели отчет о качестве классификации тестовой выборки
```python
y_score = model.predict(X_test)
y_pred = [1 if y_score[i,0]>=0.5 else 0 for i in range(len(y_score))]
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred, labels = [0, 1], target_names=['Negative', 'Positive']))
```
```
precision recall f1-score support
Negative 0.85 0.86 0.85 12500
Positive 0.85 0.85 0.85 12500
accuracy 0.85 25000
macro avg 0.85 0.85 0.85 25000
weighted avg 0.85 0.85 0.85 25000
```
## Построили ROC-кривую по результату обработки тестовой
выборки и вычислить площадь под ROC-кривой (AUC ROC)
```python
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
fpr, tpr, thresholds = roc_curve(y_test, y_score)
plt.plot(fpr, tpr)
plt.grid()
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC')
plt.show()
print('Area under ROC is', auc(fpr, tpr))
```
![roc](roc.png)
```
Area under ROC is 0.925042592
```
## 11) Выводы по результатам применения рекуррентной нейронной сети.
```
В данной лабораторной работе была реализована и обучена рекуррентная нейронная сеть с использованием слоя LSTM для задачи классификации тональности отзывов на основе данных IMDb. После этапа предобработки, состоявшего из приведения длины текстов к одному размеру и преобразования слов в числовые индексы, модель смогла качественно решать поставленную задачу.
Результаты эксперимента показали, что точность на тестовой выборке составляет примерно 86%, то есть примерно 86% отзывов классифицируются верно. Классификационный отчёт с метриками precision, recall и f1-score продемонстрировал, что модель одинаково хорошо справляется как с положительными, так и с отрицательными отзывами.
Анализ ROC-кривой и значения AUC ROC (примерно 0.93) подтвердил высокую эффективность модели в различении двух классов отзывов.
В итоге, применение LSTM-рекуррентной нейронной сети оказалось удачным выбором для анализа тональности текста. Модель хорошо выявляет смысловые зависимости в последовательностях и достигает высокого качества классификации, что делает её пригодной для таких практических задач, как фильтрация, анализ эмоциональной окраски и обработка пользовательских отзывов.
```

Двоичные данные
labworks/LW4/roc.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 21 KiB

Загрузка…
Отмена
Сохранить