from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.utils import np_utils
import numpy as np
Загружаем данные MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data()
Оставляем только цифры 3, 5, 7
mask_train = np.isin(y_train, [3, 5, 7])
mask_test = np.isin(y_test, [3, 5, 7])
x_train, y_train = x_train[mask_train], y_train[mask_train]
x_test, y_test = x_test[mask_test], y_test[mask_test]
Преобразуем метки в диапазон 0,1,2 (для 3,5,7)
label_map = {3:0, 5:1, 7:2}
y_train = np.array([label_map[y] for y in y_train])
y_test = np.array([label_map[y] for y in y_test])
Нормализация изображений
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255
Преобразуем метки в one-hot encoding
y_train = np_utils.to_categorical(y_train, 3)
y_test = np_utils.to_categorical(y_test, 3)
Создаём модель
model = Sequential()
model.add(Flatten(input_shape=(28,28)))
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(3, activation='softmax'))
Компилируем модель
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
Обучаем модель
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_split=0.1)
Сохраняем модель на диск
model.save("mnist357model.h5")