ответвлено от main/is_dnn
Изменил(а) на 'labworks/LW3/report.md'
Этот коммит содержится в:
@@ -103,37 +103,57 @@ model.add(layers.Flatten())
|
|||||||
model.add(layers.Dense(num_classes, activation="softmax"))
|
model.add(layers.Dense(num_classes, activation="softmax"))
|
||||||
|
|
||||||
model.summary()
|
model.summary()
|
||||||
```
|
|
||||||
**Model: "sequential"**
|
**Model: "sequential"**
|
||||||
|
|
||||||
| Layer (type) | Output Shape | Param # |
|
| Layer (type) | Output Shape | Param # |
|
||||||
|
|
||||||
|--------------------------------|---------------------|--------:|
|
|--------------------------------|---------------------|--------:|
|
||||||
|
|
||||||
| conv2d (Conv2D) | (None, 26, 26, 32) | 320 |
|
| conv2d (Conv2D) | (None, 26, 26, 32) | 320 |
|
||||||
|
|
||||||
| max_pooling2d_8 (MaxPooling2D) | (None, 13, 13, 32) | 0 |
|
| max_pooling2d_8 (MaxPooling2D) | (None, 13, 13, 32) | 0 |
|
||||||
|
|
||||||
| conv2d_1 (Conv2D) | (None, 11, 11, 64) | 18,496 |
|
| conv2d_1 (Conv2D) | (None, 11, 11, 64) | 18,496 |
|
||||||
|
|
||||||
| max_pooling2d_9 (MaxPooling2D) | (None, 5, 5, 64) | 0 |
|
| max_pooling2d_9 (MaxPooling2D) | (None, 5, 5, 64) | 0 |
|
||||||
|
|
||||||
| dropout (Dropout) | (None, 5, 5, 64) | 0 |
|
| dropout (Dropout) | (None, 5, 5, 64) | 0 |
|
||||||
|
|
||||||
| flatten (Flatten) | (None, 1600) | 0 |
|
| flatten (Flatten) | (None, 1600) | 0 |
|
||||||
|
|
||||||
| dense (Dense) | (None, 10) | 16,010 |
|
| dense (Dense) | (None, 10) | 16,010 |
|
||||||
|
|
||||||
**Total params:** 34,826 (136.04 KB)
|
**Total params:** 34,826 (136.04 KB)
|
||||||
|
|
||||||
**Trainable params:** 34,826 (136.04 KB)
|
**Trainable params:** 34,826 (136.04 KB)
|
||||||
|
|
||||||
**Non-trainable params:** 0 (0.00 B)
|
**Non-trainable params:** 0 (0.00 B)
|
||||||
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
batch_size = 512
|
batch_size = 512
|
||||||
epochs = 15
|
epochs = 15
|
||||||
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
|
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)
|
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
|
||||||
```
|
```
|
||||||
```
|
|
||||||
Epoch 1/15
|
Epoch 1/15
|
||||||
|
|
||||||
106/106 ━━━━━━━━━━━━━━━━━━━━ 6s 34ms/step - accuracy: 0.5991 - loss: 1.2739 - val_accuracy: 0.9427 - val_loss: 0.1933
|
106/106 ━━━━━━━━━━━━━━━━━━━━ 6s 34ms/step - accuracy: 0.5991 - loss: 1.2739 - val_accuracy: 0.9427 - val_loss: 0.1933
|
||||||
|
|
||||||
Epoch 2/15
|
Epoch 2/15
|
||||||
|
|
||||||
106/106 ━━━━━━━━━━━━━━━━━━━━ 1s 12ms/step - accuracy: 0.9363 - loss: 0.2175 - val_accuracy: 0.9645 - val_loss: 0.1128
|
106/106 ━━━━━━━━━━━━━━━━━━━━ 1s 12ms/step - accuracy: 0.9363 - loss: 0.2175 - val_accuracy: 0.9645 - val_loss: 0.1128
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
Epoch 15/15
|
Epoch 15/15
|
||||||
|
|
||||||
106/106 ━━━━━━━━━━━━━━━━━━━━ 1s 12ms/step - accuracy: 0.9851 - loss: 0.0460 - val_accuracy: 0.9895 - val_loss: 0.0350
|
106/106 ━━━━━━━━━━━━━━━━━━━━ 1s 12ms/step - accuracy: 0.9851 - loss: 0.0460 - val_accuracy: 0.9895 - val_loss: 0.0350
|
||||||
|
|
||||||
<keras.src.callbacks.history.History at 0x78575e329e50>
|
<keras.src.callbacks.history.History at 0x78575e329e50>
|
||||||
```
|
|
||||||
### 6) Оценили качество обучения на тестовых данных. Вывели значение функции ошибки и значение метрики качества классификации на тестовых данных.
|
### 6) Оценили качество обучения на тестовых данных. Вывели значение функции ошибки и значение метрики качества классификации на тестовых данных.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@@ -141,11 +161,14 @@ scores = model.evaluate(X_test, y_test)
|
|||||||
print('Loss on test data:', scores[0])
|
print('Loss on test data:', scores[0])
|
||||||
print('Accuracy on test data:', scores[1])
|
print('Accuracy on test data:', scores[1])
|
||||||
```
|
```
|
||||||
```
|
|
||||||
313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.9867 - loss: 0.0411
|
313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.9867 - loss: 0.0411
|
||||||
|
|
||||||
Loss on test data: 0.04398002102971077
|
Loss on test data: 0.04398002102971077
|
||||||
|
|
||||||
Accuracy on test data: 0.9865000247955322
|
Accuracy on test data: 0.9865000247955322
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### 7) Подали на вход обученной модели два тестовых изображения. Вывели изображения, истинные метки и результаты распознавания.
|
### 7) Подали на вход обученной модели два тестовых изображения. Вывели изображения, истинные метки и результаты распознавания.
|
||||||
|
|
||||||
@@ -160,24 +183,29 @@ for n in [3,26]:
|
|||||||
print('Real mark: ', np.argmax(y_test[n]))
|
print('Real mark: ', np.argmax(y_test[n]))
|
||||||
print('NN answer: ', np.argmax(result))
|
print('NN answer: ', np.argmax(result))
|
||||||
```
|
```
|
||||||
```
|
|
||||||
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 332ms/step
|
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 332ms/step
|
||||||
|
|
||||||
NN output: [[1.9338373e-09 8.8185527e-12 4.5429974e-08 2.5885814e-04 1.7587592e-08
|
NN output: [[1.9338373e-09 8.8185527e-12 4.5429974e-08 2.5885814e-04 1.7587592e-08
|
||||||
9.9952632e-01 1.1317411e-08 1.5951617e-08 1.6658140e-08 2.1473359e-04]]
|
9.9952632e-01 1.1317411e-08 1.5951617e-08 1.6658140e-08 2.1473359e-04]]
|
||||||
```
|
|
||||||

|

|
||||||
```
|
|
||||||
Real mark: 5
|
Real mark: 5
|
||||||
|
|
||||||
NN answer: 5
|
NN answer: 5
|
||||||
|
|
||||||
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step
|
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 28ms/step
|
||||||
|
|
||||||
NN output: [[2.6663812e-04 5.6896381e-09 3.4766167e-04 2.4042051e-09 2.7227568e-04
|
NN output: [[2.6663812e-04 5.6896381e-09 3.4766167e-04 2.4042051e-09 2.7227568e-04
|
||||||
6.0989500e-08 9.9911338e-01 2.0191379e-08 4.6584045e-08 1.9427532e-08]]
|
6.0989500e-08 9.9911338e-01 2.0191379e-08 4.6584045e-08 1.9427532e-08]]
|
||||||
```
|
|
||||||

|

|
||||||
```
|
|
||||||
Real mark: 6
|
Real mark: 6
|
||||||
|
|
||||||
NN answer: 6
|
NN answer: 6
|
||||||
```
|
|
||||||
|
|
||||||
### 8) Вывели отчет о качестве классификации тестовой выборки и матрицу ошибок для тестовой выборки.
|
### 8) Вывели отчет о качестве классификации тестовой выборки и матрицу ошибок для тестовой выборки.
|
||||||
|
|
||||||
@@ -196,25 +224,40 @@ display = ConfusionMatrixDisplay(confusion_matrix=conf_matrix)
|
|||||||
display.plot()
|
display.plot()
|
||||||
plt.show()
|
plt.show()
|
||||||
```
|
```
|
||||||
```
|
|
||||||
313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step
|
313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step
|
||||||
|
|
||||||
precision recall f1-score support
|
precision recall f1-score support
|
||||||
|
|
||||||
|
|
||||||
0 0.99 0.99 0.99 1009
|
0 0.99 0.99 0.99 1009
|
||||||
|
|
||||||
1 0.99 1.00 1.00 1147
|
1 0.99 1.00 1.00 1147
|
||||||
|
|
||||||
2 0.98 0.98 0.98 969
|
2 0.98 0.98 0.98 969
|
||||||
|
|
||||||
3 0.98 0.99 0.99 1025
|
3 0.98 0.99 0.99 1025
|
||||||
|
|
||||||
4 0.99 0.98 0.99 939
|
4 0.99 0.98 0.99 939
|
||||||
|
|
||||||
5 0.98 0.98 0.98 881
|
5 0.98 0.98 0.98 881
|
||||||
|
|
||||||
6 0.99 0.99 0.99 1037
|
6 0.99 0.99 0.99 1037
|
||||||
|
|
||||||
7 0.98 0.99 0.98 1001
|
7 0.98 0.99 0.98 1001
|
||||||
|
|
||||||
8 0.99 0.98 0.98 950
|
8 0.99 0.98 0.98 950
|
||||||
|
|
||||||
9 0.99 0.98 0.98 1042
|
9 0.99 0.98 0.98 1042
|
||||||
|
|
||||||
|
|
||||||
accuracy 0.99 10000
|
accuracy 0.99 10000
|
||||||
|
|
||||||
macro avg 0.99 0.99 0.99 10000
|
macro avg 0.99 0.99 0.99 10000
|
||||||
|
|
||||||
weighted avg 0.99 0.99 0.99 10000
|
weighted avg 0.99 0.99 0.99 10000
|
||||||
```
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 9) Загрузили, предобработали и подали на вход обученной нейронной сети собственное изображение, созданное при выполнении лабораторной работы №1. Вывели изображение и результат распознавания.
|
### 9) Загрузили, предобработали и подали на вход обученной нейронной сети собственное изображение, созданное при выполнении лабораторной работы №1. Вывели изображение и результат распознавания.
|
||||||
@@ -241,13 +284,13 @@ for name_image in ['цифра 3.png', 'цифра 6.png']:
|
|||||||
print('I think it\'s', np.argmax(result))
|
print('I think it\'s', np.argmax(result))
|
||||||
```
|
```
|
||||||

|

|
||||||
```
|
|
||||||
I think it's 2
|
I think it's 2
|
||||||
```
|
|
||||||

|

|
||||||
```
|
|
||||||
I think it's 5
|
I think it's 5
|
||||||
```
|
|
||||||
|
|
||||||
### 10) Загрузили с диска модель, сохраненную при выполнении лабораторной работы №1. Вывели информацию об архитектуре модели. Повторили для этой модели п. 6.
|
### 10) Загрузили с диска модель, сохраненную при выполнении лабораторной работы №1. Вывели информацию об архитектуре модели. Повторили для этой модели п. 6.
|
||||||
|
|
||||||
@@ -257,13 +300,21 @@ model_lr1 = keras.models.load_model("model_1h100_2h50.keras")
|
|||||||
model_lr1.summary()
|
model_lr1.summary()
|
||||||
```
|
```
|
||||||
**Model: "sequential_10"**
|
**Model: "sequential_10"**
|
||||||
|
|
||||||
| Layer (type) | Output Shape | Param # |
|
| Layer (type) | Output Shape | Param # |
|
||||||
|
|
||||||
|------------------|-------------:|--------:|
|
|------------------|-------------:|--------:|
|
||||||
|
|
||||||
| dense_1 (Dense) | (None, 100) | 78,500 |
|
| dense_1 (Dense) | (None, 100) | 78,500 |
|
||||||
|
|
||||||
| dense_2 (Dense) | (None, 10) | 1,010 |
|
| dense_2 (Dense) | (None, 10) | 1,010 |
|
||||||
|
|
||||||
**Total params:** 79,512 (310.60 KB)
|
**Total params:** 79,512 (310.60 KB)
|
||||||
**Trainable params:** 79,510 (310.59 KB)
|
|
||||||
|
**Trainable params:** 79,510 (310.59 KB)
|
||||||
|
|
||||||
**Non-trainable params:** 0 (0.00 B)
|
**Non-trainable params:** 0 (0.00 B)
|
||||||
|
|
||||||
**Optimizer params:** 2 (12.00 B)
|
**Optimizer params:** 2 (12.00 B)
|
||||||
|
|
||||||
|
|
||||||
@@ -285,12 +336,15 @@ y_test = keras.utils.to_categorical(y_test, num_classes)
|
|||||||
print('Shape of transformed y train:', y_train.shape)
|
print('Shape of transformed y train:', y_train.shape)
|
||||||
print('Shape of transformed y test:', y_test.shape)
|
print('Shape of transformed y test:', y_test.shape)
|
||||||
```
|
```
|
||||||
```
|
|
||||||
Shape of transformed X train: (60000, 784)
|
Shape of transformed X train: (60000, 784)
|
||||||
|
|
||||||
Shape of transformed X train: (10000, 784)
|
Shape of transformed X train: (10000, 784)
|
||||||
|
|
||||||
Shape of transformed y train: (60000, 10)
|
Shape of transformed y train: (60000, 10)
|
||||||
|
|
||||||
Shape of transformed y test: (10000, 10)
|
Shape of transformed y test: (10000, 10)
|
||||||
```
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Оценка качества работы модели на тестовых данных
|
# Оценка качества работы модели на тестовых данных
|
||||||
@@ -298,11 +352,13 @@ scores = model_lr1.evaluate(X_test, y_test)
|
|||||||
print('Loss on test data:', scores[0])
|
print('Loss on test data:', scores[0])
|
||||||
print('Accuracy on test data:', scores[1])
|
print('Accuracy on test data:', scores[1])
|
||||||
```
|
```
|
||||||
```
|
|
||||||
313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9452 - loss: 0.1976
|
313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9452 - loss: 0.1976
|
||||||
|
|
||||||
Loss on test data: 0.19490210711956024
|
Loss on test data: 0.19490210711956024
|
||||||
|
|
||||||
Accuracy on test data: 0.944599986076355
|
Accuracy on test data: 0.944599986076355
|
||||||
```
|
|
||||||
|
|
||||||
### 11) Сравнили обученную модель сверточной сети и наилучшую модель полносвязной сети из лабораторной работы №1 по следующим показателям:
|
### 11) Сравнили обученную модель сверточной сети и наилучшую модель полносвязной сети из лабораторной работы №1 по следующим показателям:
|
||||||
### - количество настраиваемых параметров в сети
|
### - количество настраиваемых параметров в сети
|
||||||
@@ -310,24 +366,19 @@ Accuracy on test data: 0.944599986076355
|
|||||||
### - качество классификации тестовой выборки.
|
### - качество классификации тестовой выборки.
|
||||||
### Сделали выводы по результатам применения сверточной нейронной сети для распознавания изображений.
|
### Сделали выводы по результатам применения сверточной нейронной сети для распознавания изображений.
|
||||||
|
|
||||||
Таблица1:
|
|
||||||
|
|
||||||
| Модель | Количество настраиваемых параметров | Количество эпох обучения | Качество классификации тестовой выборки |
|
| Модель | Количество настраиваемых параметров | Количество эпох обучения | Качество классификации тестовой выборки |
|
||||||
|
|
||||||
|----------|-------------------------------------|---------------------------|-----------------------------------------|
|
|----------|-------------------------------------|---------------------------|-----------------------------------------|
|
||||||
|
|
||||||
| Сверточная | 34 826 | 15 | accuracy:0.986 ; loss:0.044 |
|
| Сверточная | 34 826 | 15 | accuracy:0.986 ; loss:0.044 |
|
||||||
|
|
||||||
| Полносвязная | 84 062 | 50 | accuracy:0.944 ; loss:0.195 |
|
| Полносвязная | 84 062 | 50 | accuracy:0.944 ; loss:0.195 |
|
||||||
|
|
||||||
|
|
||||||
##### По результатам применения сверточной НС, а также по результатам таблицы 1 делаем выводы, что сверточная НС намного лучше справляется с задачами распознования изображений, чем полносвязная - имеет меньше настраиваемых параметров, быстрее обучается, имеет лучшие показатели качества.
|
##### Вывод:Сравнительный анализ показывает явное преимущество свёрточной нейронной сети перед полносвязной в задачах распознавания изображений: при вдвое меньшем количестве параметров (34 826 против 79 512) и трёхкратном сокращении числа эпох обучения (15 против 50) CNN достигает более высокой точности (98,65% против 94,46%) и значительно меньшей ошибки (0,044 против 0,195).
|
||||||
|
|
||||||
## Задание 2
|
## Задание 2
|
||||||
|
|
||||||
### В новом блокноте выполнили п. 2–8 задания 1, изменив набор данных MNIST на CIFAR-10, содержащий размеченные цветные изображения объектов, разделенные на 10 классов.
|
|
||||||
### При этом:
|
|
||||||
### - в п. 3 разбиение данных на обучающие и тестовые произвели в соотношении 50 000:10 000
|
|
||||||
### - после разбиения данных (между п. 3 и 4) вывели 25 изображений из обучающей выборки с подписями классов
|
|
||||||
### - в п. 7 одно из тестовых изображений должно распознаваться корректно, а другое – ошибочно.
|
|
||||||
|
|
||||||
### 1) Загрузили набор данных CIFAR-10, содержащий цветные изображения размеченные на 10 классов: самолет, автомобиль, птица, кошка, олень, собака, лягушка, лошадь, корабль, грузовик.
|
### 1) Загрузили набор данных CIFAR-10, содержащий цветные изображения размеченные на 10 классов: самолет, автомобиль, птица, кошка, олень, собака, лягушка, лошадь, корабль, грузовик.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@@ -357,12 +408,15 @@ print('Shape of y train:', y_train.shape)
|
|||||||
print('Shape of X test:', X_test.shape)
|
print('Shape of X test:', X_test.shape)
|
||||||
print('Shape of y test:', y_test.shape)
|
print('Shape of y test:', y_test.shape)
|
||||||
```
|
```
|
||||||
```
|
|
||||||
Shape of X train: (50000, 32, 32, 3)
|
Shape of X train: (50000, 32, 32, 3)
|
||||||
|
|
||||||
Shape of y train: (50000, 1)
|
Shape of y train: (50000, 1)
|
||||||
|
|
||||||
Shape of X test: (10000, 32, 32, 3)
|
Shape of X test: (10000, 32, 32, 3)
|
||||||
|
|
||||||
Shape of y test: (10000, 1)
|
Shape of y test: (10000, 1)
|
||||||
```
|
|
||||||
|
|
||||||
### Вывели 25 изображений из обучающей выборки с подписью классов.
|
### Вывели 25 изображений из обучающей выборки с подписью классов.
|
||||||
|
|
||||||
@@ -402,12 +456,15 @@ y_test = keras.utils.to_categorical(y_test, num_classes)
|
|||||||
print('Shape of transformed y train:', y_train.shape)
|
print('Shape of transformed y train:', y_train.shape)
|
||||||
print('Shape of transformed y test:', y_test.shape)
|
print('Shape of transformed y test:', y_test.shape)
|
||||||
```
|
```
|
||||||
```
|
|
||||||
Shape of transformed X train: (50000, 32, 32, 3)
|
Shape of transformed X train: (50000, 32, 32, 3)
|
||||||
|
|
||||||
Shape of transformed X test: (10000, 32, 32, 3)
|
Shape of transformed X test: (10000, 32, 32, 3)
|
||||||
|
|
||||||
Shape of transformed y train: (50000, 10)
|
Shape of transformed y train: (50000, 10)
|
||||||
|
|
||||||
Shape of transformed y test: (10000, 10)
|
Shape of transformed y test: (10000, 10)
|
||||||
```
|
|
||||||
|
|
||||||
### 4) Реализовали модель сверточной нейронной сети и обучили ее на обучающих данных с выделением части обучающих данных в качестве валидационных. Вывели информацию об архитектуре нейронной сети.
|
### 4) Реализовали модель сверточной нейронной сети и обучили ее на обучающих данных с выделением части обучающих данных в качестве валидационных. Вывели информацию об архитектуре нейронной сети.
|
||||||
|
|
||||||
@@ -449,32 +506,59 @@ model.add(layers.Dense(num_classes, activation="softmax"))
|
|||||||
model.summary()
|
model.summary()
|
||||||
```
|
```
|
||||||
**Model: "sequential_9"**
|
**Model: "sequential_9"**
|
||||||
|
|
||||||
| Layer (type) | Output Shape | Param # |
|
| Layer (type) | Output Shape | Param # |
|
||||||
|
|
||||||
|--------------------------------------------|-------------------|---------:|
|
|--------------------------------------------|-------------------|---------:|
|
||||||
|
|
||||||
| conv2d_16 (Conv2D) | (None, 32, 32, 32) | 896 |
|
| conv2d_16 (Conv2D) | (None, 32, 32, 32) | 896 |
|
||||||
|
|
||||||
| batch_normalization_12 (BatchNormalization) | (None, 32, 32, 32) | 128 |
|
| batch_normalization_12 (BatchNormalization) | (None, 32, 32, 32) | 128 |
|
||||||
|
|
||||||
| conv2d_17 (Conv2D) | (None, 32, 32, 32) | 9,248 |
|
| conv2d_17 (Conv2D) | (None, 32, 32, 32) | 9,248 |
|
||||||
|
|
||||||
| batch_normalization_13 (BatchNormalization) | (None, 32, 32, 32) | 128 |
|
| batch_normalization_13 (BatchNormalization) | (None, 32, 32, 32) | 128 |
|
||||||
|
|
||||||
| max_pooling2d_10 (MaxPooling2D) | (None, 16, 16, 32) | 0 |
|
| max_pooling2d_10 (MaxPooling2D) | (None, 16, 16, 32) | 0 |
|
||||||
|
|
||||||
| dropout_10 (Dropout) | (None, 16, 16, 32) | 0 |
|
| dropout_10 (Dropout) | (None, 16, 16, 32) | 0 |
|
||||||
|
|
||||||
| conv2d_18 (Conv2D) | (None, 16, 16, 64) | 18,496 |
|
| conv2d_18 (Conv2D) | (None, 16, 16, 64) | 18,496 |
|
||||||
|
|
||||||
| batch_normalization_14 (BatchNormalization) | (None, 16, 16, 64) | 256 |
|
| batch_normalization_14 (BatchNormalization) | (None, 16, 16, 64) | 256 |
|
||||||
|
|
||||||
| conv2d_19 (Conv2D) | (None, 16, 16, 64) | 36,928 |
|
| conv2d_19 (Conv2D) | (None, 16, 16, 64) | 36,928 |
|
||||||
|
|
||||||
| batch_normalization_15 (BatchNormalization) | (None, 16, 16, 64) | 256 |
|
| batch_normalization_15 (BatchNormalization) | (None, 16, 16, 64) | 256 |
|
||||||
|
|
||||||
| max_pooling2d_11 (MaxPooling2D) | (None, 8, 8, 64) | 0 |
|
| max_pooling2d_11 (MaxPooling2D) | (None, 8, 8, 64) | 0 |
|
||||||
|
|
||||||
| dropout_11 (Dropout) | (None, 8, 8, 64) | 0 |
|
| dropout_11 (Dropout) | (None, 8, 8, 64) | 0 |
|
||||||
|
|
||||||
| conv2d_20 (Conv2D) | (None, 8, 8, 128) | 73,856 |
|
| conv2d_20 (Conv2D) | (None, 8, 8, 128) | 73,856 |
|
||||||
|
|
||||||
| batch_normalization_16 (BatchNormalization)| (None, 8, 8, 128) | 512 |
|
| batch_normalization_16 (BatchNormalization)| (None, 8, 8, 128) | 512 |
|
||||||
|
|
||||||
| conv2d_21 (Conv2D) | (None, 8, 8, 128) | 147,584 |
|
| conv2d_21 (Conv2D) | (None, 8, 8, 128) | 147,584 |
|
||||||
|
|
||||||
| batch_normalization_17 (BatchNormalization)| (None, 8, 8, 128) | 512 |
|
| batch_normalization_17 (BatchNormalization)| (None, 8, 8, 128) | 512 |
|
||||||
|
|
||||||
| max_pooling2d_12 (MaxPooling2D) | (None, 4, 4, 128) | 0 |
|
| max_pooling2d_12 (MaxPooling2D) | (None, 4, 4, 128) | 0 |
|
||||||
|
|
||||||
| dropout_12 (Dropout) | (None, 4, 4, 128) | 0 |
|
| dropout_12 (Dropout) | (None, 4, 4, 128) | 0 |
|
||||||
|
|
||||||
| flatten_4 (Flatten) | (None, 2048) | 0 |
|
| flatten_4 (Flatten) | (None, 2048) | 0 |
|
||||||
|
|
||||||
| dense_6 (Dense) | (None, 128) | 262,272 |
|
| dense_6 (Dense) | (None, 128) | 262,272 |
|
||||||
|
|
||||||
| dropout_13 (Dropout) | (None, 128) | 0 |
|
| dropout_13 (Dropout) | (None, 128) | 0 |
|
||||||
|
|
||||||
| dense_7 (Dense) | (None, 10) | 1,290 |
|
| dense_7 (Dense) | (None, 10) | 1,290 |
|
||||||
|
|
||||||
**Total params:** 552,362 (2.11 MB)
|
**Total params:** 552,362 (2.11 MB)
|
||||||
|
|
||||||
**Trainable params:** 551,466 (2.10 MB)
|
**Trainable params:** 551,466 (2.10 MB)
|
||||||
|
|
||||||
**Non-trainable params:** 896 (3.50 KB)
|
**Non-trainable params:** 896 (3.50 KB)
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@@ -484,16 +568,24 @@ epochs = 50
|
|||||||
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
|
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)
|
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
|
||||||
```
|
```
|
||||||
```
|
|
||||||
Epoch 1/50
|
Epoch 1/50
|
||||||
|
|
||||||
704/704 ━━━━━━━━━━━━━━━━━━━━ 25s 21ms/step - accuracy: 0.2474 - loss: 2.1347 - val_accuracy: 0.5014 - val_loss: 1.3804
|
704/704 ━━━━━━━━━━━━━━━━━━━━ 25s 21ms/step - accuracy: 0.2474 - loss: 2.1347 - val_accuracy: 0.5014 - val_loss: 1.3804
|
||||||
|
|
||||||
Epoch 2/50
|
Epoch 2/50
|
||||||
|
|
||||||
704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.4517 - loss: 1.4843 - val_accuracy: 0.5648 - val_loss: 1.2039
|
704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.4517 - loss: 1.4843 - val_accuracy: 0.5648 - val_loss: 1.2039
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
Epoch 50/50
|
Epoch 50/50
|
||||||
|
|
||||||
704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 13ms/step - accuracy: 0.9183 - loss: 0.2363 - val_accuracy: 0.8370 - val_loss: 0.5748
|
704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 13ms/step - accuracy: 0.9183 - loss: 0.2363 - val_accuracy: 0.8370 - val_loss: 0.5748
|
||||||
|
|
||||||
<keras.src.callbacks.history.History at 0x78575551f7a0>
|
<keras.src.callbacks.history.History at 0x78575551f7a0>
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### 5) Оценили качество обучения на тестовых данных. Вывели значение функции ошибки и значение метрики качества классификации на тестовых данных.
|
### 5) Оценили качество обучения на тестовых данных. Вывели значение функции ошибки и значение метрики качества классификации на тестовых данных.
|
||||||
|
|
||||||
@@ -503,11 +595,13 @@ scores = model.evaluate(X_test, y_test)
|
|||||||
print('Loss on test data:', scores[0])
|
print('Loss on test data:', scores[0])
|
||||||
print('Accuracy on test data:', scores[1])
|
print('Accuracy on test data:', scores[1])
|
||||||
```
|
```
|
||||||
```
|
|
||||||
313/313 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.8535 - loss: 0.5236
|
313/313 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.8535 - loss: 0.5236
|
||||||
|
|
||||||
Loss on test data: 0.5263504981994629
|
Loss on test data: 0.5263504981994629
|
||||||
|
|
||||||
Accuracy on test data: 0.8525000214576721
|
Accuracy on test data: 0.8525000214576721
|
||||||
```
|
|
||||||
|
|
||||||
### 6) Подали на вход обученной модели два тестовых изображения. Вывели изображения, истинные метки и результаты распознавания.
|
### 6) Подали на вход обученной модели два тестовых изображения. Вывели изображения, истинные метки и результаты распознавания.
|
||||||
|
|
||||||
@@ -523,24 +617,30 @@ for n in [3,15]:
|
|||||||
print('Real mark: ', np.argmax(y_test[n]))
|
print('Real mark: ', np.argmax(y_test[n]))
|
||||||
print('NN answer: ', np.argmax(result))
|
print('NN answer: ', np.argmax(result))
|
||||||
```
|
```
|
||||||
```
|
|
||||||
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 662ms/step
|
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 662ms/step
|
||||||
|
|
||||||
NN output: [[3.9128518e-13 3.7927967e-14 9.7535979e-10 9.2453198e-11 2.2669273e-13
|
NN output: [[3.9128518e-13 3.7927967e-14 9.7535979e-10 9.2453198e-11 2.2669273e-13
|
||||||
4.2581650e-13 1.0000000e+00 2.1332333e-19 5.8570602e-13 1.1833489e-11]]
|
4.2581650e-13 1.0000000e+00 2.1332333e-19 5.8570602e-13 1.1833489e-11]]
|
||||||
```
|
|
||||||
|
|
||||||

|

|
||||||
```
|
|
||||||
Real mark: 6
|
Real mark: 6
|
||||||
|
|
||||||
NN answer: 6
|
NN answer: 6
|
||||||
|
|
||||||
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step
|
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 40ms/step
|
||||||
|
|
||||||
NN output: [[9.5250229e-08 5.8261224e-10 2.7865291e-05 2.9105169e-03 9.8321760e-01
|
NN output: [[9.5250229e-08 5.8261224e-10 2.7865291e-05 2.9105169e-03 9.8321760e-01
|
||||||
1.3797697e-02 2.7701269e-06 4.3220436e-05 2.0006892e-08 1.8016836e-07]]
|
1.3797697e-02 2.7701269e-06 4.3220436e-05 2.0006892e-08 1.8016836e-07]]
|
||||||
```
|
|
||||||

|

|
||||||
```
|
|
||||||
Real mark: 4
|
Real mark: 4
|
||||||
|
|
||||||
NN answer: 4
|
NN answer: 4
|
||||||
```
|
|
||||||
|
|
||||||
### 7) Вывели отчет о качестве классификации тестовой выборки и матрицу ошибок для тестовой выборки.
|
### 7) Вывели отчет о качестве классификации тестовой выборки и матрицу ошибок для тестовой выборки.
|
||||||
|
|
||||||
@@ -561,25 +661,40 @@ disp.plot(ax=ax, xticks_rotation=45) # поворот подписей по X
|
|||||||
plt.tight_layout() # чтобы всё влезло
|
plt.tight_layout() # чтобы всё влезло
|
||||||
plt.show()
|
plt.show()
|
||||||
```
|
```
|
||||||
```
|
|
||||||
313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step
|
313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step
|
||||||
|
|
||||||
precision recall f1-score support
|
precision recall f1-score support
|
||||||
|
|
||||||
|
|
||||||
airplane 0.90 0.84 0.87 1007
|
airplane 0.90 0.84 0.87 1007
|
||||||
|
|
||||||
automobile 0.92 0.93 0.93 1037
|
automobile 0.92 0.93 0.93 1037
|
||||||
|
|
||||||
bird 0.86 0.78 0.82 1030
|
bird 0.86 0.78 0.82 1030
|
||||||
|
|
||||||
cat 0.68 0.72 0.70 990
|
cat 0.68 0.72 0.70 990
|
||||||
|
|
||||||
deer 0.84 0.83 0.83 966
|
deer 0.84 0.83 0.83 966
|
||||||
|
|
||||||
dog 0.77 0.79 0.78 1009
|
dog 0.77 0.79 0.78 1009
|
||||||
|
|
||||||
frog 0.78 0.94 0.86 972
|
frog 0.78 0.94 0.86 972
|
||||||
|
|
||||||
horse 0.95 0.84 0.89 991
|
horse 0.95 0.84 0.89 991
|
||||||
|
|
||||||
ship 0.94 0.93 0.94 990
|
ship 0.94 0.93 0.94 990
|
||||||
|
|
||||||
truck 0.91 0.92 0.92 1008
|
truck 0.91 0.92 0.92 1008
|
||||||
|
|
||||||
|
|
||||||
accuracy 0.85 10000
|
accuracy 0.85 10000
|
||||||
|
|
||||||
macro avg 0.86 0.85 0.85 10000
|
macro avg 0.86 0.85 0.85 10000
|
||||||
|
|
||||||
weighted avg 0.86 0.85 0.85 10000
|
weighted avg 0.86 0.85 0.85 10000
|
||||||
```
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### Сводная точность модели на тестовой выборке CIFAR-10 составила 85%, что свидетельствует о её эффективности в решении задачи классификации цветных изображений.
|
#### Сводная точность модели на тестовой выборке CIFAR-10 составила 85%, что свидетельствует о её эффективности в решении задачи классификации цветных изображений.
|
||||||
Ссылка в новой задаче
Block a user