Классификатор, как следует из названия, классифицирует вещи, будь то изображения или любой другой тип данных. В этой статье я шаг за шагом разработаю классификатор изображений, который будет классифицировать изображения рукописных цифр (0–9). Я буду использовать keras (с бэкендом tensorflow)

Импорт набора данных

Keras поставляется с несколькими наборами данных. мы собираемся использовать набор данных mnist, он содержит 60000 обучающих изображений и 10000 тестовых изображений или рукописных цифр (0–9). Сначала мы загрузим набор данных и нормализуем значения массива изображений, которые будут переданы в модель keras.

Изображения на самом деле представляют собой массивы 28x28. нам нужно превратить элементы массива в числа с плавающей запятой и нормализовать значения от 0 до 1, потому что, если мы этого не сделаем, значения активации станут слишком большими, и веса могут расходиться, разрушая всю модель.

визуализировать

Давайте посмотрим некоторые изображения из набора данных

Если вы хотите визуализировать данные из тестовых изображений, просто замените x_train и y_train на x_test и y_test соответственно.

Модель

Теперь нам нужно построить нашу модель. Существует два способа построения модели: один — использовать функцию Последовательно, а другой — Функциональный API. Я не люблю использовать последовательную, потому что через некоторое время, когда мы начинаем строить сложную модель, мы не можем использовать функцию Sequential. Так что лучше начать с Functional API.

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

Я использовал оптимизатор Адама со скоростью обучения по умолчанию и categorical_crossentropy в качестве функции потерь.

Примечание. В последнем слое должно быть 10 нейронов, так как каждый нейрон представляет число от 0 до 9.

Обучение модели

Прежде чем мы сможем обучить нашу модель, нам нужно немного обработать данные. Мы превратим это изображение 28x28 в одномерный массив из 784 элементов. Мы получаем выходные метки в виде чисел из набора данных, нам нужно преобразовать числа в 10-значный двоичный класс.

0 становится [1,0,0,0,0,0,0,0,0,0]
1 становится [0,1,0,0,0,0,0,0,0,0]

9 становится [0,0,0,0,0,0,0,0,0,1]
Теперь вы понимаете, зачем нам понадобилось 10 нейронов на выходном слое .

Теперь мы можем обучить наш классификатор.

Я смог получить точность 98% при обучении 50 эпох.

Тестирование

давайте посмотрим, наша модель получила точность 98%, и есть 10000 тестовых изображений, поэтому есть около 200 изображений, которые модель не смогла правильно классифицировать. Сначала мы покажем первые 10 тестовых изображений, затем увидим первые 10 ошибочно предсказанных изображений.

Теперь визуализируйте первые 10 ошибочно предсказанных картинок.

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

Вывод

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

Я не эксперт по ИИ, я просто студент инженерного факультета, который интересуется ИИ. Эта статья предназначена для того, чтобы помочь другим людям и укрепить мое собственное понимание. Если у вас есть какие-либо вопросы или предложения, не стесняйтесь спрашивать.