Фон

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

У меня есть младший брат и два младших кузена, которые живут со мной. Я не думаю, что мы так похожи, но наша большая семья, похоже, не может определить, кто есть кто. Это также может быть связано с тем, что все наши имена начинаются с буквы «А» и состоят из четырех букв.

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

План

Мне нужно было много фотографий меня, моего брата и моих двоюродных братьев. Поэтому я сказал своему брату и двоюродным братьям делать 100 снимков себя каждый день в течение 3 дней. Мне также нужно было создать нейронную сеть, которая могла бы классифицировать 4 разных класса.

Выполнение

Пока я ждал фотографий моего кузена, я решил создать двоичный классификатор, который классифицировал бы только изображения моего брата и меня. Набор данных содержал обучающий набор из 70 изображений и тестовый набор из 30 изображений для каждого из нас. После обучения в течение примерно 12 часов я получил точность обучающего набора 99,16% и точность набора тестов 71,67%. Эти результаты ясно показывают переоснащение.

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

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

Чтобы создать CNN для нас четверых, я использовал Keras в качестве классификатора. Я добавил сверточный слой с функцией активации relu (линейный блок выпрямителя) и слой объединения с размером пула (2, 2). Я также добавил еще один сверточный слой и плотные слои для уровня полного соединения с функцией активации softmax. Я использовал алгоритм оптимизации Адама для оптимизатора и категориальную кросс-энтропию для функции потерь.

Получив все изображения от всех, я запустил CNN, который дал точность обучающего набора 100% и точность набора тестов 92,3%. Это феноменальные цифры, учитывая, что я использовал только 300 фотографий каждого из нас. Для этой итерации я разделил 60/40 между обучающим и тестовым наборами, и большее количество изображений помогло уменьшить переобучение.

Заключение

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

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