Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

432 KiB

from google.colab import drive
drive.mount('/content/drive')
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
import sklearn
from keras.datasets import mnist
(X_train,y_train),(X_test,y_test)=mnist.load_data()
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=11)
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11490434/11490434 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step
#вывод размерностей
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,)
#вывод изображения
plt.imshow(X_train[1],cmap=plt.get_cmap('gray'))
plt.show()
print(y_train[1])

plt.imshow(X_train[2],cmap=plt.get_cmap('gray'))
plt.show()
print(y_train[2])

plt.imshow(X_train[3],cmap=plt.get_cmap('gray'))
plt.show()
print(y_train[3])

plt.imshow(X_train[4],cmap=plt.get_cmap('gray'))
plt.show()
print(y_train[4])

9

6

6

8
#развернем каждое изображение 8*228 в вектор 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
import keras.utils
y_train=keras.utils.to_categorical(y_train)
y_test=keras.utils.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)
from keras.models import Sequential
from keras.layers import Dense
model_1 = Sequential()
model_1.add(Dense(units=num_classes, input_dim=num_pixels, activation='softmax'))
model_1.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.
  super().__init__(activity_regularizer=activity_regularizer, **kwargs)
# вывод информации об архитектуре модели
print(model_1.summary())
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                     Output Shape                  Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ dense (Dense)                   │ (None, 10)             │         7,850 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 7,850 (30.66 KB)
 Trainable params: 7,850 (30.66 KB)
 Non-trainable params: 0 (0.00 B)
None
# Обучаем модель
H = model_1.fit(X_train, y_train, validation_split=0.1, epochs=50)
Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.6924 - loss: 1.1951 - val_accuracy: 0.8775 - val_loss: 0.5033
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8750 - loss: 0.4945 - val_accuracy: 0.8910 - val_loss: 0.4130
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.8868 - loss: 0.4267 - val_accuracy: 0.8982 - val_loss: 0.3762
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.8957 - loss: 0.3878 - val_accuracy: 0.9040 - val_loss: 0.3548
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8996 - loss: 0.3671 - val_accuracy: 0.9060 - val_loss: 0.3400
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9047 - loss: 0.3520 - val_accuracy: 0.9078 - val_loss: 0.3298
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9052 - loss: 0.3455 - val_accuracy: 0.9093 - val_loss: 0.3222
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9060 - loss: 0.3435 - val_accuracy: 0.9110 - val_loss: 0.3159
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.9079 - loss: 0.3307 - val_accuracy: 0.9132 - val_loss: 0.3113
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9084 - loss: 0.3254 - val_accuracy: 0.9143 - val_loss: 0.3073
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9109 - loss: 0.3197 - val_accuracy: 0.9138 - val_loss: 0.3026
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 13s 5ms/step - accuracy: 0.9109 - loss: 0.3193 - val_accuracy: 0.9147 - val_loss: 0.3002
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9129 - loss: 0.3147 - val_accuracy: 0.9168 - val_loss: 0.2967
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9137 - loss: 0.3119 - val_accuracy: 0.9178 - val_loss: 0.2941
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9158 - loss: 0.3038 - val_accuracy: 0.9170 - val_loss: 0.2916
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9138 - loss: 0.3103 - val_accuracy: 0.9180 - val_loss: 0.2898
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9169 - loss: 0.3053 - val_accuracy: 0.9188 - val_loss: 0.2885
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 3ms/step - accuracy: 0.9165 - loss: 0.3043 - val_accuracy: 0.9193 - val_loss: 0.2867
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9185 - loss: 0.2985 - val_accuracy: 0.9192 - val_loss: 0.2851
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9177 - loss: 0.2991 - val_accuracy: 0.9195 - val_loss: 0.2843
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9188 - loss: 0.2936 - val_accuracy: 0.9197 - val_loss: 0.2827
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9171 - loss: 0.2970 - val_accuracy: 0.9200 - val_loss: 0.2812
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9173 - loss: 0.2986 - val_accuracy: 0.9200 - val_loss: 0.2805
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9186 - loss: 0.2948 - val_accuracy: 0.9200 - val_loss: 0.2796
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9186 - loss: 0.2960 - val_accuracy: 0.9208 - val_loss: 0.2783
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9172 - loss: 0.2986 - val_accuracy: 0.9203 - val_loss: 0.2781
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9205 - loss: 0.2849 - val_accuracy: 0.9218 - val_loss: 0.2770
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9206 - loss: 0.2893 - val_accuracy: 0.9210 - val_loss: 0.2763
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9203 - loss: 0.2814 - val_accuracy: 0.9227 - val_loss: 0.2748
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9209 - loss: 0.2856 - val_accuracy: 0.9223 - val_loss: 0.2751
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9227 - loss: 0.2793 - val_accuracy: 0.9222 - val_loss: 0.2736
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9209 - loss: 0.2865 - val_accuracy: 0.9225 - val_loss: 0.2728
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9205 - loss: 0.2833 - val_accuracy: 0.9223 - val_loss: 0.2726
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9210 - loss: 0.2844 - val_accuracy: 0.9228 - val_loss: 0.2726
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9218 - loss: 0.2759 - val_accuracy: 0.9225 - val_loss: 0.2715
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9212 - loss: 0.2881 - val_accuracy: 0.9225 - val_loss: 0.2709
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9219 - loss: 0.2815 - val_accuracy: 0.9227 - val_loss: 0.2706
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9214 - loss: 0.2791 - val_accuracy: 0.9233 - val_loss: 0.2704
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9222 - loss: 0.2802 - val_accuracy: 0.9228 - val_loss: 0.2698
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9218 - loss: 0.2844 - val_accuracy: 0.9237 - val_loss: 0.2694
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9255 - loss: 0.2677 - val_accuracy: 0.9237 - val_loss: 0.2692
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9218 - loss: 0.2784 - val_accuracy: 0.9240 - val_loss: 0.2682
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9238 - loss: 0.2749 - val_accuracy: 0.9235 - val_loss: 0.2682
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9237 - loss: 0.2748 - val_accuracy: 0.9240 - val_loss: 0.2678
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9228 - loss: 0.2793 - val_accuracy: 0.9230 - val_loss: 0.2678
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9227 - loss: 0.2794 - val_accuracy: 0.9248 - val_loss: 0.2672
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9236 - loss: 0.2743 - val_accuracy: 0.9240 - val_loss: 0.2664
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9245 - loss: 0.2699 - val_accuracy: 0.9243 - val_loss: 0.2669
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9251 - loss: 0.2690 - val_accuracy: 0.9243 - val_loss: 0.2665
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9247 - loss: 0.2718 - val_accuracy: 0.9243 - val_loss: 0.2662
# вывод графика ошибки по эпохам
plt.plot(H.history['loss'])
plt.plot(H.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss', 'val_loss'])
plt.title('Loss by epochs')
plt.show()

# Оценка качества работы модели на тестовых данных
scores = model_1.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])
313/313 ━━━━━━━━━━━━━━━━━━━━ 3s 8ms/step - accuracy: 0.9219 - loss: 0.2787
Loss on test data: 0.2803967595100403
Accuracy on test data: 0.9203000068664551
model_2 = Sequential()
model_2.add(Dense(units=100, input_dim=num_pixels, activation='sigmoid'))
model_2.add(Dense(units=num_classes, activation='softmax'))
model_2.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

print(model_2.summary())

H_2 = model_2.fit(X_train, y_train, validation_split=0.1, epochs=50)

# вывод графика ошибки по эпохам
plt.plot(H_2.history['loss'])
plt.plot(H_2.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss', 'val_loss'])
plt.title('Loss by epochs')
plt.show()

# Оценка качества работы модели на тестовых данных
scores = model_2.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])
Model: "sequential_2"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                     Output Shape                  Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ dense_3 (Dense)                 │ (None, 100)            │        78,500 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_4 (Dense)                 │ (None, 10)             │         1,010 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 79,510 (310.59 KB)
 Trainable params: 79,510 (310.59 KB)
 Non-trainable params: 0 (0.00 B)
None
Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 13s 7ms/step - accuracy: 0.5381 - loss: 1.9126 - val_accuracy: 0.8087 - val_loss: 0.9749
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 14s 3ms/step - accuracy: 0.8265 - loss: 0.8623 - val_accuracy: 0.8630 - val_loss: 0.6228
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8605 - loss: 0.6000 - val_accuracy: 0.8820 - val_loss: 0.4961
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.8774 - loss: 0.4944 - val_accuracy: 0.8940 - val_loss: 0.4310
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8871 - loss: 0.4343 - val_accuracy: 0.9012 - val_loss: 0.3918
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8920 - loss: 0.4062 - val_accuracy: 0.9023 - val_loss: 0.3659
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8970 - loss: 0.3845 - val_accuracy: 0.9057 - val_loss: 0.3470
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9016 - loss: 0.3584 - val_accuracy: 0.9073 - val_loss: 0.3329
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9040 - loss: 0.3462 - val_accuracy: 0.9113 - val_loss: 0.3207
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9071 - loss: 0.3384 - val_accuracy: 0.9120 - val_loss: 0.3122
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9081 - loss: 0.3263 - val_accuracy: 0.9143 - val_loss: 0.3034
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9103 - loss: 0.3180 - val_accuracy: 0.9155 - val_loss: 0.2959
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 3ms/step - accuracy: 0.9100 - loss: 0.3185 - val_accuracy: 0.9188 - val_loss: 0.2894
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9145 - loss: 0.3035 - val_accuracy: 0.9197 - val_loss: 0.2842
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9186 - loss: 0.2940 - val_accuracy: 0.9213 - val_loss: 0.2794
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9177 - loss: 0.2976 - val_accuracy: 0.9212 - val_loss: 0.2741
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9190 - loss: 0.2885 - val_accuracy: 0.9232 - val_loss: 0.2695
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9204 - loss: 0.2838 - val_accuracy: 0.9238 - val_loss: 0.2659
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9179 - loss: 0.2884 - val_accuracy: 0.9238 - val_loss: 0.2620
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9222 - loss: 0.2768 - val_accuracy: 0.9265 - val_loss: 0.2580
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9210 - loss: 0.2751 - val_accuracy: 0.9265 - val_loss: 0.2550
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9227 - loss: 0.2669 - val_accuracy: 0.9275 - val_loss: 0.2506
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9257 - loss: 0.2629 - val_accuracy: 0.9275 - val_loss: 0.2484
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9273 - loss: 0.2615 - val_accuracy: 0.9283 - val_loss: 0.2448
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9275 - loss: 0.2552 - val_accuracy: 0.9288 - val_loss: 0.2416
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9277 - loss: 0.2585 - val_accuracy: 0.9305 - val_loss: 0.2382
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9291 - loss: 0.2463 - val_accuracy: 0.9332 - val_loss: 0.2366
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9320 - loss: 0.2426 - val_accuracy: 0.9340 - val_loss: 0.2325
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9321 - loss: 0.2448 - val_accuracy: 0.9325 - val_loss: 0.2301
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9319 - loss: 0.2410 - val_accuracy: 0.9325 - val_loss: 0.2275
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9297 - loss: 0.2455 - val_accuracy: 0.9357 - val_loss: 0.2242
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9343 - loss: 0.2323 - val_accuracy: 0.9358 - val_loss: 0.2227
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9331 - loss: 0.2341 - val_accuracy: 0.9362 - val_loss: 0.2204
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9348 - loss: 0.2314 - val_accuracy: 0.9375 - val_loss: 0.2178
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9353 - loss: 0.2272 - val_accuracy: 0.9377 - val_loss: 0.2153
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9350 - loss: 0.2273 - val_accuracy: 0.9377 - val_loss: 0.2134
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 3ms/step - accuracy: 0.9396 - loss: 0.2177 - val_accuracy: 0.9395 - val_loss: 0.2105
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9363 - loss: 0.2202 - val_accuracy: 0.9390 - val_loss: 0.2088
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9361 - loss: 0.2188 - val_accuracy: 0.9412 - val_loss: 0.2056
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9393 - loss: 0.2134 - val_accuracy: 0.9418 - val_loss: 0.2033
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9392 - loss: 0.2131 - val_accuracy: 0.9408 - val_loss: 0.2020
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9396 - loss: 0.2138 - val_accuracy: 0.9422 - val_loss: 0.1998
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9432 - loss: 0.2040 - val_accuracy: 0.9422 - val_loss: 0.1980
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9412 - loss: 0.2090 - val_accuracy: 0.9425 - val_loss: 0.1961
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9420 - loss: 0.2017 - val_accuracy: 0.9442 - val_loss: 0.1947
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9431 - loss: 0.2001 - val_accuracy: 0.9438 - val_loss: 0.1918
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9428 - loss: 0.2012 - val_accuracy: 0.9442 - val_loss: 0.1906
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9458 - loss: 0.1891 - val_accuracy: 0.9442 - val_loss: 0.1889
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9452 - loss: 0.1932 - val_accuracy: 0.9453 - val_loss: 0.1870
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9461 - loss: 0.1935 - val_accuracy: 0.9468 - val_loss: 0.1850

313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9416 - loss: 0.1984
Loss on test data: 0.19959478080272675
Accuracy on test data: 0.9416999816894531
model_3 = Sequential()
model_3.add(Dense(units=300, input_dim=num_pixels, activation='sigmoid'))
model_3.add(Dense(units=num_classes, activation='softmax'))
model_3.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

print(model_3.summary())

H_3 = model_3.fit(X_train, y_train, validation_split=0.1, epochs=50)

# вывод графика ошибки по эпохам
plt.plot(H_3.history['loss'])
plt.plot(H_3.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss', 'val_loss'])
plt.title('Loss by epochs')
plt.show()

# Оценка качества работы модели на тестовых данных
scores = model_3.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])
/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.
  super().__init__(activity_regularizer=activity_regularizer, **kwargs)
Model: "sequential_3"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                     Output Shape                  Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ dense_5 (Dense)                 │ (None, 300)            │       235,500 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_6 (Dense)                 │ (None, 10)             │         3,010 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 238,510 (931.68 KB)
 Trainable params: 238,510 (931.68 KB)
 Non-trainable params: 0 (0.00 B)
None
Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.5441 - loss: 1.7974 - val_accuracy: 0.8262 - val_loss: 0.8458
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.8401 - loss: 0.7551 - val_accuracy: 0.8723 - val_loss: 0.5551
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8712 - loss: 0.5370 - val_accuracy: 0.8888 - val_loss: 0.4523
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8813 - loss: 0.4575 - val_accuracy: 0.8987 - val_loss: 0.4022
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8888 - loss: 0.4144 - val_accuracy: 0.9017 - val_loss: 0.3716
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8959 - loss: 0.3869 - val_accuracy: 0.9050 - val_loss: 0.3520
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.8968 - loss: 0.3717 - val_accuracy: 0.9070 - val_loss: 0.3369
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8992 - loss: 0.3572 - val_accuracy: 0.9108 - val_loss: 0.3244
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9017 - loss: 0.3492 - val_accuracy: 0.9103 - val_loss: 0.3153
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9023 - loss: 0.3384 - val_accuracy: 0.9118 - val_loss: 0.3084
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9092 - loss: 0.3224 - val_accuracy: 0.9127 - val_loss: 0.3043
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9099 - loss: 0.3210 - val_accuracy: 0.9142 - val_loss: 0.2977
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9136 - loss: 0.3090 - val_accuracy: 0.9150 - val_loss: 0.2929
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9118 - loss: 0.3096 - val_accuracy: 0.9170 - val_loss: 0.2885
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9111 - loss: 0.3080 - val_accuracy: 0.9185 - val_loss: 0.2836
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9145 - loss: 0.3025 - val_accuracy: 0.9195 - val_loss: 0.2807
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9153 - loss: 0.2973 - val_accuracy: 0.9210 - val_loss: 0.2770
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9155 - loss: 0.2925 - val_accuracy: 0.9205 - val_loss: 0.2738
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9173 - loss: 0.2955 - val_accuracy: 0.9227 - val_loss: 0.2733
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9170 - loss: 0.2884 - val_accuracy: 0.9233 - val_loss: 0.2697
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9185 - loss: 0.2857 - val_accuracy: 0.9237 - val_loss: 0.2670
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9184 - loss: 0.2877 - val_accuracy: 0.9243 - val_loss: 0.2640
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9207 - loss: 0.2761 - val_accuracy: 0.9243 - val_loss: 0.2624
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9218 - loss: 0.2744 - val_accuracy: 0.9260 - val_loss: 0.2589
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9208 - loss: 0.2764 - val_accuracy: 0.9272 - val_loss: 0.2581
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9230 - loss: 0.2705 - val_accuracy: 0.9277 - val_loss: 0.2553
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9243 - loss: 0.2641 - val_accuracy: 0.9288 - val_loss: 0.2537
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9245 - loss: 0.2704 - val_accuracy: 0.9278 - val_loss: 0.2506
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9224 - loss: 0.2662 - val_accuracy: 0.9290 - val_loss: 0.2493
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9232 - loss: 0.2669 - val_accuracy: 0.9288 - val_loss: 0.2472
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9270 - loss: 0.2545 - val_accuracy: 0.9305 - val_loss: 0.2462
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9253 - loss: 0.2616 - val_accuracy: 0.9317 - val_loss: 0.2437
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9276 - loss: 0.2536 - val_accuracy: 0.9305 - val_loss: 0.2415
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9277 - loss: 0.2523 - val_accuracy: 0.9297 - val_loss: 0.2389
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 3ms/step - accuracy: 0.9277 - loss: 0.2565 - val_accuracy: 0.9312 - val_loss: 0.2369
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9306 - loss: 0.2473 - val_accuracy: 0.9322 - val_loss: 0.2360
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9294 - loss: 0.2479 - val_accuracy: 0.9323 - val_loss: 0.2339
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9326 - loss: 0.2420 - val_accuracy: 0.9322 - val_loss: 0.2326
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9284 - loss: 0.2475 - val_accuracy: 0.9335 - val_loss: 0.2297
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9320 - loss: 0.2388 - val_accuracy: 0.9343 - val_loss: 0.2273
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9324 - loss: 0.2407 - val_accuracy: 0.9340 - val_loss: 0.2252
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9337 - loss: 0.2351 - val_accuracy: 0.9355 - val_loss: 0.2236
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9341 - loss: 0.2343 - val_accuracy: 0.9352 - val_loss: 0.2228
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9342 - loss: 0.2344 - val_accuracy: 0.9343 - val_loss: 0.2199
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9363 - loss: 0.2275 - val_accuracy: 0.9355 - val_loss: 0.2174
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9369 - loss: 0.2206 - val_accuracy: 0.9360 - val_loss: 0.2168
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9360 - loss: 0.2243 - val_accuracy: 0.9363 - val_loss: 0.2151
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9392 - loss: 0.2185 - val_accuracy: 0.9375 - val_loss: 0.2129
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9378 - loss: 0.2183 - val_accuracy: 0.9377 - val_loss: 0.2115
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9378 - loss: 0.2168 - val_accuracy: 0.9393 - val_loss: 0.2094

313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9337 - loss: 0.2223
Loss on test data: 0.224356010556221
Accuracy on test data: 0.9345999956130981
model_4 = Sequential()
model_4.add(Dense(units=500, input_dim=num_pixels, activation='sigmoid'))
model_4.add(Dense(units=num_classes, activation='softmax'))
model_4.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

print(model_4.summary())

H_4 = model_4.fit(X_train, y_train, validation_split=0.1, epochs=50)

# вывод графика ошибки по эпохам
plt.plot(H_4.history['loss'])
plt.plot(H_4.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss', 'val_loss'])
plt.title('Loss by epochs')
plt.show()

# Оценка качества работы модели на тестовых данных
scores = model_4.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])
Model: "sequential_5"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                     Output Shape                  Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ dense_9 (Dense)                 │ (None, 500)            │       392,500 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_10 (Dense)                │ (None, 10)             │         5,010 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 397,510 (1.52 MB)
 Trainable params: 397,510 (1.52 MB)
 Non-trainable params: 0 (0.00 B)
None
Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.5638 - loss: 1.7612 - val_accuracy: 0.8435 - val_loss: 0.8013
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.8456 - loss: 0.7243 - val_accuracy: 0.8770 - val_loss: 0.5333
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.8735 - loss: 0.5205 - val_accuracy: 0.8895 - val_loss: 0.4400
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8837 - loss: 0.4442 - val_accuracy: 0.8958 - val_loss: 0.3946
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 13s 5ms/step - accuracy: 0.8904 - loss: 0.4080 - val_accuracy: 0.8998 - val_loss: 0.3667
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 2ms/step - accuracy: 0.8913 - loss: 0.3851 - val_accuracy: 0.9023 - val_loss: 0.3510
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8972 - loss: 0.3645 - val_accuracy: 0.9082 - val_loss: 0.3334
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.8988 - loss: 0.3582 - val_accuracy: 0.9082 - val_loss: 0.3255
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9034 - loss: 0.3431 - val_accuracy: 0.9123 - val_loss: 0.3146
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9051 - loss: 0.3330 - val_accuracy: 0.9115 - val_loss: 0.3099
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9077 - loss: 0.3276 - val_accuracy: 0.9100 - val_loss: 0.3068
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9069 - loss: 0.3227 - val_accuracy: 0.9155 - val_loss: 0.2990
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9092 - loss: 0.3177 - val_accuracy: 0.9165 - val_loss: 0.2951
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9102 - loss: 0.3145 - val_accuracy: 0.9147 - val_loss: 0.2922
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9139 - loss: 0.3057 - val_accuracy: 0.9172 - val_loss: 0.2880
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9119 - loss: 0.3094 - val_accuracy: 0.9175 - val_loss: 0.2859
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9138 - loss: 0.3044 - val_accuracy: 0.9207 - val_loss: 0.2830
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9180 - loss: 0.2912 - val_accuracy: 0.9220 - val_loss: 0.2792
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9146 - loss: 0.3003 - val_accuracy: 0.9203 - val_loss: 0.2788
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9140 - loss: 0.3027 - val_accuracy: 0.9203 - val_loss: 0.2776
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9163 - loss: 0.2868 - val_accuracy: 0.9217 - val_loss: 0.2732
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9191 - loss: 0.2871 - val_accuracy: 0.9217 - val_loss: 0.2716
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9186 - loss: 0.2900 - val_accuracy: 0.9225 - val_loss: 0.2689
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9186 - loss: 0.2836 - val_accuracy: 0.9252 - val_loss: 0.2683
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9192 - loss: 0.2884 - val_accuracy: 0.9250 - val_loss: 0.2665
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9199 - loss: 0.2827 - val_accuracy: 0.9240 - val_loss: 0.2644
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9215 - loss: 0.2765 - val_accuracy: 0.9250 - val_loss: 0.2639
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9208 - loss: 0.2798 - val_accuracy: 0.9267 - val_loss: 0.2623
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9218 - loss: 0.2738 - val_accuracy: 0.9260 - val_loss: 0.2595
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.9228 - loss: 0.2685 - val_accuracy: 0.9272 - val_loss: 0.2578
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9223 - loss: 0.2759 - val_accuracy: 0.9285 - val_loss: 0.2569
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9226 - loss: 0.2701 - val_accuracy: 0.9277 - val_loss: 0.2559
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9250 - loss: 0.2640 - val_accuracy: 0.9273 - val_loss: 0.2534
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9232 - loss: 0.2671 - val_accuracy: 0.9285 - val_loss: 0.2522
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9257 - loss: 0.2574 - val_accuracy: 0.9292 - val_loss: 0.2506
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9254 - loss: 0.2621 - val_accuracy: 0.9295 - val_loss: 0.2489
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9270 - loss: 0.2576 - val_accuracy: 0.9290 - val_loss: 0.2487
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9287 - loss: 0.2542 - val_accuracy: 0.9308 - val_loss: 0.2459
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9284 - loss: 0.2571 - val_accuracy: 0.9288 - val_loss: 0.2471
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9274 - loss: 0.2570 - val_accuracy: 0.9295 - val_loss: 0.2456
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9279 - loss: 0.2534 - val_accuracy: 0.9310 - val_loss: 0.2431
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9296 - loss: 0.2461 - val_accuracy: 0.9307 - val_loss: 0.2406
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9291 - loss: 0.2524 - val_accuracy: 0.9317 - val_loss: 0.2388
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9284 - loss: 0.2565 - val_accuracy: 0.9320 - val_loss: 0.2368
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9302 - loss: 0.2444 - val_accuracy: 0.9328 - val_loss: 0.2351
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9305 - loss: 0.2418 - val_accuracy: 0.9318 - val_loss: 0.2368
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9322 - loss: 0.2376 - val_accuracy: 0.9335 - val_loss: 0.2311
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9348 - loss: 0.2359 - val_accuracy: 0.9333 - val_loss: 0.2311
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9333 - loss: 0.2354 - val_accuracy: 0.9330 - val_loss: 0.2295
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9338 - loss: 0.2346 - val_accuracy: 0.9352 - val_loss: 0.2277

313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9269 - loss: 0.2416
Loss on test data: 0.2432917207479477
Accuracy on test data: 0.9279000163078308
model_5 = Sequential()
model_5.add(Dense(units=100, input_dim=num_pixels, activation='sigmoid'))
model_5.add(Dense(units=50, activation='sigmoid'))
model_5.add(Dense(units=num_classes, activation='softmax'))
model_5.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

print(model_5.summary())

H_5 = model_5.fit(X_train, y_train, validation_split=0.1, epochs=50)

# вывод графика ошибки по эпохам
plt.plot(H_5.history['loss'])
plt.plot(H_5.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss', 'val_loss'])
plt.title('Loss by epochs')
plt.show()

# Оценка качества работы модели на тестовых данных
scores = model_5.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])
/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.
  super().__init__(activity_regularizer=activity_regularizer, **kwargs)
Model: "sequential_6"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                     Output Shape                  Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ dense_11 (Dense)                │ (None, 100)            │        78,500 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_12 (Dense)                │ (None, 50)             │         5,050 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_13 (Dense)                │ (None, 10)             │           510 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 84,060 (328.36 KB)
 Trainable params: 84,060 (328.36 KB)
 Non-trainable params: 0 (0.00 B)
None
Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.1903 - loss: 2.2760 - val_accuracy: 0.4533 - val_loss: 2.0793
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.5093 - loss: 1.9647 - val_accuracy: 0.6495 - val_loss: 1.5316
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.6871 - loss: 1.3907 - val_accuracy: 0.7460 - val_loss: 1.0405
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.7685 - loss: 0.9697 - val_accuracy: 0.8002 - val_loss: 0.7932
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.8100 - loss: 0.7666 - val_accuracy: 0.8290 - val_loss: 0.6531
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.8349 - loss: 0.6397 - val_accuracy: 0.8560 - val_loss: 0.5589
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8532 - loss: 0.5624 - val_accuracy: 0.8730 - val_loss: 0.4947
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8683 - loss: 0.4999 - val_accuracy: 0.8847 - val_loss: 0.4487
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 3ms/step - accuracy: 0.8776 - loss: 0.4580 - val_accuracy: 0.8923 - val_loss: 0.4163
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.8852 - loss: 0.4255 - val_accuracy: 0.8990 - val_loss: 0.3898
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8927 - loss: 0.4007 - val_accuracy: 0.9025 - val_loss: 0.3695
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.8933 - loss: 0.3865 - val_accuracy: 0.9053 - val_loss: 0.3538
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8969 - loss: 0.3695 - val_accuracy: 0.9067 - val_loss: 0.3412
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8991 - loss: 0.3611 - val_accuracy: 0.9098 - val_loss: 0.3303
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9015 - loss: 0.3470 - val_accuracy: 0.9090 - val_loss: 0.3202
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9079 - loss: 0.3335 - val_accuracy: 0.9117 - val_loss: 0.3128
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9048 - loss: 0.3358 - val_accuracy: 0.9118 - val_loss: 0.3046
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9103 - loss: 0.3211 - val_accuracy: 0.9162 - val_loss: 0.2981
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9098 - loss: 0.3192 - val_accuracy: 0.9158 - val_loss: 0.2933
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9117 - loss: 0.3106 - val_accuracy: 0.9183 - val_loss: 0.2861
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9129 - loss: 0.3031 - val_accuracy: 0.9188 - val_loss: 0.2809
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9166 - loss: 0.2911 - val_accuracy: 0.9212 - val_loss: 0.2749
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9171 - loss: 0.2940 - val_accuracy: 0.9223 - val_loss: 0.2699
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9202 - loss: 0.2830 - val_accuracy: 0.9225 - val_loss: 0.2658
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9199 - loss: 0.2805 - val_accuracy: 0.9252 - val_loss: 0.2611
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9209 - loss: 0.2779 - val_accuracy: 0.9245 - val_loss: 0.2575
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9217 - loss: 0.2747 - val_accuracy: 0.9273 - val_loss: 0.2528
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9237 - loss: 0.2692 - val_accuracy: 0.9287 - val_loss: 0.2491
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9264 - loss: 0.2625 - val_accuracy: 0.9295 - val_loss: 0.2447
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9270 - loss: 0.2562 - val_accuracy: 0.9312 - val_loss: 0.2420
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9261 - loss: 0.2583 - val_accuracy: 0.9318 - val_loss: 0.2368
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9270 - loss: 0.2534 - val_accuracy: 0.9327 - val_loss: 0.2340
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9295 - loss: 0.2413 - val_accuracy: 0.9342 - val_loss: 0.2292
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9279 - loss: 0.2497 - val_accuracy: 0.9327 - val_loss: 0.2273
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 3ms/step - accuracy: 0.9307 - loss: 0.2415 - val_accuracy: 0.9347 - val_loss: 0.2229
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9322 - loss: 0.2367 - val_accuracy: 0.9353 - val_loss: 0.2195
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9302 - loss: 0.2354 - val_accuracy: 0.9383 - val_loss: 0.2169
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9357 - loss: 0.2267 - val_accuracy: 0.9377 - val_loss: 0.2134
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9356 - loss: 0.2249 - val_accuracy: 0.9378 - val_loss: 0.2106
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9340 - loss: 0.2255 - val_accuracy: 0.9395 - val_loss: 0.2074
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9389 - loss: 0.2156 - val_accuracy: 0.9395 - val_loss: 0.2042
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9383 - loss: 0.2133 - val_accuracy: 0.9402 - val_loss: 0.2023
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9389 - loss: 0.2140 - val_accuracy: 0.9407 - val_loss: 0.1988
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9391 - loss: 0.2111 - val_accuracy: 0.9413 - val_loss: 0.1962
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9398 - loss: 0.2090 - val_accuracy: 0.9425 - val_loss: 0.1939
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9417 - loss: 0.2048 - val_accuracy: 0.9447 - val_loss: 0.1911
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9436 - loss: 0.1994 - val_accuracy: 0.9457 - val_loss: 0.1888
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9453 - loss: 0.1913 - val_accuracy: 0.9468 - val_loss: 0.1858
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9447 - loss: 0.1910 - val_accuracy: 0.9467 - val_loss: 0.1841
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9462 - loss: 0.1894 - val_accuracy: 0.9475 - val_loss: 0.1818

313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9384 - loss: 0.1992
Loss on test data: 0.19695913791656494
Accuracy on test data: 0.9402999877929688
model_5 = Sequential()
model_5.add(Dense(units=100, input_dim=num_pixels, activation='sigmoid'))
model_5.add(Dense(units=100, activation='sigmoid'))
model_5.add(Dense(units=num_classes, activation='softmax'))
model_5.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

print(model_5.summary())

H_5 = model_5.fit(X_train, y_train, validation_split=0.1, epochs=50)

# вывод графика ошибки по эпохам
plt.plot(H_5.history['loss'])
plt.plot(H_5.history['val_loss'])
plt.grid()
plt.xlabel('Epochs')
plt.ylabel('loss')
plt.legend(['train_loss', 'val_loss'])
plt.title('Loss by epochs')
plt.show()

# Оценка качества работы модели на тестовых данных
scores = model_5.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])
Model: "sequential_7"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                     Output Shape                  Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ dense_14 (Dense)                │ (None, 100)            │        78,500 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_15 (Dense)                │ (None, 100)            │        10,100 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_16 (Dense)                │ (None, 10)             │         1,010 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 89,610 (350.04 KB)
 Trainable params: 89,610 (350.04 KB)
 Non-trainable params: 0 (0.00 B)
None
Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.1980 - loss: 2.2730 - val_accuracy: 0.5065 - val_loss: 2.1019
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.5667 - loss: 1.9901 - val_accuracy: 0.6553 - val_loss: 1.5055
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.6975 - loss: 1.3598 - val_accuracy: 0.7752 - val_loss: 0.9847
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.7810 - loss: 0.9302 - val_accuracy: 0.8133 - val_loss: 0.7424
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8202 - loss: 0.7221 - val_accuracy: 0.8462 - val_loss: 0.6048
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8476 - loss: 0.5961 - val_accuracy: 0.8688 - val_loss: 0.5186
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8590 - loss: 0.5267 - val_accuracy: 0.8785 - val_loss: 0.4602
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.8734 - loss: 0.4758 - val_accuracy: 0.8910 - val_loss: 0.4196
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8820 - loss: 0.4355 - val_accuracy: 0.8972 - val_loss: 0.3911
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.8886 - loss: 0.4085 - val_accuracy: 0.9013 - val_loss: 0.3677
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8960 - loss: 0.3831 - val_accuracy: 0.9060 - val_loss: 0.3515
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8985 - loss: 0.3709 - val_accuracy: 0.9082 - val_loss: 0.3354
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9021 - loss: 0.3499 - val_accuracy: 0.9092 - val_loss: 0.3241
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9032 - loss: 0.3397 - val_accuracy: 0.9130 - val_loss: 0.3132
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9063 - loss: 0.3321 - val_accuracy: 0.9128 - val_loss: 0.3050
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9076 - loss: 0.3246 - val_accuracy: 0.9143 - val_loss: 0.2976
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9107 - loss: 0.3125 - val_accuracy: 0.9165 - val_loss: 0.2897
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9125 - loss: 0.3082 - val_accuracy: 0.9160 - val_loss: 0.2837
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9134 - loss: 0.3047 - val_accuracy: 0.9210 - val_loss: 0.2780
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9168 - loss: 0.2947 - val_accuracy: 0.9215 - val_loss: 0.2716
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9186 - loss: 0.2862 - val_accuracy: 0.9223 - val_loss: 0.2664
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9194 - loss: 0.2859 - val_accuracy: 0.9235 - val_loss: 0.2618
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9205 - loss: 0.2760 - val_accuracy: 0.9252 - val_loss: 0.2569
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9235 - loss: 0.2707 - val_accuracy: 0.9267 - val_loss: 0.2526
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9248 - loss: 0.2616 - val_accuracy: 0.9272 - val_loss: 0.2486
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9258 - loss: 0.2614 - val_accuracy: 0.9270 - val_loss: 0.2455
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9252 - loss: 0.2608 - val_accuracy: 0.9287 - val_loss: 0.2402
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9268 - loss: 0.2586 - val_accuracy: 0.9302 - val_loss: 0.2362
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9283 - loss: 0.2524 - val_accuracy: 0.9305 - val_loss: 0.2324
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9305 - loss: 0.2441 - val_accuracy: 0.9313 - val_loss: 0.2293
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9313 - loss: 0.2405 - val_accuracy: 0.9308 - val_loss: 0.2261
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9316 - loss: 0.2404 - val_accuracy: 0.9338 - val_loss: 0.2224
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9336 - loss: 0.2361 - val_accuracy: 0.9340 - val_loss: 0.2193
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9334 - loss: 0.2343 - val_accuracy: 0.9358 - val_loss: 0.2154
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9354 - loss: 0.2263 - val_accuracy: 0.9353 - val_loss: 0.2133
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9346 - loss: 0.2289 - val_accuracy: 0.9360 - val_loss: 0.2105
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9369 - loss: 0.2206 - val_accuracy: 0.9385 - val_loss: 0.2064
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9380 - loss: 0.2196 - val_accuracy: 0.9385 - val_loss: 0.2056
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9380 - loss: 0.2216 - val_accuracy: 0.9387 - val_loss: 0.2015
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9406 - loss: 0.2072 - val_accuracy: 0.9412 - val_loss: 0.1985
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9383 - loss: 0.2157 - val_accuracy: 0.9420 - val_loss: 0.1955
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9396 - loss: 0.2089 - val_accuracy: 0.9430 - val_loss: 0.1937
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9420 - loss: 0.2012 - val_accuracy: 0.9440 - val_loss: 0.1906
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9438 - loss: 0.1977 - val_accuracy: 0.9450 - val_loss: 0.1895
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9444 - loss: 0.1967 - val_accuracy: 0.9458 - val_loss: 0.1862
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9431 - loss: 0.1984 - val_accuracy: 0.9460 - val_loss: 0.1844
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9437 - loss: 0.1984 - val_accuracy: 0.9453 - val_loss: 0.1823
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9453 - loss: 0.1914 - val_accuracy: 0.9467 - val_loss: 0.1797
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9452 - loss: 0.1882 - val_accuracy: 0.9482 - val_loss: 0.1783
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9479 - loss: 0.1817 - val_accuracy: 0.9477 - val_loss: 0.1757

313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9395 - loss: 0.1940
Loss on test data: 0.19388720393180847
Accuracy on test data: 0.9420999884605408
model_5.save('best_model.keras')
# вывод тестового изображения и результата распознавания 1
n = 123
result = model_5.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)))
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 347ms/step
NN output: [[5.0932199e-01 3.2454227e-05 3.3057046e-03 5.1869772e-02 2.3799451e-04
  5.4319475e-02 6.6690765e-05 1.3238982e-02 1.5642552e-01 2.1118149e-01]]

Real mark:  0
NN answer:  0
# вывод тестового изображения и результата распознавания 2
n = 111
result = model_5.predict(X_test[n:n+1])
print('NN output:', result)
9
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)))
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 122ms/step
NN output: [[1.4791858e-06 9.4321764e-01 2.4574984e-02 9.0776198e-03 2.5022458e-04
  1.8704976e-03 1.4549885e-04 8.7578883e-03 1.1556224e-02 5.4802326e-04]]

Real mark:  1
NN answer:  1
# загрузка собственного изображения
from PIL import Image
file_data = Image.open('5.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 = test_img.reshape(1, num_pixels)
# распознавание
result = model_5.predict(test_img)
print('I think it\'s ', np.argmax(result))

1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 91ms/step
I think it's  5
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 = test_img.reshape(1, num_pixels)
# распознавание
result = model_5.predict(test_img)
print('I think it\'s ', np.argmax(result))

1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 47ms/step
I think it's  2
file_data = Image.open('2_1.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 = test_img.reshape(1, num_pixels)
# распознавание
result = model_5.predict(test_img)
print('I think it\'s ', np.argmax(result))

1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 52ms/step
I think it's  4
file_data = Image.open('5_1.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 = test_img.reshape(1, num_pixels)
# распознавание
result = model_5.predict(test_img)
print('I think it\'s ', np.argmax(result))

1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 92ms/step
I think it's  7