Python ~ Глубокое обучение

Введение

Мы попытаемся решить задачу классификации черно-белых (28x28 пикселей) изображений, состоящих из рукописных цифр, разделенных на 10 (0–9) категорий. Мы будем использовать набор данных MNIST. Набор данных MNIST состоит из 70 000 изображений, 60 000 для обучения и 10 000 для тестирования, созданных Национальным институтом стандартов и технологий (NIST) в 1980-х годах. . Набор данных MNIST можно рассматривать как "Hello World" в области глубокого обучения.

Требования

Импорт библиотеки

Нам нужно импортировать необходимые модули Keras.

from keras.datasets import mnist
from keras import models
from keras import layers
from keras.utils import to_categorical

Подготовка данных

Набор данных MNIST делится на обучающие и тестовые наборы в виде пустых массивов над Keras.

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

Мы предварительно обрабатываем данные, придавая им форму, которую ожидает сеть, и масштабируя их так, чтобы все значения находились в интервале [0, 1]. Мы конвертируем массив формы (60000, 28, 28) типа'uint8' в массив формы (60000, 28*28) типа 'float32'.

train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255

Нам нужно определить наши ярлыки как категориальные.

train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

Проектирование сетевой архитектуры

Мы определяем нашу сетевую архитектуру. Мы используем последовательную модель. Первый слой плотный (полностью связанный), функция активации представляет собой выпрямленную линейную единицу (относительно). Второй слой плотный (полностью связанный), функция активации softmax.

network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))

Учебная сеть

Мы настраиваем наш шаг компиляции. Наша сеть имеет функцию оптимизатора RMSProp, категориальную функцию перекрестной энтропийной потери и метрики точности.

network.compile(optimizer='rmsprop',
                loss='categorical_crossentropy',                
                metrics=['accuracy'])

Нам нужно использовать метод подгонки для обучения нашей сети. Метод подгонки имеет параметры train_images, train_labels, epochs (количество обучающих повторений), batch_size (количество обучающих выборок).

network.fit(train_images, train_labels, epochs=5, batch_size=128)

Тестовая сеть

Мы оцениваем модель в соответствии с test_images и test_labels. Мыполучаем значения тестовых потерь и тестовой точности.

test_loss, test_acc = network.evaluate(test_images, test_labels)

Мы показываем точность теста в формате с плавающей запятой.

print("test_acc:", test_acc)

Мы показываем точность теста в процентном формате.

print("Test Accuracy: {:.0%}".format(test_acc))

Выход сети

Ссылки