Рубрики
Без рубрики

Как НАЧАТЬ РАБОТУ С машинным обучением

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

Автор оригинала: Aryan Pegwar.

Если вы когда-нибудь пробовали классификацию изображений, то держу пари, что вашей первой моделью будет рукописная классификация цифр MNIST, что довольно круто. Это считается “Приветом миру” машинного обучения, но если вы хотите что-то новое, у меня будет “Мода MNIST Image Classification”. Он имеет тот же уровень сложности, что и его братан, но что-то другое. Так что давайте распакуем его.

Ссылка на Github для кода, используемого в этом посте: Code

Набор данных Fashion MNIST

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

1*4_BnzTOdG0_mvPWImzwGgg.png

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

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

Вступление к коллаборационизму

Это онлайн-платформа, которая предоставляет Jupyter notebook-подобный интерфейс для выполнения python. Он поддерживает как Python2, так и Python 3. Как я уже говорил вам ранее, он имеет аппаратное ускорение TensorFlow и ha GPU. Это лучшая платформа для начала работы. Позже вы можете установить TensorFlow на свое собственное устройство. вот ссылка на Коллаборацию: Коллаборация

1*l-QZ_wlzRXXerib7iF5bZg.png

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

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

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])

это будет выход

1*4_BnzTOdG0_mvPWImzwGgg.png

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

мы не можем подавать изображения непосредственно в модель. нам нужно создать массив 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

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

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

1*7l057gW-uMuZfEF5zXnIvg.png

Для нормализации мы просто разделим на 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 !!!

1*UuYyRupQMxR6L2Fcy0kOsQ.png

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

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

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

1*9Zmrb0Z3q3o-lsp53v211g.png