В прошлом посте разбирали, из каких слоёв состоит нейросеть. Теперь соберём рабочий пример на MNIST.
MNIST — классический учебный датасет из 70 000 изображений рукописных цифр от 0 до 9:
— 60 000 изображений для обучения
— 10 000 для проверки
— размер каждой картинки — 28 × 28 пикселей
Загружаем данные:
from tensorflow import keras from tensorflow.keras import layers import numpy as npВ x_train находятся изображения, а в y_train — правильные ответы.
(x_train, y_train), (x_test, y_test) = ( keras.datasets.mnist.load_data() )
Например:
print(x_train.shape)
# (60000, 28, 28)
print(y_train[0])
# 5
Для нейросети картинка — это таблица чисел от 0 до 255. Нормализуем значения до диапазона от 0 до 1:
x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255
Затем превращаем каждое изображение 28 × 28 в массив из 784 чисел:
x_train = x_train.reshape(-1, 784)
x_test = x_test.reshape(-1, 784)
Теперь собираем модель:
model = keras.Sequential([
layers.Input(shape=(784,)),
layers.Dense(128, activation="relu"),
layers.Dropout(0.2),
layers.Dense(10, activation="softmax")
])
Настраиваем обучение:
model.compile(
optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"]
)
Запускаем обучение:
model.fit( x_train, y_train, epochs=3, batch_size=32, validation_split=0.1 )
Проверяем модель на данных, которые она не видела во время обучения:
test_loss, test_accuracy = model.evaluate(Получаем предсказание для одной картинки:
x_test,
y_test
)
print("Точность:", test_accuracy)
image = x_test[0:1]
probabilities = model.predict(image)
predicted_digit = np.argmax(probabilities)
print("Вероятности:", probabilities[0])
print("Ответ модели:", predicted_digit)
print("Правильный ответ:", y_test[0])