Почему иногда модели CNN предсказывают только один класс из всех остальных?

Jan 17 2021

Я относительно новичок в сфере глубокого обучения, поэтому, пожалуйста, не будь таким злым, как Reddit! Это похоже на общий вопрос, поэтому я не буду приводить здесь свой код, поскольку он не кажется необходимым (если это так, вот ссылка на colab )

Немного о данных: Вы можете найти исходные данные здесь . Это уменьшенная версия исходного набора данных размером 82 ГБ.

Как только я обучил свой CNN этому, он каждый раз предсказывает «Нет диабетической ретинопатии» (Нет DR), что дает точность 73%. Причина в том, что это просто огромное количество изображений без DR или что-то еще? Не имею представления! У меня есть 5 классов для предсказания ["Mild", "Moderate", "No DR", "Proliferative DR", "Severe"].

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

Ответы

1 Ivan Jan 18 2021 at 00:21

Я собирался прокомментировать:

Более строгим подходом было бы начать измерение баланса вашего набора данных: сколько изображений каждого класса у вас есть? Скорее всего, это даст ответ на ваш вопрос.

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

Быстрый расчет: 25,812 / 35,126 * 100 = 73%. Это интересно, вы сказали, что у вас точность 74%. Ваша модель учится на несбалансированном наборе данных с избыточным представлением первого класса, 25k/35kэто огромно. Моя гипотеза заключается в том, что ваша модель продолжает предсказывать первый класс, что означает, что в среднем вы получите точность в 74%.

Что вам нужно сделать, так это сбалансировать свой набор данных. Например, позволяя только 35,126 - 25,810 = 9,316примерам из первого класса появляться в эпоху. Более того, сбалансируйте свой набор данных по всем классам, чтобы каждый класс появлялся только n раз каждый за эпоху.

2 Shai Jan 18 2021 at 04:30

Как уже отмечал Иван, у вас проблема классового дисбаланса. Это можно решить с помощью:

  1. Жесткий отрицательный майнинг в режиме онлайн: на каждой итерации после вычисления потерь вы можете отсортировать все элементы в пакете, принадлежащие классу «без DR», и оставить только худшие k. Затем вы оцениваете градиент, используя только эти худшие k, и отбрасываете все остальные.
    см., например:
    Абхинав Шривастава, Абхинав Гупта и Росс Гиршик Обучающие детекторы объектов на основе региона с онлайн- анализом жесткого примера (CVPR 2016)

  2. Фокусная потеря: модификация «ванильной» перекрестной потери энтропии может быть использована для решения проблемы дисбаланса классов.


Связанные сообщения this и this .