Модная классификация изображений MNIST

Если вы когда-либо пробовали классифицировать изображения, держу пари, что вашей первой моделью будет классификация рукописных цифр MNIST, что довольно круто. Это считается «Привет, мир» машинного обучения, но если вам нужно что-то новое, у меня есть «Классификация изображений Fashion MNIST». У него тот же уровень сложности, что и у его брата, но что-то другое. Итак, распаковываем.

Ссылка на эту статью на Github: https://github.com/aryan109/medium/blob/master/medium_fashion_MNIST.ipynb

Модный набор данных MNIST

Он состоит из 10 классов различных видов одежды и аксессуаров, таких как обувь, рубашки, брюки и т. д.

Каждое изображение имеет размер 28 * 28 пикселей и черно-белое, звучит ретро? Это одноканальное изображение, значит оно в градациях серого, теперь звучит современно 😉. Если какое-либо изображение будет многоцветным, то оно будет иметь 3 канала, каждый для красного, синего и зеленого. Вот пример изображения из набора данных.

Введение модели

В этом проекте мы собираемся использовать TensorFlow и Keras, поскольку они обеспечивают высокоуровневую реализацию многих утилит машинного обучения. Я предлагаю вам использовать Colaboratory для запуска кода, поскольку в нем предустановлен TensorFlow, а также доступно аппаратное ускорение графического процессора, что поможет нам сократить время обучения для нашей модели.

Введение в коллабораторию

Это онлайн-платформа, которая предоставляет интерфейс, похожий на ноутбук Jupyter, для выполнения Python. Он поддерживает как Python 2, так и Python 3. Как я уже говорил вам ранее, у него есть TensorFlow и аппаратное ускорение GPU.

Это лучшая платформа для начала. Позже вы можете установить TensorFlow на свое устройство.

вот ссылка на Colaboratory: https://colab.research.google.com/notebooks/welcome.ipynb#scrollTo=5fCEDCU_qrC0

Начните с кода

Мы начнем с импорта необходимых библиотек.

import tensorflow as t
import numpy as np
from tensorflow import keras

Загрузка данных и предварительная обработка

Здесь мы переходим к нейронным сетям для нашей модели классификации изображений. Как вы, возможно, знаете, «данные» — это топливо для любой модели, поэтому нам сначала нужно загрузить данные в нашу систему, а затем предварительно обработать их, чтобы сделать их пригодными для использования в нашей модели.

Набор данных Fashion MNIST уже присутствует в Keras, поэтому нам не нужно загружать его извне.

fashion_mnist = keras.datasets.fashion_mnist(train_images,train_labels),(test_images,test_lables)=fashion_mnist.load_data()

Мы делим все данные на два набора «Набор данных для обучения» и «Набор данных для тестирования», каждый из которых далее делится на «Изображения» и «Ярлыки».

Здесь train_images и train_labels будут использоваться для обучения модели, а test_images и test_labels будут использоваться для проверки точности нашей модели.

Мы можем увидеть наши данные, используя этот код:

import matplotlib.pyplot as plt
plt.imshow(train_images[0])

Изменение набора данных

мы не можем загружать изображения непосредственно в модель. нам нужно создать массив изображений NumPy, а затем передать его модели. Его очень легко преобразовать, просто вызвав reshape().

train_images = train_images.reshape(60000,28,28,1)
#60000 is number of train images
test_images = test_images.reshape(10000,28,28,1)
#10000 is number of test images

Нормализация нашего набора данных

Нормализация изображения — типичный процесс обработки изображений, который изменяет диапазон значений интенсивности пикселей. Его обычная цель — преобразовать входное изображение в диапазон значений пикселей, более знакомых или нормальных для органов чувств, отсюда и термин «нормализация».

Для нормализации просто разделим на 255.

train_images,test_images=train_images/225.0,test_images/255

Определение нашей модели

Теперь мы определим нашу модель с помощью Keras. мы будем использовать CNN, подключенную к полностью подключенной DNN.

model = keras.Sequential([
 keras.layers.Conv2D(64,(3,3),activation = ‘relu’,input_shape=(28,28,1)),
 keras.layers.MaxPooling2D(2,2),
 keras.layers.Flatten(),
 keras.layers.Dense(128,activation = ‘relu’),
 keras.layers.Dense(10,activation = ‘softmax’)
])
model.summary()

model.summary() даст нам информацию о модели

просто посмотрите количество обучаемых параметров 1 366 506 !!!

Компиляция модели с оптимизатором и функцией потерь

Оптимизаторы обновляют параметры веса, чтобы минимизировать функцию потерь. Функция потерь действует как руководство по местности, сообщая оптимизатору, движется ли она в правильном направлении, чтобы достичь дна долины, глобального минимума.

Мы будем использовать Адама в качестве оптимизатора и разреженную категориальную кроссэнтропию.

model.compile(optimizer = tf.train.AdamOptimizer(),
loss = ‘sparse_categorical_crossentropy’,
metrics = [‘accuracy’])

Обучение нашей модели

мы будем использовать model.fit() для обучения нашей модели примерно на 50 эпох.

model.fit(train_images,train_labels,epochs = 50)

Оценка нашей модели

теперь мы оценим нашу модель, используя тестовые данные, и выясним, насколько хорошо она будет работать на невидимых данных.

model.evaluate(test_images,test_lables)

потери: 0,26, точность: 91,4%

Этот результат довольно хорош. вы можете получить немного другой результат из-за случайной инициализации параметров модели.