Моя первая нейронка, которая… споткнулась об очевидное
Ребята, я тут на днях кодил небольшой проект на PyTorch. Задача казалась простой: научить модель распознавать котиков и собачек на фото. Ну, типа, классика жанра, да?
Сначала все шло как по маслу. Данные подготовил, архитектуру выбрал (взял стандартныйResNet, куда уж проще), начал обучать. Ждал, пока loss пойдет вниз, accuracy вверх. Все ровно, красиво.
И вот наступает момент тестирования. Показываю модели фотку моего рыжего кота, который ну чисто эталон кошачьей породы. И что вы думаете? Модель уверенно заявляет: "Это собака". Я сижу, глаза выпучил. Ну ладно, думаю, может, ракурс неудачный. Даю другую фотку. Та же история.
Потом врубил режим отладки и начал смотреть, где же моя умная машина ошиблась. И тут я офигел. Оказалось, где-то в середине обучения датасет немного перемешался, и на какой-то эпохе случайно ей попалось так много фоток именно моего кота, но помеченных как "собака", что она просто запомнила: "А, вот этот рыжий пушистик – это собака". Ну, типа, переобучение на одном примере, да еще и с неправильным лейблом. Мораль: даже самые крутые нейронки могут быть иногда тупее табуретки, если data pipeline криво настроен. Вот такая вот история, ахах).