diff --git a/labworks/LW1/created_0.png b/labworks/LW1/created_0.png new file mode 100644 index 0000000..e7161cf Binary files /dev/null and b/labworks/LW1/created_0.png differ diff --git a/labworks/LW1/created_0_90.png b/labworks/LW1/created_0_90.png new file mode 100644 index 0000000..415a56a Binary files /dev/null and b/labworks/LW1/created_0_90.png differ diff --git a/labworks/LW1/created_1.png b/labworks/LW1/created_1.png new file mode 100644 index 0000000..0398c8d Binary files /dev/null and b/labworks/LW1/created_1.png differ diff --git a/labworks/LW1/created_1_90.png b/labworks/LW1/created_1_90.png new file mode 100644 index 0000000..61d1ca9 Binary files /dev/null and b/labworks/LW1/created_1_90.png differ diff --git a/labworks/LW1/image-4.png b/labworks/LW1/plot_0_hidden_layer.png similarity index 100% rename from labworks/LW1/image-4.png rename to labworks/LW1/plot_0_hidden_layer.png diff --git a/labworks/LW1/image-5.png b/labworks/LW1/plot_1_hidden_layer_100.png similarity index 100% rename from labworks/LW1/image-5.png rename to labworks/LW1/plot_1_hidden_layer_100.png diff --git a/labworks/LW1/image-6.jpg b/labworks/LW1/plot_1_hidden_layer_300.jpg similarity index 100% rename from labworks/LW1/image-6.jpg rename to labworks/LW1/plot_1_hidden_layer_300.jpg diff --git a/labworks/LW1/image-7.jpg b/labworks/LW1/plot_1_hidden_layer_500.jpg similarity index 100% rename from labworks/LW1/image-7.jpg rename to labworks/LW1/plot_1_hidden_layer_500.jpg diff --git a/labworks/LW1/image-9.jpg b/labworks/LW1/plot_2_hidden_layer_100.jpg similarity index 100% rename from labworks/LW1/image-9.jpg rename to labworks/LW1/plot_2_hidden_layer_100.jpg diff --git a/labworks/LW1/image-8.jpg b/labworks/LW1/plot_2_hidden_layer_50.jpg similarity index 100% rename from labworks/LW1/image-8.jpg rename to labworks/LW1/plot_2_hidden_layer_50.jpg diff --git a/labworks/LW1/report.md b/labworks/LW1/report.md index 3db2d95..0e87231 100644 --- a/labworks/LW1/report.md +++ b/labworks/LW1/report.md @@ -82,10 +82,10 @@ for i in range(4): **Вывод:** ```bash -![5](image.png) -![1](image-1.png) -![0](image-2.png) -![0](image-3.png) +![5](train_4_5.png) +![1](train_4_1.png) +![0](train_4_0.1.png) +![0](train_4_0.2.png) ``` @@ -194,7 +194,7 @@ plt.show() **Вывод:** -![График ошибки по эпохам](image-4.png) +![График ошибки по эпохам](plot_0_hidden_layer.png) @@ -214,15 +214,15 @@ Accuracy on test data: 0.9185000061988831 ``` -## 8. Обучение и тестирование модели с одним скрытым слоем +## 8. Обучение и тестирование модели с одним скрытым слоем -Проведем тестирование модели при 100, 300, 500 нейронов в скрытом слое. В качестве функции активации нейронов в скрытом слое будем использовать функцию sigmoid. +Проведем тестирование модели при 100, 300, 500 нейронов в скрытом слое. В качестве функции активации нейронов в скрытом слое будем использовать функцию sigmoid. По метрике качества классификации выберем наилучшее количество нейронов в скрытом слое. 1. Модель со 100 нейронами в скрытом слое -![График ошибки по эпохам со 100 нейронами в скрытом слое](image-5.jpg) +![График ошибки по эпохам со 100 нейронами в скрытом слое](plot_1_hidden_layer_100.png) ```bash Loss on test data: 0.20470060408115387 @@ -231,7 +231,7 @@ Accuracy on test data: 0.9412999749183655 2. Модель с 300 нейронами в скрытом слое -![График ошибки по эпохам с 300 нейронами в скрытом слое](image-6.jpg) +![График ошибки по эпохам с 300 нейронами в скрытом слое](plot_1_hidden_layer_300.jpg) ```bash Loss on test data: 0.23246125876903534 @@ -240,7 +240,7 @@ Accuracy on test data: 0.9337999820709229 3. Модель с 500 нейронами в скрытом слое -![График ошибки по эпохам с 500 нейронами в скрытом слое](image-7.jpg) +![График ошибки по эпохам с 500 нейронами в скрытом слое](plot_1_hidden_layer_500.jpg) ```bash Loss on test data: 0.24853046238422394 @@ -256,7 +256,7 @@ Accuracy on test data: 0.9283999800682068 1. Модель с 50 нейронами в скрытом слое -![График ошибки по эпохам с 50 нейронами в скрытом слое](image-8.jpg) +![График ошибки по эпохам с 50 нейронами в скрытом слое](plot_2_hidden_layer_50.jpg) ```bash Loss on test data: 0.19981178641319275 @@ -265,7 +265,7 @@ Accuracy on test data: 0.9387000203132629 2. Модель со 100 нейронами в скрытом слое -![График ошибки по эпохам со 100 нейронами в скрытом слое](image-9.jpg) +![График ошибки по эпохам со 100 нейронами в скрытом слое](plot_2_hidden_layer_100.jpg) ```bash Loss on test data: 0.19404223561286926 @@ -288,11 +288,11 @@ Accuracy on test data: 0.9413999915122986 ├─────────────────────────────────┼───────────────────────┼─────────────────────┤ │ 2 (100, 50 нейронов) │ 0.19981178641319275 │ 0.9387000203132629 │ ├─────────────────────────────────┼───────────────────────┼─────────────────────┤ -│ 2 (100, 100 нейронов) │ 0.19404223561286926 │ 0.9413999915122986 │ +│ 2 (100, 100 нейронов) │ 0.19404223561286926 │ **0.9413999915122986** │ └─────────────────────────────────┴───────────────────────┴───────────────────────┘ ``` -По результатам исследования мы видим, что наилучшие результаты достигаются при архитектуре при 100 нейронах на каждом скрытом слое. +По результатам исследования мы видим, что наилучшие результаты достигаются при архитектуре при 100 нейронах на каждом скрытом слое. ## 11. Сохранение наилучшей модели на диск @@ -301,3 +301,85 @@ filepath='/content/drive/MyDrive/Colab Notebooks/best_model.keras' model_2_100.save(filepath) ``` +## 12. Вывод тестовых изображений + +```py +n = 31 +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: ', str(np.argmax(y_test[n]))) +print('NN answer: ', str(np.argmax(result))) +``` + +**Вывод:** + +```bash +NN output: [[4.3196760e-06 1.3248758e-04 9.4383031e-02 2.8113697e-03 2.2433515e-04 4.0835417e-05 5.3229469e-05 8.9428437e-01 3.7515254e-04 7.6909573e-03]] +``` + + +![alt text](test_12_7.png) + +```bash +Real mark: 7 +NN answer: 7 +``` + + +## 13. Тестирование модели на собственных изображениях цифр + +1. Создадим собственные изображения рукописных цифр "1" и "0" + +![alt text](created_0.png) + +![alt text](created_1.png) + +2. Загрузим, предобработаем и подадим на вход обученной нейросети собственные изображения + +```py +# вывод собственного изображения +plt.imshow(test_img, cmap=plt.get_cmap('gray')) +plt.show() +# предобработка +test_img = test_img / 255 +test_img = test_img.reshape(1, num_pixels) +# распознавание +result = model.predict(test_img) +print('I think it\'s ', np.argmax(result)) +``` + +**Вывод:** + +![alt text](result_0.png) + +```bash +I think it's 0 +``` + +![alt text](result_1.png) + +```bash +I think it's 1 +``` + + +## 14. Тестирование модели на собственных изображениях цифр, повернутых на 90 градусов + +**Результат тестирования:** + + +![alt text](result_0_90.png) + +```bash +I think it's 0 +``` + +![alt text](result_1_90.png) + +```bash +I think it's 4 +``` + +*Таким образом, нейросеть смогла определить 0 из-за простой и неизменной формы при повороте, однако подав на вход перевернутую 1, нейросеть не смогла корренто определить цифру.* diff --git a/labworks/LW1/result_0.png b/labworks/LW1/result_0.png new file mode 100644 index 0000000..fc823d1 Binary files /dev/null and b/labworks/LW1/result_0.png differ diff --git a/labworks/LW1/result_0_90.png b/labworks/LW1/result_0_90.png new file mode 100644 index 0000000..3932fd5 Binary files /dev/null and b/labworks/LW1/result_0_90.png differ diff --git a/labworks/LW1/result_1.png b/labworks/LW1/result_1.png new file mode 100644 index 0000000..ab8cf7c Binary files /dev/null and b/labworks/LW1/result_1.png differ diff --git a/labworks/LW1/result_1_90.png b/labworks/LW1/result_1_90.png new file mode 100644 index 0000000..e6b5f46 Binary files /dev/null and b/labworks/LW1/result_1_90.png differ diff --git a/labworks/LW1/test_12_7.png b/labworks/LW1/test_12_7.png new file mode 100644 index 0000000..9b3e58d Binary files /dev/null and b/labworks/LW1/test_12_7.png differ diff --git a/labworks/LW1/image-2.png b/labworks/LW1/train_4_0.1.png similarity index 100% rename from labworks/LW1/image-2.png rename to labworks/LW1/train_4_0.1.png diff --git a/labworks/LW1/image-3.png b/labworks/LW1/train_4_0.2.png similarity index 100% rename from labworks/LW1/image-3.png rename to labworks/LW1/train_4_0.2.png diff --git a/labworks/LW1/image-1.png b/labworks/LW1/train_4_1.png similarity index 100% rename from labworks/LW1/image-1.png rename to labworks/LW1/train_4_1.png diff --git a/labworks/LW1/image.png b/labworks/LW1/train_4_5.png similarity index 100% rename from labworks/LW1/image.png rename to labworks/LW1/train_4_5.png