Эта статья проведет вас через задачу классификации изображений с помощью Tensorflow, следуя общему рабочему процессу машинного обучения (ML) для решения проблем. Он дополняет мое занятие по этой теме. Слайды и код для примера, упомянутого в статье, связаны в конце. Я рекомендую открыть код во вкладке рядом!

Классификация изображений

Классификация изображений относится к задаче присвоения метки изображению. Это одна из самых распространенных проблем машинного обучения в реальном мире. Проблема классификации может быть двоичной, многоклассовой или многоклассовой, в зависимости от того, сколько возможных ярлыков существует для изображений.

Двоичная классификация

Назначьте одну метку из двух возможных.

Мультиклассовая классификация

Назначьте одну метку из более чем двух возможных меток.

Многоканальная классификация

Присвойте более одной метки из более чем двух возможных меток.

Рабочий процесс машинного обучения

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

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

Определите проблему

Прежде чем мы попытаемся решить проблему машинного обучения, мы должны ее четко определить. Это не только дает нам важные идеи для решения проблем, но также экономит время, деньги и ресурсы в будущем. Постановка проблемы для нашего примера кода:

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

Сбор данных

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

Предварительная обработка данных

Необработанные данные обычно не могут быть переданы напрямую в нейронную сеть. Его нужно обработать. Предварительная обработка в нашем примере будет включать нормализацию (для входных данных) и однократное кодирование (для выходных данных). В первом случае каждое значение в наборе данных делится на максимальное значение. Это поможет обеспечить бесперебойную работу процесса оптимизации. Последнее - это уловка для преобразования текстовых данных в числа для передачи их в нейронную сеть. Он включает преобразование категориальных текстовых значений в тензоры, содержащие один один по индексу, который соответствует значению текста. См. Иллюстрацию ниже:

Выбор сети

Далее мы выбираем нашу сетевую архитектуру. По сути, нейронные сети состоят из узлов и слоев. Узел - это вычислительная единица с одним или несколькими взвешенными входными соединениями, передаточной функцией, которая изменяет входы, и выходным соединением. Затем узлы объединяются в слои для создания сети.

Слои могут быть нескольких типов в зависимости от характера проблемы, которую мы пытаемся решить:

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

Скомпилировать

Далее идет этап компиляции, на котором мы выбираем функцию потерь, оптимизатор и метрику оценки.

Функция потерь

Функция потерь - это математическая функция, отражающая наш успех в решении поставленной задачи. Мы «минимизируем» для сети изучение отображения от входа к выходу, процесс, называемый оптимизацией. Минимизация означает нахождение значений параметров функции потерь, которые производят небольшое выходное значение (потерю). См. График функции потерь ниже. Значения параметров в темно-синих областях могут быть кандидатами на хорошие значения.

Оптимизатор

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

Оценочный показатель

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

Fit / Train

Наконец, обучаем модель. Мы должны присмотреть за процессом обучения, чтобы убедиться, что наша модель правильно соответствует данным. При обучении модели возникают две распространенные проблемы: недостаточная подгонка (высокая погрешность) и переобучение (высокая дисперсия).

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

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

Предсказывать

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

Заключение

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

Спасибо, что дочитали до конца! Удачного обучения!