Dlaczego czasami modele CNN przewidują tylko jedną klasę spośród wszystkich innych?

Jan 17 2021

Jestem stosunkowo nowy w świecie głębokiego uczenia się, więc proszę, nie bądź tak złośliwy jak Reddit! Wydaje się, że jest to ogólne pytanie, więc nie będę tu podawać swojego kodu, ponieważ nie wydaje się to konieczne (jeśli tak, tutaj jest link do colab )

Trochę o danych: oryginalne dane można znaleźć tutaj . Jest to zmniejszona wersja oryginalnego zbioru danych o wielkości 82 GB.

Kiedy wyszkoliłem w tym zakresie mój CNN, za każdym razem przewiduje on „brak retinopatii cukrzycowej” (brak DR), co prowadzi do dokładności 73%. Czy powodem tego jest po prostu ogromna liczba obrazów bez DR, czy coś innego? Nie mam pojęcia! 5 klas, które mam do przewidywania to ["Mild", "Moderate", "No DR", "Proliferative DR", "Severe"].

To prawdopodobnie po prostu zły kod, miałam nadzieję, że możecie pomóc

Odpowiedzi

1 Ivan Jan 18 2021 at 00:21

Już miałem skomentować:

Bardziej rygorystycznym podejściem byłoby rozpoczęcie pomiaru bilansu zbioru danych: ile masz obrazów z każdej klasy? To prawdopodobnie da odpowiedź na twoje pytanie.

Ale nie mogłem powstrzymać się od spojrzenia na link, który podałeś. Kaggle już daje przegląd zbioru danych:

Szybka kalkulacja: 25,812 / 35,126 * 100 = 73%. To ciekawe, powiedziałeś, że masz dokładność wynoszącą 74%. Twój model uczy się na niezrównoważonym zbiorze danych, z nadreprezentowaną pierwszą klasą, 25k/35kjest ogromny. Moja hipoteza jest taka, że ​​model ciągle przewiduje pierwszą klasę, co oznacza, że ​​średnio otrzymasz dokładność 74%.

Co należy zrobić, to zrównoważyć zestawu danych. Na przykład zezwalając, by 35,126 - 25,810 = 9,316przykłady z pierwszej klasy pojawiały się tylko w danej epoce. Co więcej, zrównoważyć zestaw danych ze wszystkimi klasami, tak aby każda klasa pojawiła się tylko n razy w każdej epoce.

2 Shai Jan 18 2021 at 04:30

Jak już wspomniał Ivan, masz problem z nierównowagą klas. Można to rozwiązać poprzez:

  1. Wydobywanie negatywnych wyników online: w każdej iteracji po obliczeniu straty można posortować wszystkie elementy w pakiecie należące do klasy „bez DR” i zachować tylko te najgorsze k. Następnie szacujesz gradient używając tylko tych gorszych k i odrzucasz całą resztę.
    patrz np .:
    Abhinav Shrivastava, Abhinav Gupta i Ross Girshick Training Region-based Detectors with Online Hard Example Mining (CVPR 2016)

  2. Ogniskowa utrata: modyfikacja „waniliowej” krzyżowej utraty entropii może być użyta do rozwiązania problemu nierównowagi klas.


Powiązane posty this i this .