«От теории к практике» — Нейронная сеть распознавания изображений силами TensorFlow

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Здравствуйте. В двух прошлых статья я рассказывал Вам об одних из основных вещах из сферы Machine Learning. Были затронуты такие вещи как модель для классификации на архитектуре «Перцептрон», а так же был подробно описан метод с помощью которого мы приводим ошибки во время обучения модели к минимуму — «Градиентный спуск». В этой статье будет построена модель на ЯП Python с использованием тяжеловесной и одной из самой известных библиотек, которую используют в машинном обучение — TensorFlow.

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

Задача: Построить и обучить модель для задачи классификации — распознавание одежды.

Инструменты: Мы будем использовать по стандарту ЯП Python 3.0, а из библиотек нам понадобиться: Matplotlib, Numpy, Keras ну и конечно же сам TF. Среду для разработки Вы можете определить сами из своих предпочтений. Я буду использовать Jupyter Notebook — мощная графическая веб-оболочка для разработки, а так же быстрой проверки кода на языке Python.

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

Модуль 1: Начало разработки

Как и было сказано ранее, мы будем разрабатывать модель для задачи классификации. У нас сразу имеется готовый DataFrame — он включает в себя 70 000 тысяч картинок с размерностью 28x28 pix, а так же все изображения находятся в 10 оттенках серого цвета.

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

У нас имеется 70 000 тысяч картинок — 60 000 тысяч мы будем использовать для обучения модели, остальные 10 000 для проверки.

Подключаем библиотеки и загружаем данные

Изображения представляют собой NumPy массивы 28 x 28, значения пикселей которых находятся в диапазоне от 0 до 255. Метки (labels) представляют собой массив целых чисел от 0 до 9. Они соответствуют классу одежды.

У нас имеется 9 классов одежды и следующим нашим этапом будет это приписать им наименования:

Модуль 2: Исследование данных

Перед подготовкой модели, мы должны проработать наши данные. Предварительно проверим изображение:

Заметим то, что значение пикселей находиться в диапазоне от 0 до 250 (по факту 0 — 255)

Следующее что нам надо сделать, это масштабировать изображения от 0 до 1:

Отобразим первые модели из нашего набора данных:

Первые картинки уже со своими названиями

Основным строительным блоком нейронной сети является слой. Большая часть глубокого обучения состоит в объединении простых слоев. Большинство слоев, таких как tf.keras.layers.Dense, имеют параметры, которые изучаются во время обучения.

Первый слой в сети tf.keras.layers.Flatten преобразует формат изображений из 2d-массива (28 на 28 пикселей) в 1d-массив из 28 * 28 = 784 пикселей. У этого слоя нет параметров для изучения, он только переформатирует данные.

Следующие два слоя это tf.keras.layers.Dense. Это плотно связанные или полностью связанные нейронные слои. Первый слой Dense содержит 128 узлов (или нейронов). Второй (и последний) уровень — это слой с 10 узлами tf.nn.softmax, который возвращает массив из десяти вероятностных оценок, сумма которых равна 1. Каждый узел содержит оценку, которая указывает вероятность того, что текущее изображение принадлежит одному из 10 классов.

Модуль 3: Интерпретация модели

Все почти готово перед тем, как модель можно будет обучить. Нам осталось добавить следующие три параметра:

— Оптимизатор: это то, как модель обновляется на основе данных, которые она видит, и функции потери

— Функция потерь: измеряет насколько точная модель во время обучения

— Метрики: используется для контроля за этапами обучения и тестирования

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

Даем ей задачу сделать прогнозирование по тренировочному массиву, а затем идет проверка соотношения меток из массива меток и изображений.

Для начала обучения модели вызовем метод fit:

Обучение модели и пройденные эпохи

Как ы видим, тут отображены параметры потерь (loss) и параметры точности (acc).

Наши потери варьируются в диапазоне от 0.29 до 0.50, в то время как точность достигает в среднем 0.88 (88%)

Сравним поведение нашей модели на тестовых данных:

Оценка точности ? 0.90 (90%)

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

Предсказание представляет собой массив из 10 чисел. Они описывают «уверенность» модели в том, что изображение соответствует каждому из 10 разных предметов одежды. Мы можем видеть, какая метка имеет наибольшее доверительное значение.

Модуль 4. Визуализация данных

Напишем две функции для визуализации:

Посмотрим на изображение под индексом 0, а так же на выявим предсказывание и массив предсказаний.

Построим несколько изображений с их прогнозами. Правильные метки прогноза — синие, а неправильные метки прогноза — красные. Обратите внимание, что это может быть неправильно, даже когда модель очень уверена.

Далее используем обученную модель, чтобы сделать предсказание об одном изображении.

Модели tf.keras оптимизированы для того, чтобы делать прогнозы на пакеты (batch) или коллекции (collection). Поэтому, хотя мы используем одно изображение, нам нужно добавить его в список.

predictions_single — прогноз нашего одиночного изображения

Последнее что мы с Вами сделаем, это построим график, чтобы визуализировать предсказание:

Как мы видим, модель все так же предсказывает метку 9.

Поздравляю, теперь у Вас есть готовая модель, которая отлично справляется с задачей классификации. Спасибо за то, что уделили время и удачи Вам в постижение сферы Machine Learning :)

Источник: m.vk.com

Комментарии: