Автор оригинала: Aryan Pegwar.
Если вы когда-нибудь пробовали классификацию изображений, то держу пари, что вашей первой моделью будет рукописная классификация цифр MNIST, что довольно круто. Это считается “Приветом миру” машинного обучения, но если вы хотите что-то новое, у меня будет “Мода MNIST Image Classification”. Он имеет тот же уровень сложности, что и его братан, но что-то другое. Так что давайте распакуем его.
Ссылка на Github для кода, используемого в этом посте: Code
Набор данных Fashion MNIST
Он состоит из 10 классов различных видов одежды и аксессуаров, таких как обувь, рубашки, брюки и т. Д. Каждое изображение имеет размер 28*28 пикселей и черно-белое, звучит ретро? Это одноканальное изображение, значит, оно в оттенках серого, теперь звучит современно. Если какое-либо изображение будет многоцветным, то оно будет иметь 3 канала, каждый для красного синего и зеленого. Вот пример изображения из набора данных.
Введение модели
В этом проекте мы будем использовать TensorFlow и Karas, поскольку они обеспечивают высокоуровневую реализацию многих утилит машинного обучения. Я предлагаю вам использовать Colaboratory для запуска кода, так как он имеет предустановленный TensorFlow, а также аппаратное ускорение GPU, которое поможет нам сократить время обучения нашей модели.
Вступление к коллаборационизму
Это онлайн-платформа, которая предоставляет Jupyter notebook-подобный интерфейс для выполнения python. Он поддерживает как Python2, так и Python 3. Как я уже говорил вам ранее, он имеет аппаратное ускорение TensorFlow и ha GPU. Это лучшая платформа для начала работы. Позже вы можете установить TensorFlow на свое собственное устройство. вот ссылка на Коллаборацию: Коллаборация
Начните с кода
Начнем с импорта необходимых библиотек.
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% Этот результат довольно хорош. вы можете получить несколько иной результат из-за случайной инициализации параметров модели.