@ -48,12 +48,14 @@ 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». Вывели размерности предобработанных обучающих и тестовых массивов данных.
@ -80,12 +82,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 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) Реализовали модель сверточной нейронной сети и обучили ее на обучающих данных с выделением части обучающих данных в качестве валидационных. Вывели информацию об архитектуре нейронной сети.
@ -100,25 +105,17 @@ model.add(layers.Flatten())
model.add(layers.Dense(num_classes, activation="softmax"))
model.summary()
```
**Model: "sequential"**
| Layer (type) | Output Shape | Param # |
|--------------------------------|---------------------|--------:|
| conv2d (Conv2D) | (None, 26, 26, 32) | 320 |
| max_pooling2d_8 (MaxPooling2D) | (None, 13, 13, 32) | 0 |
| conv2d_1 (Conv2D) | (None, 11, 11, 64) | 18,496 |
| max_pooling2d_9 (MaxPooling2D) | (None, 5, 5, 64) | 0 |
| dropout (Dropout) | (None, 5, 5, 64) | 0 |
| flatten (Flatten) | (None, 1600) | 0 |
| dense (Dense) | (None, 10) | 16,010 |
**Total params:** 34,826 (136.04 KB)
@ -221,7 +218,7 @@ display = ConfusionMatrixDisplay(confusion_matrix=conf_matrix)
display.plot()
plt.show()
```
```
313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step
precision recall f1-score support
@ -253,7 +250,7 @@ plt.show()
macro avg 0.99 0.99 0.99 10000
weighted avg 0.99 0.99 0.99 10000
```

@ -299,11 +296,8 @@ model_lr1.summary()
**Model: "sequential_10"**
| Layer (type) | Output Shape | Param # |
|------------------|-------------:|--------:|
| dense_1 (Dense) | (None, 100) | 78,500 |
| dense_2 (Dense) | (None, 10) | 1,010 |
**Total params:** 79,512 (310.60 KB)
@ -364,11 +358,8 @@ Accuracy on test data: 0.944599986076355
### Сделали выводы по результатам применения сверточной нейронной сети для распознавания изображений.
| Модель | Количество настраиваемых параметров | Количество эпох обучения | Качество классификации тестовой выборки |
|----------|-------------------------------------|---------------------------|-----------------------------------------|
| Сверточная | 34 826 | 15 | accuracy:0.986 ; loss:0.044 |
| Полносвязная | 84 062 | 50 | accuracy:0.944 ; loss:0.195 |
@ -505,51 +496,28 @@ model.summary()
**Model: "sequential_9"**
| Layer (type) | Output Shape | Param # |
|--------------------------------------------|-------------------|---------:|
| conv2d_16 (Conv2D) | (None, 32, 32, 32) | 896 |
| batch_normalization_12 (BatchNormalization) | (None, 32, 32, 32) | 128 |
| conv2d_17 (Conv2D) | (None, 32, 32, 32) | 9,248 |
| batch_normalization_13 (BatchNormalization) | (None, 32, 32, 32) | 128 |
| max_pooling2d_10 (MaxPooling2D) | (None, 16, 16, 32) | 0 |
| dropout_10 (Dropout) | (None, 16, 16, 32) | 0 |
| conv2d_18 (Conv2D) | (None, 16, 16, 64) | 18,496 |
| batch_normalization_14 (BatchNormalization) | (None, 16, 16, 64) | 256 |
| conv2d_19 (Conv2D) | (None, 16, 16, 64) | 36,928 |
| batch_normalization_15 (BatchNormalization) | (None, 16, 16, 64) | 256 |
| max_pooling2d_11 (MaxPooling2D) | (None, 8, 8, 64) | 0 |
| dropout_11 (Dropout) | (None, 8, 8, 64) | 0 |
| conv2d_20 (Conv2D) | (None, 8, 8, 128) | 73,856 |
| batch_normalization_16 (BatchNormalization)| (None, 8, 8, 128) | 512 |
| conv2d_21 (Conv2D) | (None, 8, 8, 128) | 147,584 |
| batch_normalization_17 (BatchNormalization)| (None, 8, 8, 128) | 512 |
| max_pooling2d_12 (MaxPooling2D) | (None, 4, 4, 128) | 0 |
| dropout_12 (Dropout) | (None, 4, 4, 128) | 0 |
| flatten_4 (Flatten) | (None, 2048) | 0 |
| dense_6 (Dense) | (None, 128) | 262,272 |
| dropout_13 (Dropout) | (None, 128) | 0 |
| dense_7 (Dense) | (None, 10) | 1,290 |
**Total params:** 552,362 (2.11 MB)
@ -580,9 +548,6 @@ Epoch 50/50
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 >
### 5) Оценили качество обучения на тестовых данных. Вывели значение функции ошибки и значение метрики качества классификации на тестовых данных.
@ -658,7 +623,7 @@ disp.plot(ax=ax, xticks_rotation=45) # поворот подписей по X
plt.tight_layout() # чтобы всё влезло
plt.show()
```
```
313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step
precision recall f1-score support
@ -690,7 +655,7 @@ plt.show()
macro avg 0.86 0.85 0.85 10000
weighted avg 0.86 0.85 0.85 10000
```
