форкнуто от main/is_dnn
				
			
			Вы не можете выбрать более 25 тем
			Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
		
		
		
		
		
			
		
			
				
	
	
	
		
			231 KiB
		
	
	
	
			
		
		
	
	
			231 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.utils import to_categorical
#from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense# загрузка датасета
from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11490434/11490434 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step
# создание своего разбиения датасета
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 = 31)# вывод размерностей
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,)
for i in range(4):
  plt.imshow(X_train[i],cmap=plt.get_cmap('gray'))
  plt.show()
  print(y_train[i])
8

2

2

3
# развернем каждое изображение 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
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)
 #1. создаем модель - объявляем ее объектом класса Sequential
model = Sequential()
# 2. добавляем первый скрытый слой
#model.add(Dense(units=300, input_dim=num_pixels, activation='sigmoid'))
# 3. добавляем второй скрытый слой
#model.add(Dense(units=100, activation='sigmoid'))
# 4. добавляем выходной слой
model.add(Dense(units=num_classes, activation='softmax'))
# 5. компилируем модель
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])# вывод информации об архитектуре модели
print(model.summary())
# Обучаем модель
H = model.fit(X_train, y_train, validation_split=0.1, epochs=50)Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ ┃ Layer (type) ┃ Output Shape ┃ Param # ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ │ dense (Dense) │ ? │ 0 (unbuilt) │ └─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 0 (0.00 B)
Trainable params: 0 (0.00 B)
Non-trainable params: 0 (0.00 B)
None
Epoch 1/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.7060 - loss: 1.1734 - val_accuracy: 0.8710 - val_loss: 0.5186
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.8774 - loss: 0.4847 - val_accuracy: 0.8860 - val_loss: 0.4319
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.8904 - loss: 0.4151 - val_accuracy: 0.8912 - val_loss: 0.3966
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.8973 - loss: 0.3828 - val_accuracy: 0.8947 - val_loss: 0.3761
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9000 - loss: 0.3700 - val_accuracy: 0.8998 - val_loss: 0.3625
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.9021 - loss: 0.3542 - val_accuracy: 0.9018 - val_loss: 0.3535
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 2ms/step - accuracy: 0.9018 - loss: 0.3486 - val_accuracy: 0.9032 - val_loss: 0.3454
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9087 - loss: 0.3288 - val_accuracy: 0.9062 - val_loss: 0.3396
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9103 - loss: 0.3263 - val_accuracy: 0.9082 - val_loss: 0.3344
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9110 - loss: 0.3196 - val_accuracy: 0.9060 - val_loss: 0.3307
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 2ms/step - accuracy: 0.9118 - loss: 0.3172 - val_accuracy: 0.9090 - val_loss: 0.3263
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9129 - loss: 0.3139 - val_accuracy: 0.9090 - val_loss: 0.3239
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9137 - loss: 0.3141 - val_accuracy: 0.9082 - val_loss: 0.3212
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9174 - loss: 0.3026 - val_accuracy: 0.9112 - val_loss: 0.3184
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9150 - loss: 0.3056 - val_accuracy: 0.9107 - val_loss: 0.3160
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9162 - loss: 0.3012 - val_accuracy: 0.9105 - val_loss: 0.3147
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9163 - loss: 0.2992 - val_accuracy: 0.9115 - val_loss: 0.3121
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9167 - loss: 0.3022 - val_accuracy: 0.9107 - val_loss: 0.3105
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9173 - loss: 0.2992 - val_accuracy: 0.9122 - val_loss: 0.3091
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 2ms/step - accuracy: 0.9184 - loss: 0.2976 - val_accuracy: 0.9112 - val_loss: 0.3077
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9225 - loss: 0.2857 - val_accuracy: 0.9115 - val_loss: 0.3071
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9211 - loss: 0.2869 - val_accuracy: 0.9127 - val_loss: 0.3046
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9202 - loss: 0.2872 - val_accuracy: 0.9122 - val_loss: 0.3044
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9206 - loss: 0.2869 - val_accuracy: 0.9133 - val_loss: 0.3032
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9201 - loss: 0.2859 - val_accuracy: 0.9128 - val_loss: 0.3025
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9195 - loss: 0.2863 - val_accuracy: 0.9138 - val_loss: 0.3014
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9218 - loss: 0.2821 - val_accuracy: 0.9137 - val_loss: 0.3005
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9203 - loss: 0.2882 - val_accuracy: 0.9142 - val_loss: 0.2998
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9224 - loss: 0.2780 - val_accuracy: 0.9132 - val_loss: 0.2989
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.9215 - loss: 0.2822 - val_accuracy: 0.9150 - val_loss: 0.2982
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9216 - loss: 0.2843 - val_accuracy: 0.9140 - val_loss: 0.2976
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9208 - loss: 0.2828 - val_accuracy: 0.9142 - val_loss: 0.2964
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9236 - loss: 0.2806 - val_accuracy: 0.9155 - val_loss: 0.2965
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9224 - loss: 0.2821 - val_accuracy: 0.9155 - val_loss: 0.2955
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9238 - loss: 0.2787 - val_accuracy: 0.9160 - val_loss: 0.2950
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.9225 - loss: 0.2796 - val_accuracy: 0.9153 - val_loss: 0.2948
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9255 - loss: 0.2720 - val_accuracy: 0.9162 - val_loss: 0.2946
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 2ms/step - accuracy: 0.9223 - loss: 0.2786 - val_accuracy: 0.9152 - val_loss: 0.2940
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9243 - loss: 0.2725 - val_accuracy: 0.9148 - val_loss: 0.2930
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9249 - loss: 0.2710 - val_accuracy: 0.9150 - val_loss: 0.2933
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9257 - loss: 0.2709 - val_accuracy: 0.9163 - val_loss: 0.2922
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9267 - loss: 0.2659 - val_accuracy: 0.9158 - val_loss: 0.2919
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9270 - loss: 0.2680 - val_accuracy: 0.9167 - val_loss: 0.2910
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 4s 2ms/step - accuracy: 0.9250 - loss: 0.2697 - val_accuracy: 0.9163 - val_loss: 0.2908
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 3s 2ms/step - accuracy: 0.9247 - loss: 0.2730 - val_accuracy: 0.9163 - val_loss: 0.2904
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 5ms/step - accuracy: 0.9228 - loss: 0.2808 - val_accuracy: 0.9158 - val_loss: 0.2902
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9254 - loss: 0.2682 - val_accuracy: 0.9172 - val_loss: 0.2903
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.9239 - loss: 0.2755 - val_accuracy: 0.9180 - val_loss: 0.2901
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 2ms/step - accuracy: 0.9250 - loss: 0.2693 - val_accuracy: 0.9178 - val_loss: 0.2900
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 2ms/step - accuracy: 0.9273 - loss: 0.2634 - val_accuracy: 0.9157 - val_loss: 0.2896
# вывод графика ошибки по эпохам
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.9165 - loss: 0.2995
Loss on test data: 0.28918400406837463
Accuracy on test data: 0.9185000061988831
#1. создаем модель - объявляем ее объектом класса Sequential
model_100 = Sequential()
# 2. добавляем первый скрытый слой
model_100.add(Dense(units=100, input_dim=num_pixels, activation='sigmoid'))
# 3. добавляем второй скрытый слой
#model.add(Dense(units=100, activation='sigmoid'))
# 4. добавляем выходной слой
model_100.add(Dense(units=num_classes, activation='softmax'))
# 5. компилируем модель
model_100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
# вывод информации об архитектуре модели
print(model_100.summary())
# Обучаем модель
H = model_100.fit(X_train, y_train, validation_split=0.1, epochs=50)
# вывод графика ошибки по эпохам
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_100.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 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.5408 - loss: 1.8881 - val_accuracy: 0.8193 - val_loss: 0.9683
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.8315 - loss: 0.8472 - val_accuracy: 0.8612 - val_loss: 0.6255
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.8637 - loss: 0.5878 - val_accuracy: 0.8780 - val_loss: 0.5065
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8750 - loss: 0.4923 - val_accuracy: 0.8863 - val_loss: 0.4451
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.8874 - loss: 0.4305 - val_accuracy: 0.8917 - val_loss: 0.4081
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8900 - loss: 0.4001 - val_accuracy: 0.8977 - val_loss: 0.3835
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8981 - loss: 0.3727 - val_accuracy: 0.9022 - val_loss: 0.3661
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9003 - loss: 0.3590 - val_accuracy: 0.9028 - val_loss: 0.3525
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9050 - loss: 0.3418 - val_accuracy: 0.9062 - val_loss: 0.3416
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9081 - loss: 0.3291 - val_accuracy: 0.9072 - val_loss: 0.3321
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9084 - loss: 0.3257 - val_accuracy: 0.9092 - val_loss: 0.3248
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9120 - loss: 0.3130 - val_accuracy: 0.9127 - val_loss: 0.3173
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9125 - loss: 0.3081 - val_accuracy: 0.9137 - val_loss: 0.3112
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9130 - loss: 0.3029 - val_accuracy: 0.9133 - val_loss: 0.3068
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9166 - loss: 0.2955 - val_accuracy: 0.9155 - val_loss: 0.3016
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9149 - loss: 0.2942 - val_accuracy: 0.9160 - val_loss: 0.2975
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9161 - loss: 0.2912 - val_accuracy: 0.9188 - val_loss: 0.2927
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9204 - loss: 0.2797 - val_accuracy: 0.9192 - val_loss: 0.2886
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9218 - loss: 0.2758 - val_accuracy: 0.9202 - val_loss: 0.2853
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9227 - loss: 0.2716 - val_accuracy: 0.9205 - val_loss: 0.2811
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9244 - loss: 0.2680 - val_accuracy: 0.9215 - val_loss: 0.2782
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 3ms/step - accuracy: 0.9251 - loss: 0.2627 - val_accuracy: 0.9232 - val_loss: 0.2748
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9269 - loss: 0.2604 - val_accuracy: 0.9243 - val_loss: 0.2705
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9261 - loss: 0.2604 - val_accuracy: 0.9253 - val_loss: 0.2677
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9258 - loss: 0.2574 - val_accuracy: 0.9257 - val_loss: 0.2650
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9292 - loss: 0.2498 - val_accuracy: 0.9253 - val_loss: 0.2621
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9298 - loss: 0.2452 - val_accuracy: 0.9277 - val_loss: 0.2592
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9287 - loss: 0.2478 - val_accuracy: 0.9282 - val_loss: 0.2562
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9309 - loss: 0.2459 - val_accuracy: 0.9283 - val_loss: 0.2547
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9329 - loss: 0.2370 - val_accuracy: 0.9300 - val_loss: 0.2511
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9334 - loss: 0.2355 - val_accuracy: 0.9302 - val_loss: 0.2479
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9331 - loss: 0.2340 - val_accuracy: 0.9305 - val_loss: 0.2457
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9327 - loss: 0.2344 - val_accuracy: 0.9308 - val_loss: 0.2439
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9350 - loss: 0.2279 - val_accuracy: 0.9318 - val_loss: 0.2414
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9357 - loss: 0.2247 - val_accuracy: 0.9323 - val_loss: 0.2385
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9379 - loss: 0.2203 - val_accuracy: 0.9328 - val_loss: 0.2367
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9376 - loss: 0.2205 - val_accuracy: 0.9332 - val_loss: 0.2335
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9370 - loss: 0.2208 - val_accuracy: 0.9338 - val_loss: 0.2317
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9395 - loss: 0.2140 - val_accuracy: 0.9343 - val_loss: 0.2296
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9394 - loss: 0.2125 - val_accuracy: 0.9342 - val_loss: 0.2284
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9379 - loss: 0.2143 - val_accuracy: 0.9355 - val_loss: 0.2253
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9409 - loss: 0.2079 - val_accuracy: 0.9357 - val_loss: 0.2233
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9414 - loss: 0.2074 - val_accuracy: 0.9367 - val_loss: 0.2213
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9435 - loss: 0.2002 - val_accuracy: 0.9377 - val_loss: 0.2196
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9444 - loss: 0.1993 - val_accuracy: 0.9375 - val_loss: 0.2179
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9429 - loss: 0.2023 - val_accuracy: 0.9382 - val_loss: 0.2154
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9435 - loss: 0.1967 - val_accuracy: 0.9398 - val_loss: 0.2141
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9447 - loss: 0.1931 - val_accuracy: 0.9400 - val_loss: 0.2119
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9435 - loss: 0.1983 - val_accuracy: 0.9402 - val_loss: 0.2105
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9463 - loss: 0.1900 - val_accuracy: 0.9395 - val_loss: 0.2090

313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9381 - loss: 0.2127
Loss on test data: 0.20470060408115387
Accuracy on test data: 0.9412999749183655
#1. создаем модель - объявляем ее объектом класса Sequential
model_2_100 = Sequential()
# 2. добавляем первый скрытый слой
model_2_100.add(Dense(units=100, input_dim=num_pixels, activation='sigmoid'))
# 3. добавляем второй скрытый слой
model_2_100.add(Dense(units=100, activation='sigmoid'))
# 4. добавляем выходной слой
model_2_100.add(Dense(units=num_classes, activation='softmax'))
# 5. компилируем модель
model_2_100.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
# вывод информации об архитектуре модели
print(model_2_100.summary())
# Обучаем модель
H = model_2_100.fit(X_train, y_train, validation_split=0.1, epochs=50)
# вывод графика ошибки по эпохам
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_2_100.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_15 (Dense) │ (None, 100) │ 78,500 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_16 (Dense) │ (None, 100) │ 10,100 │ ├─────────────────────────────────┼────────────────────────┼───────────────┤ │ dense_17 (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 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.2102 - loss: 2.2695 - val_accuracy: 0.5102 - val_loss: 2.1087
Epoch 2/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.5495 - loss: 1.9930 - val_accuracy: 0.5872 - val_loss: 1.5403
Epoch 3/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.6757 - loss: 1.3754 - val_accuracy: 0.7538 - val_loss: 1.0207
Epoch 4/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.7764 - loss: 0.9373 - val_accuracy: 0.8162 - val_loss: 0.7629
Epoch 5/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.8251 - loss: 0.7187 - val_accuracy: 0.8405 - val_loss: 0.6221
Epoch 6/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.8504 - loss: 0.5963 - val_accuracy: 0.8548 - val_loss: 0.5365
Epoch 7/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8644 - loss: 0.5199 - val_accuracy: 0.8715 - val_loss: 0.4806
Epoch 8/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8744 - loss: 0.4686 - val_accuracy: 0.8820 - val_loss: 0.4421
Epoch 9/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 12s 4ms/step - accuracy: 0.8842 - loss: 0.4335 - val_accuracy: 0.8863 - val_loss: 0.4144
Epoch 10/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 3ms/step - accuracy: 0.8911 - loss: 0.3984 - val_accuracy: 0.8918 - val_loss: 0.3920
Epoch 11/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.8962 - loss: 0.3795 - val_accuracy: 0.8968 - val_loss: 0.3753
Epoch 12/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.8981 - loss: 0.3651 - val_accuracy: 0.8983 - val_loss: 0.3618
Epoch 13/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9002 - loss: 0.3543 - val_accuracy: 0.9015 - val_loss: 0.3498
Epoch 14/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9038 - loss: 0.3396 - val_accuracy: 0.9048 - val_loss: 0.3402
Epoch 15/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9070 - loss: 0.3311 - val_accuracy: 0.9065 - val_loss: 0.3328
Epoch 16/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9085 - loss: 0.3183 - val_accuracy: 0.9097 - val_loss: 0.3237
Epoch 17/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9108 - loss: 0.3115 - val_accuracy: 0.9122 - val_loss: 0.3166
Epoch 18/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 3ms/step - accuracy: 0.9125 - loss: 0.3046 - val_accuracy: 0.9137 - val_loss: 0.3106
Epoch 19/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9173 - loss: 0.2943 - val_accuracy: 0.9162 - val_loss: 0.3046
Epoch 20/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9160 - loss: 0.2932 - val_accuracy: 0.9165 - val_loss: 0.2994
Epoch 21/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9176 - loss: 0.2840 - val_accuracy: 0.9180 - val_loss: 0.2929
Epoch 22/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9194 - loss: 0.2821 - val_accuracy: 0.9193 - val_loss: 0.2882
Epoch 23/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9209 - loss: 0.2753 - val_accuracy: 0.9202 - val_loss: 0.2835
Epoch 24/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9233 - loss: 0.2659 - val_accuracy: 0.9207 - val_loss: 0.2791
Epoch 25/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9235 - loss: 0.2660 - val_accuracy: 0.9232 - val_loss: 0.2740
Epoch 26/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9222 - loss: 0.2663 - val_accuracy: 0.9227 - val_loss: 0.2706
Epoch 27/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9262 - loss: 0.2537 - val_accuracy: 0.9247 - val_loss: 0.2665
Epoch 28/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9272 - loss: 0.2536 - val_accuracy: 0.9260 - val_loss: 0.2629
Epoch 29/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9279 - loss: 0.2523 - val_accuracy: 0.9267 - val_loss: 0.2594
Epoch 30/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9271 - loss: 0.2486 - val_accuracy: 0.9273 - val_loss: 0.2556
Epoch 31/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9303 - loss: 0.2405 - val_accuracy: 0.9288 - val_loss: 0.2517
Epoch 32/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9322 - loss: 0.2385 - val_accuracy: 0.9303 - val_loss: 0.2479
Epoch 33/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9315 - loss: 0.2341 - val_accuracy: 0.9292 - val_loss: 0.2465
Epoch 34/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9330 - loss: 0.2303 - val_accuracy: 0.9300 - val_loss: 0.2424
Epoch 35/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9365 - loss: 0.2209 - val_accuracy: 0.9323 - val_loss: 0.2381
Epoch 36/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9343 - loss: 0.2249 - val_accuracy: 0.9323 - val_loss: 0.2356
Epoch 37/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 11s 4ms/step - accuracy: 0.9369 - loss: 0.2221 - val_accuracy: 0.9337 - val_loss: 0.2321
Epoch 38/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9365 - loss: 0.2212 - val_accuracy: 0.9330 - val_loss: 0.2301
Epoch 39/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9386 - loss: 0.2146 - val_accuracy: 0.9348 - val_loss: 0.2276
Epoch 40/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 4ms/step - accuracy: 0.9381 - loss: 0.2121 - val_accuracy: 0.9360 - val_loss: 0.2251
Epoch 41/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9408 - loss: 0.2070 - val_accuracy: 0.9350 - val_loss: 0.2223
Epoch 42/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9392 - loss: 0.2117 - val_accuracy: 0.9367 - val_loss: 0.2204
Epoch 43/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9398 - loss: 0.2047 - val_accuracy: 0.9372 - val_loss: 0.2169
Epoch 44/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 8s 3ms/step - accuracy: 0.9438 - loss: 0.1981 - val_accuracy: 0.9382 - val_loss: 0.2137
Epoch 45/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.9441 - loss: 0.1944 - val_accuracy: 0.9390 - val_loss: 0.2119
Epoch 46/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.9441 - loss: 0.1907 - val_accuracy: 0.9390 - val_loss: 0.2095
Epoch 47/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.9449 - loss: 0.1910 - val_accuracy: 0.9405 - val_loss: 0.2068
Epoch 48/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 9s 3ms/step - accuracy: 0.9446 - loss: 0.1940 - val_accuracy: 0.9410 - val_loss: 0.2046
Epoch 49/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 10s 3ms/step - accuracy: 0.9482 - loss: 0.1818 - val_accuracy: 0.9408 - val_loss: 0.2025
Epoch 50/50
1688/1688 ━━━━━━━━━━━━━━━━━━━━ 6s 3ms/step - accuracy: 0.9460 - loss: 0.1875 - val_accuracy: 0.9405 - val_loss: 0.2009

313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step - accuracy: 0.9384 - loss: 0.2003
Loss on test data: 0.19404223561286926
Accuracy on test data: 0.9413999915122986
# сохранение модели на диск, к примеру, в папку best_model
# В общем случае может быть указан произвольный путь
filepath='/content/drive/MyDrive/Colab Notebooks/best_model.keras'
model_2_100.save(filepath)---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/tmp/ipython-input-2416422355.py in <cell line: 0>()
      2 # В общем случае может быть указан произвольный путь
      3 filepath='/content/drive/MyDrive/Colab Notebooks/best_model.keras'
----> 4 model_2_100.save(filepath)
NameError: name 'model_2_100' is not defined
# Загрузка модели с диска
from keras.models import load_model
model = load_model('/content/drive/MyDrive/Colab Notebooks/best_model.keras')# вывод тестового изображения и результата распознавания
n = 123
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 76ms/step
NN output: [[4.8947215e-05 3.4176528e-03 8.6587053e-05 9.2398334e-01 5.9264214e-05
  5.0175749e-02 8.9853020e-06 1.3068309e-03 7.7676596e-03 1.3145068e-02]]

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