Вы не можете выбрать более 25 тем
			Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
		
		
		
		
		
			
		
			
				
	
	
	
		
			435 KiB
		
	
	
	
			
		
		
	
	
			435 KiB
		
	
	
	
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 = 19) #(5*4-1)# вывод размерностей
print('Shape of X train:', X_train.shape)
print('Shape of y train:', y_train.shape)Shape of X train: (60000, 28, 28)
Shape of y train: (60000,)
# Выводим 4 изображения
plt.figure(figsize=(10, 3))
for i in range(4):
    plt.subplot(1, 4, i + 1)
    plt.imshow(X_train[i], cmap='gray')
    plt.title(f'Label: {y_train[i]}')
    plt.axis('off')
plt.tight_layout()
plt.show()

# развернем каждое изображение 28*28 в вектор 784
num_pixels = X_train.shape[1] * X_train.shape[2]
X_train = X_train.reshape(X_train.shape[0], num_pixels) / 255
X_test = X_test.reshape(X_test.shape[0], num_pixels) / 255
print('Shape of transformed X train:', X_train.shape)Shape of transformed X train: (60000, 784)
# переведем метки в one-hot
from keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
print('Shape of transformed y train:', y_train.shape)
num_classes = y_train.shape[1]Shape of transformed y train: (60000, 10)
from keras.models import Sequential
from keras.layers import Dense# 1. создаем модель - объявляем ее объектом класса Sequential
model = Sequential()
# 2. добавляем выходной слой(скрытые слои отсутствуют)
model.add(Dense(units=num_classes, activation='softmax'))
# 3. компилируем модель
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])# вывод информации об архитектуре модели
print(model.summary())Model: "sequential_6"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_18 (Dense) │ ? │ 0 (unbuilt) │ └─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 0 (0.00 B)
Trainable params: 0 (0.00 B)
Non-trainable params: 0 (0.00 B)
None
# Обучаем модель
H = model.fit(X_train, y_train, validation_split=0.1, epochs=50)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.7042 - loss: 1.1653 - val_accuracy: 0.8770 - val_loss: 0.5080
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8784 - loss: 0.4844 - val_accuracy: 0.8907 - val_loss: 0.4209
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.8895 - loss: 0.4177 - val_accuracy: 0.8992 - val_loss: 0.3834
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8945 - loss: 0.3846 - val_accuracy: 0.9028 - val_loss: 0.3628
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9008 - loss: 0.3695 - val_accuracy: 0.9048 - val_loss: 0.3491
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9022 - loss: 0.3552 - val_accuracy: 0.9063 - val_loss: 0.3407
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9052 - loss: 0.3446 - val_accuracy: 0.9090 - val_loss: 0.3315
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9069 - loss: 0.3360 - val_accuracy: 0.9090 - val_loss: 0.3263
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9081 - loss: 0.3285 - val_accuracy: 0.9105 - val_loss: 0.3217
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9114 - loss: 0.3214 - val_accuracy: 0.9120 - val_loss: 0.3178
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9117 - loss: 0.3201 - val_accuracy: 0.9120 - val_loss: 0.3143
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9111 - loss: 0.3175 - val_accuracy: 0.9133 - val_loss: 0.3107
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9117 - loss: 0.3190 - val_accuracy: 0.9153 - val_loss: 0.3078
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9171 - loss: 0.3035 - val_accuracy: 0.9140 - val_loss: 0.3063
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 2ms/step - accuracy: 0.9142 - loss: 0.3091 - val_accuracy: 0.9160 - val_loss: 0.3039
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9165 - loss: 0.2978 - val_accuracy: 0.9150 - val_loss: 0.3035
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9146 - loss: 0.3069 - val_accuracy: 0.9162 - val_loss: 0.3004
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9170 - loss: 0.2994 - val_accuracy: 0.9160 - val_loss: 0.2989
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9177 - loss: 0.2975 - val_accuracy: 0.9168 - val_loss: 0.2978
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9174 - loss: 0.2976 - val_accuracy: 0.9180 - val_loss: 0.2969
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9177 - loss: 0.2938 - val_accuracy: 0.9193 - val_loss: 0.2955
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9190 - loss: 0.2960 - val_accuracy: 0.9188 - val_loss: 0.2945
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9170 - loss: 0.2957 - val_accuracy: 0.9198 - val_loss: 0.2938
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9210 - loss: 0.2855 - val_accuracy: 0.9207 - val_loss: 0.2933
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9209 - loss: 0.2871 - val_accuracy: 0.9192 - val_loss: 0.2923
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9200 - loss: 0.2843 - val_accuracy: 0.9197 - val_loss: 0.2916
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9194 - loss: 0.2907 - val_accuracy: 0.9207 - val_loss: 0.2903
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9202 - loss: 0.2872 - val_accuracy: 0.9200 - val_loss: 0.2901
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9199 - loss: 0.2882 - val_accuracy: 0.9208 - val_loss: 0.2893
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9220 - loss: 0.2847 - val_accuracy: 0.9218 - val_loss: 0.2890
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9221 - loss: 0.2794 - val_accuracy: 0.9208 - val_loss: 0.2889
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9229 - loss: 0.2774 - val_accuracy: 0.9217 - val_loss: 0.2877
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9205 - loss: 0.2878 - val_accuracy: 0.9218 - val_loss: 0.2870
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9244 - loss: 0.2693 - val_accuracy: 0.9230 - val_loss: 0.2874
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9221 - loss: 0.2799 - val_accuracy: 0.9217 - val_loss: 0.2858
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9233 - loss: 0.2752 - val_accuracy: 0.9220 - val_loss: 0.2862
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9225 - loss: 0.2832 - val_accuracy: 0.9225 - val_loss: 0.2858
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9210 - loss: 0.2797 - val_accuracy: 0.9232 - val_loss: 0.2854
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9254 - loss: 0.2691 - val_accuracy: 0.9222 - val_loss: 0.2850
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.9250 - loss: 0.2743 - val_accuracy: 0.9225 - val_loss: 0.2851
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9229 - loss: 0.2815 - val_accuracy: 0.9238 - val_loss: 0.2843
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9235 - loss: 0.2762 - val_accuracy: 0.9237 - val_loss: 0.2843
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.9232 - loss: 0.2753 - val_accuracy: 0.9230 - val_loss: 0.2841
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9233 - loss: 0.2751 - val_accuracy: 0.9232 - val_loss: 0.2834
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9237 - loss: 0.2741 - val_accuracy: 0.9232 - val_loss: 0.2833
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9265 - loss: 0.2705 - val_accuracy: 0.9237 - val_loss: 0.2832
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9242 - loss: 0.2715 - val_accuracy: 0.9235 - val_loss: 0.2825
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9254 - loss: 0.2664 - val_accuracy: 0.9240 - val_loss: 0.2823
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9248 - loss: 0.2754 - val_accuracy: 0.9233 - val_loss: 0.2824
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9266 - loss: 0.2631 - val_accuracy: 0.9240 - val_loss: 0.2821
# вывод графика ошибки по эпохам
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.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9213 - loss: 0.2825
Loss on test data: 0.28365787863731384
Accuracy on test data: 0.9225000143051147
# сохранение модели на диск
model.save('/content/drive/MyDrive/Colab Notebooks/models/model_zero_hide.keras')model100 = Sequential()
model100.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))
model100.add(Dense(units=num_classes, activation='softmax'))
model100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])# вывод информации об архитектуре модели
print(model100.summary())Model: "sequential_10"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_19 (Dense) │ (None, 100) │ 78,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_20 (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
# Обучаем модель
H = model100.fit(X_train, y_train, validation_split=0.1, epochs=50)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.5517 - loss: 1.8718 - val_accuracy: 0.8182 - val_loss: 0.9644
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.8306 - loss: 0.8507 - val_accuracy: 0.8643 - val_loss: 0.6192
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.8621 - loss: 0.5929 - val_accuracy: 0.8822 - val_loss: 0.4977
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.8781 - loss: 0.4907 - val_accuracy: 0.8895 - val_loss: 0.4357
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.8836 - loss: 0.4382 - val_accuracy: 0.8958 - val_loss: 0.3980
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.8918 - loss: 0.4026 - val_accuracy: 0.8988 - val_loss: 0.3721
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 5ms/step - accuracy: 0.8967 - loss: 0.3788 - val_accuracy: 0.9008 - val_loss: 0.3532
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9012 - loss: 0.3593 - val_accuracy: 0.9052 - val_loss: 0.3390
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9042 - loss: 0.3401 - val_accuracy: 0.9068 - val_loss: 0.3280
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9056 - loss: 0.3346 - val_accuracy: 0.9088 - val_loss: 0.3194
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9084 - loss: 0.3252 - val_accuracy: 0.9132 - val_loss: 0.3118
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9070 - loss: 0.3252 - val_accuracy: 0.9137 - val_loss: 0.3045
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9122 - loss: 0.3088 - val_accuracy: 0.9150 - val_loss: 0.2984
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9135 - loss: 0.3055 - val_accuracy: 0.9167 - val_loss: 0.2924
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9152 - loss: 0.2963 - val_accuracy: 0.9177 - val_loss: 0.2876
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 5ms/step - accuracy: 0.9169 - loss: 0.2904 - val_accuracy: 0.9198 - val_loss: 0.2828
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 3ms/step - accuracy: 0.9186 - loss: 0.2875 - val_accuracy: 0.9215 - val_loss: 0.2783
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9178 - loss: 0.2873 - val_accuracy: 0.9225 - val_loss: 0.2758
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9218 - loss: 0.2746 - val_accuracy: 0.9235 - val_loss: 0.2715
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9213 - loss: 0.2733 - val_accuracy: 0.9248 - val_loss: 0.2677
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9228 - loss: 0.2682 - val_accuracy: 0.9250 - val_loss: 0.2643
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9251 - loss: 0.2646 - val_accuracy: 0.9262 - val_loss: 0.2616
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9246 - loss: 0.2648 - val_accuracy: 0.9283 - val_loss: 0.2592
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9241 - loss: 0.2618 - val_accuracy: 0.9285 - val_loss: 0.2544
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9265 - loss: 0.2548 - val_accuracy: 0.9293 - val_loss: 0.2521
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9285 - loss: 0.2484 - val_accuracy: 0.9313 - val_loss: 0.2490
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9289 - loss: 0.2502 - val_accuracy: 0.9318 - val_loss: 0.2471
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9303 - loss: 0.2405 - val_accuracy: 0.9335 - val_loss: 0.2436
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9309 - loss: 0.2410 - val_accuracy: 0.9340 - val_loss: 0.2413
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9296 - loss: 0.2439 - val_accuracy: 0.9340 - val_loss: 0.2385
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9323 - loss: 0.2335 - val_accuracy: 0.9357 - val_loss: 0.2363
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9314 - loss: 0.2327 - val_accuracy: 0.9353 - val_loss: 0.2347
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9343 - loss: 0.2302 - val_accuracy: 0.9370 - val_loss: 0.2315
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9358 - loss: 0.2307 - val_accuracy: 0.9377 - val_loss: 0.2291
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9372 - loss: 0.2223 - val_accuracy: 0.9375 - val_loss: 0.2273
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9359 - loss: 0.2188 - val_accuracy: 0.9382 - val_loss: 0.2245
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9374 - loss: 0.2192 - val_accuracy: 0.9385 - val_loss: 0.2238
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9396 - loss: 0.2111 - val_accuracy: 0.9393 - val_loss: 0.2209
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9390 - loss: 0.2109 - val_accuracy: 0.9395 - val_loss: 0.2187
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9377 - loss: 0.2138 - val_accuracy: 0.9403 - val_loss: 0.2169
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9389 - loss: 0.2095 - val_accuracy: 0.9410 - val_loss: 0.2154
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.9402 - loss: 0.2089 - val_accuracy: 0.9417 - val_loss: 0.2130
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9409 - loss: 0.2048 - val_accuracy: 0.9415 - val_loss: 0.2116
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 13s 5ms/step - accuracy: 0.9413 - loss: 0.2042 - val_accuracy: 0.9418 - val_loss: 0.2097
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9418 - loss: 0.2014 - val_accuracy: 0.9420 - val_loss: 0.2075
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9418 - loss: 0.1994 - val_accuracy: 0.9433 - val_loss: 0.2054
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9440 - loss: 0.1932 - val_accuracy: 0.9435 - val_loss: 0.2038
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9432 - loss: 0.1949 - val_accuracy: 0.9428 - val_loss: 0.2029
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9455 - loss: 0.1864 - val_accuracy: 0.9445 - val_loss: 0.2007
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9459 - loss: 0.1889 - val_accuracy: 0.9447 - val_loss: 0.1989
# вывод графика ошибки по эпохам
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 = model100.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.9465 - loss: 0.1946
Loss on test data: 0.19745595753192902
Accuracy on test data: 0.9442999958992004
# сохранение модели на диск
model100.save('/content/drive/MyDrive/Colab Notebooks/models/model100in_1hide.keras')model300 = Sequential()
model300.add(Dense(units=300,input_dim=num_pixels, activation='sigmoid'))
model300.add(Dense(units=num_classes, activation='softmax'))
model300.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])# вывод информации об архитектуре модели
print(model300.summary())Model: "sequential_14"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_27 (Dense) │ (None, 300) │ 235,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_28 (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
# Обучаем модель
H = model300.fit(X_train, y_train, validation_split=0.1, epochs=50)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.5545 - loss: 1.7947 - val_accuracy: 0.8370 - val_loss: 0.8455
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.8401 - loss: 0.7563 - val_accuracy: 0.8668 - val_loss: 0.5617
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.8676 - loss: 0.5395 - val_accuracy: 0.8873 - val_loss: 0.4600
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.8786 - loss: 0.4621 - val_accuracy: 0.8970 - val_loss: 0.4114
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.8869 - loss: 0.4196 - val_accuracy: 0.8990 - val_loss: 0.3805
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 6ms/step - accuracy: 0.8939 - loss: 0.3848 - val_accuracy: 0.9023 - val_loss: 0.3618
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.8952 - loss: 0.3707 - val_accuracy: 0.9038 - val_loss: 0.3471
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9003 - loss: 0.3507 - val_accuracy: 0.9060 - val_loss: 0.3363
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9030 - loss: 0.3390 - val_accuracy: 0.9067 - val_loss: 0.3296
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9054 - loss: 0.3308 - val_accuracy: 0.9102 - val_loss: 0.3210
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 5ms/step - accuracy: 0.9073 - loss: 0.3286 - val_accuracy: 0.9103 - val_loss: 0.3150
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9091 - loss: 0.3198 - val_accuracy: 0.9127 - val_loss: 0.3103
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9116 - loss: 0.3159 - val_accuracy: 0.9150 - val_loss: 0.3051
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 6ms/step - accuracy: 0.9116 - loss: 0.3102 - val_accuracy: 0.9147 - val_loss: 0.3013
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.9130 - loss: 0.3016 - val_accuracy: 0.9163 - val_loss: 0.2982
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9149 - loss: 0.2983 - val_accuracy: 0.9160 - val_loss: 0.2970
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 6ms/step - accuracy: 0.9159 - loss: 0.2927 - val_accuracy: 0.9165 - val_loss: 0.2919
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9163 - loss: 0.2954 - val_accuracy: 0.9182 - val_loss: 0.2889
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 5ms/step - accuracy: 0.9163 - loss: 0.2920 - val_accuracy: 0.9187 - val_loss: 0.2861
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 5ms/step - accuracy: 0.9187 - loss: 0.2848 - val_accuracy: 0.9195 - val_loss: 0.2836
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9189 - loss: 0.2834 - val_accuracy: 0.9197 - val_loss: 0.2830
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9187 - loss: 0.2826 - val_accuracy: 0.9222 - val_loss: 0.2785
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.9181 - loss: 0.2820 - val_accuracy: 0.9213 - val_loss: 0.2767
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9193 - loss: 0.2796 - val_accuracy: 0.9208 - val_loss: 0.2757
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9215 - loss: 0.2712 - val_accuracy: 0.9233 - val_loss: 0.2722
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 18s 5ms/step - accuracy: 0.9197 - loss: 0.2718 - val_accuracy: 0.9247 - val_loss: 0.2709
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9231 - loss: 0.2682 - val_accuracy: 0.9255 - val_loss: 0.2683
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.9222 - loss: 0.2672 - val_accuracy: 0.9260 - val_loss: 0.2663
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 5ms/step - accuracy: 0.9248 - loss: 0.2658 - val_accuracy: 0.9258 - val_loss: 0.2648
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.9254 - loss: 0.2605 - val_accuracy: 0.9277 - val_loss: 0.2632
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9256 - loss: 0.2593 - val_accuracy: 0.9272 - val_loss: 0.2619
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 6ms/step - accuracy: 0.9260 - loss: 0.2583 - val_accuracy: 0.9280 - val_loss: 0.2604
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9264 - loss: 0.2551 - val_accuracy: 0.9290 - val_loss: 0.2585
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9291 - loss: 0.2497 - val_accuracy: 0.9298 - val_loss: 0.2566
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9293 - loss: 0.2458 - val_accuracy: 0.9298 - val_loss: 0.2540
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9315 - loss: 0.2408 - val_accuracy: 0.9295 - val_loss: 0.2523
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9305 - loss: 0.2384 - val_accuracy: 0.9318 - val_loss: 0.2509
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9316 - loss: 0.2397 - val_accuracy: 0.9303 - val_loss: 0.2485
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9322 - loss: 0.2383 - val_accuracy: 0.9317 - val_loss: 0.2460
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9320 - loss: 0.2380 - val_accuracy: 0.9302 - val_loss: 0.2455
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9337 - loss: 0.2325 - val_accuracy: 0.9333 - val_loss: 0.2432
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9316 - loss: 0.2381 - val_accuracy: 0.9338 - val_loss: 0.2427
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9342 - loss: 0.2303 - val_accuracy: 0.9325 - val_loss: 0.2398
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9346 - loss: 0.2262 - val_accuracy: 0.9332 - val_loss: 0.2388
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 5ms/step - accuracy: 0.9349 - loss: 0.2256 - val_accuracy: 0.9347 - val_loss: 0.2377
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9353 - loss: 0.2262 - val_accuracy: 0.9348 - val_loss: 0.2354
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9361 - loss: 0.2235 - val_accuracy: 0.9357 - val_loss: 0.2331
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 5ms/step - accuracy: 0.9365 - loss: 0.2220 - val_accuracy: 0.9365 - val_loss: 0.2318
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9386 - loss: 0.2174 - val_accuracy: 0.9377 - val_loss: 0.2306
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9380 - loss: 0.2139 - val_accuracy: 0.9375 - val_loss: 0.2303
# вывод графика ошибки по эпохам
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 = model300.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.9361 - loss: 0.2237
Loss on test data: 0.22660093009471893
Accuracy on test data: 0.9348000288009644
# сохранение модели на диск
model300.save('/content/drive/MyDrive/Colab Notebooks/models/model300in_1hide.keras')model500 = Sequential()
model500.add(Dense(units=500,input_dim=num_pixels, activation='sigmoid'))
model500.add(Dense(units=num_classes, activation='softmax'))
model500.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(model500.summary())Model: "sequential_16"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_31 (Dense) │ (None, 500) │ 392,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_32 (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
# Обучаем модель
H = model500.fit(X_train, y_train, validation_split=0.1, epochs=50)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.5639 - loss: 1.7603 - val_accuracy: 0.8423 - val_loss: 0.8077
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.8441 - loss: 0.7233 - val_accuracy: 0.8650 - val_loss: 0.5438
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 15s 9ms/step - accuracy: 0.8682 - loss: 0.5227 - val_accuracy: 0.8778 - val_loss: 0.4538
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.8836 - loss: 0.4448 - val_accuracy: 0.8933 - val_loss: 0.4062
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.8914 - loss: 0.4041 - val_accuracy: 0.8970 - val_loss: 0.3773
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 19s 6ms/step - accuracy: 0.8924 - loss: 0.3856 - val_accuracy: 0.9023 - val_loss: 0.3599
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.8965 - loss: 0.3660 - val_accuracy: 0.9017 - val_loss: 0.3462
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 23s 8ms/step - accuracy: 0.8984 - loss: 0.3547 - val_accuracy: 0.9043 - val_loss: 0.3384
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.9028 - loss: 0.3386 - val_accuracy: 0.9070 - val_loss: 0.3288
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 22s 7ms/step - accuracy: 0.9051 - loss: 0.3306 - val_accuracy: 0.9105 - val_loss: 0.3233
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9059 - loss: 0.3276 - val_accuracy: 0.9100 - val_loss: 0.3173
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.9087 - loss: 0.3166 - val_accuracy: 0.9103 - val_loss: 0.3115
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 22s 7ms/step - accuracy: 0.9094 - loss: 0.3168 - val_accuracy: 0.9123 - val_loss: 0.3086
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 19s 7ms/step - accuracy: 0.9086 - loss: 0.3116 - val_accuracy: 0.9133 - val_loss: 0.3039
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9131 - loss: 0.3053 - val_accuracy: 0.9135 - val_loss: 0.3032
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.9130 - loss: 0.3042 - val_accuracy: 0.9168 - val_loss: 0.2968
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 21s 7ms/step - accuracy: 0.9132 - loss: 0.3045 - val_accuracy: 0.9155 - val_loss: 0.2977
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9117 - loss: 0.3030 - val_accuracy: 0.9170 - val_loss: 0.2953
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9125 - loss: 0.3004 - val_accuracy: 0.9162 - val_loss: 0.2901
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.9160 - loss: 0.2866 - val_accuracy: 0.9163 - val_loss: 0.2890
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9172 - loss: 0.2888 - val_accuracy: 0.9183 - val_loss: 0.2875
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.9173 - loss: 0.2858 - val_accuracy: 0.9188 - val_loss: 0.2846
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.9184 - loss: 0.2819 - val_accuracy: 0.9205 - val_loss: 0.2836
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9210 - loss: 0.2806 - val_accuracy: 0.9197 - val_loss: 0.2823
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9219 - loss: 0.2750 - val_accuracy: 0.9205 - val_loss: 0.2802
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.9205 - loss: 0.2762 - val_accuracy: 0.9215 - val_loss: 0.2780
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9186 - loss: 0.2795 - val_accuracy: 0.9232 - val_loss: 0.2772
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9215 - loss: 0.2774 - val_accuracy: 0.9240 - val_loss: 0.2774
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 20s 6ms/step - accuracy: 0.9223 - loss: 0.2654 - val_accuracy: 0.9243 - val_loss: 0.2749
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 21s 7ms/step - accuracy: 0.9218 - loss: 0.2713 - val_accuracy: 0.9223 - val_loss: 0.2730
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 20s 7ms/step - accuracy: 0.9220 - loss: 0.2722 - val_accuracy: 0.9222 - val_loss: 0.2735
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 21s 7ms/step - accuracy: 0.9236 - loss: 0.2660 - val_accuracy: 0.9243 - val_loss: 0.2706
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 19s 6ms/step - accuracy: 0.9227 - loss: 0.2710 - val_accuracy: 0.9247 - val_loss: 0.2703
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9248 - loss: 0.2616 - val_accuracy: 0.9262 - val_loss: 0.2694
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9258 - loss: 0.2599 - val_accuracy: 0.9258 - val_loss: 0.2681
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 20s 6ms/step - accuracy: 0.9244 - loss: 0.2603 - val_accuracy: 0.9260 - val_loss: 0.2663
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9269 - loss: 0.2597 - val_accuracy: 0.9267 - val_loss: 0.2640
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9264 - loss: 0.2571 - val_accuracy: 0.9285 - val_loss: 0.2616
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 21s 7ms/step - accuracy: 0.9272 - loss: 0.2515 - val_accuracy: 0.9258 - val_loss: 0.2610
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9258 - loss: 0.2601 - val_accuracy: 0.9285 - val_loss: 0.2602
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9267 - loss: 0.2555 - val_accuracy: 0.9298 - val_loss: 0.2576
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9280 - loss: 0.2499 - val_accuracy: 0.9285 - val_loss: 0.2576
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 13s 7ms/step - accuracy: 0.9278 - loss: 0.2512 - val_accuracy: 0.9307 - val_loss: 0.2556
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 20s 7ms/step - accuracy: 0.9302 - loss: 0.2460 - val_accuracy: 0.9307 - val_loss: 0.2527
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9312 - loss: 0.2431 - val_accuracy: 0.9303 - val_loss: 0.2522
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.9308 - loss: 0.2424 - val_accuracy: 0.9307 - val_loss: 0.2508
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 20s 6ms/step - accuracy: 0.9320 - loss: 0.2372 - val_accuracy: 0.9323 - val_loss: 0.2490
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 20s 6ms/step - accuracy: 0.9335 - loss: 0.2367 - val_accuracy: 0.9308 - val_loss: 0.2506
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9311 - loss: 0.2358 - val_accuracy: 0.9327 - val_loss: 0.2470
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9328 - loss: 0.2348 - val_accuracy: 0.9318 - val_loss: 0.2444
# вывод графика ошибки по эпохам
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 = model500.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.9306 - loss: 0.2398
Loss on test data: 0.24357788264751434
Accuracy on test data: 0.9304999709129333
# сохранение модели на диск
model500.save('/content/drive/MyDrive/Colab Notebooks/models/model500in_1hide.keras')model10050 = Sequential()
model10050.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))
model10050.add(Dense(units=50,activation='sigmoid'))
model10050.add(Dense(units=num_classes, activation='softmax'))
model10050.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(model10050.summary())Model: "sequential_17"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_33 (Dense) │ (None, 100) │ 78,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_34 (Dense) │ (None, 50) │ 5,050 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_35 (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
# Обучаем модель
H = model10050.fit(X_train, y_train, validation_split=0.1, epochs=50)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.2384 - loss: 2.2959 - val_accuracy: 0.5560 - val_loss: 2.0638
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.5748 - loss: 1.9401 - val_accuracy: 0.7018 - val_loss: 1.4982
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.7110 - loss: 1.3739 - val_accuracy: 0.7747 - val_loss: 1.0420
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.7843 - loss: 0.9732 - val_accuracy: 0.8223 - val_loss: 0.7836
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.8227 - loss: 0.7602 - val_accuracy: 0.8523 - val_loss: 0.6359
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.8473 - loss: 0.6283 - val_accuracy: 0.8685 - val_loss: 0.5466
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 4ms/step - accuracy: 0.8634 - loss: 0.5465 - val_accuracy: 0.8808 - val_loss: 0.4867
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.8749 - loss: 0.4876 - val_accuracy: 0.8883 - val_loss: 0.4441
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.8827 - loss: 0.4497 - val_accuracy: 0.8933 - val_loss: 0.4141
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.8875 - loss: 0.4238 - val_accuracy: 0.8992 - val_loss: 0.3910
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 5ms/step - accuracy: 0.8899 - loss: 0.4074 - val_accuracy: 0.9008 - val_loss: 0.3727
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.8979 - loss: 0.3808 - val_accuracy: 0.9042 - val_loss: 0.3597
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 6ms/step - accuracy: 0.8993 - loss: 0.3650 - val_accuracy: 0.9060 - val_loss: 0.3473
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 5ms/step - accuracy: 0.9003 - loss: 0.3595 - val_accuracy: 0.9080 - val_loss: 0.3374
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9049 - loss: 0.3406 - val_accuracy: 0.9102 - val_loss: 0.3283
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9066 - loss: 0.3332 - val_accuracy: 0.9107 - val_loss: 0.3209
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9080 - loss: 0.3256 - val_accuracy: 0.9122 - val_loss: 0.3136
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9093 - loss: 0.3184 - val_accuracy: 0.9148 - val_loss: 0.3081
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 3ms/step - accuracy: 0.9105 - loss: 0.3125 - val_accuracy: 0.9155 - val_loss: 0.3027
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9121 - loss: 0.3116 - val_accuracy: 0.9173 - val_loss: 0.2965
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 17s 4ms/step - accuracy: 0.9131 - loss: 0.3009 - val_accuracy: 0.9192 - val_loss: 0.2915
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 5ms/step - accuracy: 0.9155 - loss: 0.2948 - val_accuracy: 0.9217 - val_loss: 0.2863
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9193 - loss: 0.2840 - val_accuracy: 0.9212 - val_loss: 0.2833
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9180 - loss: 0.2790 - val_accuracy: 0.9222 - val_loss: 0.2775
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9188 - loss: 0.2795 - val_accuracy: 0.9228 - val_loss: 0.2740
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9223 - loss: 0.2713 - val_accuracy: 0.9248 - val_loss: 0.2698
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9237 - loss: 0.2628 - val_accuracy: 0.9245 - val_loss: 0.2655
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 5ms/step - accuracy: 0.9240 - loss: 0.2619 - val_accuracy: 0.9247 - val_loss: 0.2622
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9276 - loss: 0.2541 - val_accuracy: 0.9268 - val_loss: 0.2589
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9242 - loss: 0.2610 - val_accuracy: 0.9275 - val_loss: 0.2554
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9271 - loss: 0.2498 - val_accuracy: 0.9270 - val_loss: 0.2531
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9278 - loss: 0.2482 - val_accuracy: 0.9287 - val_loss: 0.2493
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9251 - loss: 0.2526 - val_accuracy: 0.9310 - val_loss: 0.2450
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9313 - loss: 0.2341 - val_accuracy: 0.9323 - val_loss: 0.2416
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9307 - loss: 0.2386 - val_accuracy: 0.9337 - val_loss: 0.2391
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9329 - loss: 0.2309 - val_accuracy: 0.9337 - val_loss: 0.2361
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9337 - loss: 0.2277 - val_accuracy: 0.9347 - val_loss: 0.2334
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9324 - loss: 0.2281 - val_accuracy: 0.9357 - val_loss: 0.2303
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9348 - loss: 0.2268 - val_accuracy: 0.9368 - val_loss: 0.2280
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9383 - loss: 0.2162 - val_accuracy: 0.9370 - val_loss: 0.2251
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9353 - loss: 0.2242 - val_accuracy: 0.9362 - val_loss: 0.2226
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9369 - loss: 0.2170 - val_accuracy: 0.9373 - val_loss: 0.2200
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9386 - loss: 0.2110 - val_accuracy: 0.9382 - val_loss: 0.2172
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9395 - loss: 0.2069 - val_accuracy: 0.9378 - val_loss: 0.2147
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9405 - loss: 0.2047 - val_accuracy: 0.9403 - val_loss: 0.2125
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 5ms/step - accuracy: 0.9417 - loss: 0.2008 - val_accuracy: 0.9395 - val_loss: 0.2098
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9425 - loss: 0.1975 - val_accuracy: 0.9413 - val_loss: 0.2077
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9433 - loss: 0.1969 - val_accuracy: 0.9422 - val_loss: 0.2062
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9426 - loss: 0.1931 - val_accuracy: 0.9427 - val_loss: 0.2029
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9451 - loss: 0.1892 - val_accuracy: 0.9420 - val_loss: 0.2025
# вывод графика ошибки по эпохам
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 = model10050.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.9439 - loss: 0.1962
Loss on test data: 0.1993969976902008
Accuracy on test data: 0.9438999891281128
# сохранение модели на диск
model10050.save('/content/drive/MyDrive/Colab Notebooks/models/model100in_1hide_50in_2hide.keras')model100100 = Sequential()
model100100.add(Dense(units=100,input_dim=num_pixels, activation='sigmoid'))
model100100.add(Dense(units=100,activation='sigmoid'))
model100100.add(Dense(units=num_classes, activation='softmax'))
model100100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])# вывод информации об архитектуре модели
print(model100100.summary())Model: "sequential_18"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense_36 (Dense) │ (None, 100) │ 78,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_37 (Dense) │ (None, 100) │ 10,100 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_38 (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
# Обучаем модель
H = model100100.fit(X_train, y_train, validation_split=0.1, epochs=50)Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 61s 36ms/step - accuracy: 0.2265 - loss: 2.2721 - val_accuracy: 0.5038 - val_loss: 2.0316
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.5702 - loss: 1.8881 - val_accuracy: 0.7055 - val_loss: 1.4044
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.7132 - loss: 1.2722 - val_accuracy: 0.7908 - val_loss: 0.9573
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.7810 - loss: 0.8966 - val_accuracy: 0.8230 - val_loss: 0.7282
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.8185 - loss: 0.7008 - val_accuracy: 0.8457 - val_loss: 0.6018
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 5ms/step - accuracy: 0.8417 - loss: 0.5912 - val_accuracy: 0.8690 - val_loss: 0.5242
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.8609 - loss: 0.5206 - val_accuracy: 0.8808 - val_loss: 0.4689
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 20s 10ms/step - accuracy: 0.8725 - loss: 0.4728 - val_accuracy: 0.8883 - val_loss: 0.4307
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 15s 6ms/step - accuracy: 0.8833 - loss: 0.4282 - val_accuracy: 0.8952 - val_loss: 0.4030
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.8890 - loss: 0.4111 - val_accuracy: 0.8995 - val_loss: 0.3807
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 6ms/step - accuracy: 0.8932 - loss: 0.3885 - val_accuracy: 0.9048 - val_loss: 0.3633
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.8954 - loss: 0.3716 - val_accuracy: 0.9070 - val_loss: 0.3493
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9004 - loss: 0.3586 - val_accuracy: 0.9077 - val_loss: 0.3375
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9028 - loss: 0.3483 - val_accuracy: 0.9107 - val_loss: 0.3282
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9058 - loss: 0.3355 - val_accuracy: 0.9127 - val_loss: 0.3204
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9064 - loss: 0.3275 - val_accuracy: 0.9130 - val_loss: 0.3122
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9096 - loss: 0.3203 - val_accuracy: 0.9150 - val_loss: 0.3055
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9125 - loss: 0.3090 - val_accuracy: 0.9178 - val_loss: 0.3005
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 13s 6ms/step - accuracy: 0.9111 - loss: 0.3053 - val_accuracy: 0.9175 - val_loss: 0.2948
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9142 - loss: 0.2993 - val_accuracy: 0.9210 - val_loss: 0.2893
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9172 - loss: 0.2910 - val_accuracy: 0.9213 - val_loss: 0.2852
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 5ms/step - accuracy: 0.9163 - loss: 0.2892 - val_accuracy: 0.9222 - val_loss: 0.2792
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 5ms/step - accuracy: 0.9172 - loss: 0.2833 - val_accuracy: 0.9235 - val_loss: 0.2761
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9202 - loss: 0.2745 - val_accuracy: 0.9233 - val_loss: 0.2720
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9227 - loss: 0.2709 - val_accuracy: 0.9258 - val_loss: 0.2680
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9221 - loss: 0.2680 - val_accuracy: 0.9255 - val_loss: 0.2637
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9239 - loss: 0.2610 - val_accuracy: 0.9257 - val_loss: 0.2604
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9234 - loss: 0.2638 - val_accuracy: 0.9277 - val_loss: 0.2568
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9267 - loss: 0.2547 - val_accuracy: 0.9297 - val_loss: 0.2521
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9273 - loss: 0.2470 - val_accuracy: 0.9307 - val_loss: 0.2495
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 6ms/step - accuracy: 0.9307 - loss: 0.2395 - val_accuracy: 0.9310 - val_loss: 0.2467
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9312 - loss: 0.2422 - val_accuracy: 0.9322 - val_loss: 0.2433
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9312 - loss: 0.2376 - val_accuracy: 0.9327 - val_loss: 0.2404
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9324 - loss: 0.2346 - val_accuracy: 0.9335 - val_loss: 0.2374
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9319 - loss: 0.2321 - val_accuracy: 0.9330 - val_loss: 0.2352
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 5ms/step - accuracy: 0.9352 - loss: 0.2239 - val_accuracy: 0.9360 - val_loss: 0.2315
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9347 - loss: 0.2260 - val_accuracy: 0.9370 - val_loss: 0.2288
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9377 - loss: 0.2149 - val_accuracy: 0.9368 - val_loss: 0.2258
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9375 - loss: 0.2166 - val_accuracy: 0.9375 - val_loss: 0.2236
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9403 - loss: 0.2101 - val_accuracy: 0.9392 - val_loss: 0.2216
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9379 - loss: 0.2118 - val_accuracy: 0.9393 - val_loss: 0.2185
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9396 - loss: 0.2089 - val_accuracy: 0.9403 - val_loss: 0.2157
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9407 - loss: 0.2072 - val_accuracy: 0.9410 - val_loss: 0.2138
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9428 - loss: 0.1994 - val_accuracy: 0.9408 - val_loss: 0.2127
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9433 - loss: 0.1981 - val_accuracy: 0.9420 - val_loss: 0.2092
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9454 - loss: 0.1925 - val_accuracy: 0.9425 - val_loss: 0.2081
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9440 - loss: 0.1946 - val_accuracy: 0.9438 - val_loss: 0.2046
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9461 - loss: 0.1875 - val_accuracy: 0.9437 - val_loss: 0.2023
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9455 - loss: 0.1900 - val_accuracy: 0.9442 - val_loss: 0.2009
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9462 - loss: 0.1862 - val_accuracy: 0.9458 - val_loss: 0.1979
ke
# Оценка качества работы модели на тестовых данных
scores = model100100.evaluate(X_test, y_test)
print('Loss on test data:', scores[0])
print('Accuracy on test data:', scores[1])313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.9449 - loss: 0.1931
Loss on test data: 0.19571688771247864
Accuracy on test data: 0.9435999989509583
# сохранение модели на диск
model100100.save('/content/drive/MyDrive/Colab Notebooks/models/model100in_1hide_100in_2hide.keras')# сохранение лучшей модели в папку best_model
model100.save('/content/drive/MyDrive/Colab Notebooks/best_model/model100.keras')# Загрузка модели с диска
from keras.models import load_model
model = load_model('/content/drive/MyDrive/Colab Notebooks/best_model/model100.keras')# вывод тестового изображения и результата распознавания
n = 111
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)))1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 116ms/step
NN output: [[1.1728607e-03 5.4896927e-06 3.3185919e-05 2.6362878e-04 4.8558863e-06
  9.9795568e-01 1.9454242e-07 1.6833146e-05 4.9621973e-04 5.1067746e-05]]

Real mark:  5
NN answer:  5
# вывод тестового изображения и результата распознавания
n = 222
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)))1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 72ms/step
NN output: [[1.02687673e-05 2.02151591e-06 2.86183599e-03 8.74871985e-05
  1.51387369e-02 6.32769879e-05 3.97122385e-05 4.11829986e-02
  1.06158564e-04 9.40507472e-01]]

Real mark:  9
NN answer:  9
# загрузка собственного изображения
from PIL import Image
file_data = Image.open('test.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.predict(test_img)
print('I think it\'s ', np.argmax(result))
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 59ms/step
I think it's  5
# загрузка собственного изображения
from PIL import Image
file2_data = Image.open('test_2.png')
file2_data = file2_data.convert('L') # перевод в градации серого
test2_img = np.array(file2_data)# вывод собственного изображения
plt.imshow(test2_img, cmap=plt.get_cmap('gray'))
plt.show()
# предобработка
test2_img = test2_img / 255
test2_img = test2_img.reshape(1, num_pixels)
# распознавание
result_2 = model.predict(test2_img)
print('I think it\'s ', np.argmax(result_2))
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 72ms/step
I think it's  2
# загрузка собственного изображения, повернутого на 90 градусов
from PIL import Image
file90_data = Image.open('test90.png')
file90_data = file90_data.convert('L') # перевод в градации серого
test90_img = np.array(file90_data)# вывод собственного изображения
plt.imshow(test90_img, cmap=plt.get_cmap('gray'))
plt.show()
# предобработка
test90_img = test90_img / 255
test90_img = test90_img.reshape(1, num_pixels)
# распознавание
result_3 = model.predict(test90_img)
print('I think it\'s ', np.argmax(result_3))
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 91ms/step
I think it's  7
# загрузка собственного изображения, повернутого на 90 градусов
from PIL import Image
file902_data = Image.open('test90_2.png')
file902_data = file902_data.convert('L') # перевод в градации серого
test902_img = np.array(file902_data)# вывод собственного изображения
plt.imshow(test902_img, cmap=plt.get_cmap('gray'))
plt.show()
# предобработка
test902_img = test902_img / 255
test902_img = test902_img.reshape(1, num_pixels)
# распознавание
result_4 = model.predict(test902_img)
print('I think it\'s ', np.argmax(result_4))
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 75ms/step
I think it's  7