Задача классификации. Сможет ли нейросеть отличить собаку от кошки?
В этой статье я расскажу о том, как написать нейросеть, способную обрабатывать изображения и классифицировать их по признакам. Для хорошей визуализации и наглядности будем делать это на примере фотографий собак и кошек, но можно использовать и любой другой подготовленный набор данных.
Прежде всего нам предстоит разделить этот набор на 3 категории: обучающая, тестовая и проверочная. Первая предназначена для обучения модели. Рекомендуется искусственно увеличивать этот набор, фрагментируя, переворачивая или отзеркаливая изображения.
Это очень полезно для обучения, так как в таком случае увеличивается набор обучающей выборки и более того, нейросеть лучше выделяет значимые метки, что снижает переобучение. Для этого мы использовали слои, описанные ниже.
Следующим шагом является подготовка набора данных, для загрузки в нейронную сеть. Все изображения должны иметь одинаковый размер и находиться в одном цветовом пространстве. Как правило, используется пространство RGB. В нем каждый пиксель имеет значения, лежащие в диапазоне от 0 до 255. Для обучения нужно использовать как можно меньшие значения, поэтому значения каждого пикселя делятся на 255, чтобы в итоге они лежали в пределе от 0 до 1.
Теперь можно переходить к созданию и обучению модели
В процессе обучения модель оценивает точность работы после каждой эпохи. Делает это она на проверочных данных. Так как после каждой эпохи этот набор не меняется, нейросеть запоминает их и к последней эпохе оценка становится необъективна. Последующая проверка на тестовых данных показывает реальную точность работы обученной модели. Обычно она отличается на 5-7%. Как видно из графика ниже наш случай не исключение. При этом точность работы все равно довольно высокая.
Теперь необходимо сохранить обученную модель.
Далее протестируем модель на реальном наборе данных. Код выводит нам несколько фотографий и ярлык, который ожидает увидеть на этом изображении. Давайте передадим небольшую коллекцию фото и оценим результат работы программы. Код представлен ниже.
Как видно из фото выше, программа работает довольно точно. Всего лишь в одном изображении она ошиблась и нашла собаку вместо кошки. Но стоит признать, что фотография и правда довольно тяжелая.
Таким образом, можно подвести итог, что нейросеть по классификации изображений работает довольно точно и ее можно использовать в будущих проектах.