Модная классификация изображений 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%
Этот результат довольно хорош. вы можете получить немного другой результат из-за случайной инициализации параметров модели.