Почему иногда модели CNN предсказывают только один класс из всех остальных?
Я относительно новичок в сфере глубокого обучения, поэтому, пожалуйста, не будь таким злым, как Reddit! Это похоже на общий вопрос, поэтому я не буду приводить здесь свой код, поскольку он не кажется необходимым (если это так, вот ссылка на colab )
Немного о данных: Вы можете найти исходные данные здесь . Это уменьшенная версия исходного набора данных размером 82 ГБ.
Как только я обучил свой CNN этому, он каждый раз предсказывает «Нет диабетической ретинопатии» (Нет DR), что дает точность 73%. Причина в том, что это просто огромное количество изображений без DR или что-то еще? Не имею представления! У меня есть 5 классов для предсказания ["Mild", "Moderate", "No DR", "Proliferative DR", "Severe"]
.
Вероятно, это просто плохой код, надеялся, что вы, ребята, сможете помочь
Ответы
Я собирался прокомментировать:
Более строгим подходом было бы начать измерение баланса вашего набора данных: сколько изображений каждого класса у вас есть? Скорее всего, это даст ответ на ваш вопрос.
Но не мог удержаться от просмотра ссылки, которую вы дали. Kaggle уже дает вам обзор набора данных:
Быстрый расчет: 25,812 / 35,126 * 100 = 73%
. Это интересно, вы сказали, что у вас точность 74%
. Ваша модель учится на несбалансированном наборе данных с избыточным представлением первого класса, 25k/35k
это огромно. Моя гипотеза заключается в том, что ваша модель продолжает предсказывать первый класс, что означает, что в среднем вы получите точность в 74%
.
Что вам нужно сделать, так это сбалансировать свой набор данных. Например, позволяя только 35,126 - 25,810 = 9,316
примерам из первого класса появляться в эпоху. Более того, сбалансируйте свой набор данных по всем классам, чтобы каждый класс появлялся только n раз каждый за эпоху.
Как уже отмечал Иван, у вас проблема классового дисбаланса. Это можно решить с помощью:
Жесткий отрицательный майнинг в режиме онлайн: на каждой итерации после вычисления потерь вы можете отсортировать все элементы в пакете, принадлежащие классу «без DR», и оставить только худшие
k
. Затем вы оцениваете градиент, используя только эти худшие k, и отбрасываете все остальные.
см., например:
Абхинав Шривастава, Абхинав Гупта и Росс Гиршик Обучающие детекторы объектов на основе региона с онлайн- анализом жесткого примера (CVPR 2016)Фокусная потеря: модификация «ванильной» перекрестной потери энтропии может быть использована для решения проблемы дисбаланса классов.
Связанные сообщения this и this .