2017-01-14 8 views
8

W Kerasbilansowania nierówne zestawu danych z generatora Keras obrazu

ImageDataGenerator 

mogą być wykorzystywane do „Generowanie partii danych tensor obrazu z powiększania danych w czasie rzeczywistym” (https://keras.io/preprocessing/image/)

Tutorial na

https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html

pokazuje, w jaki sposób mały, ale zbalansowany zestaw danych może zostać rozszerzony za pomocą ImageDataGenerator. Czy istnieje prosty sposób wykorzystania tego generatora do wzmocnienia mocno niezrównoważonego zbioru danych, tak aby wynikowy wygenerowany zestaw danych był zrównoważony?

Odpowiedz

11

To nie byłoby standardowe podejście do radzenia sobie z niezbalansowanymi danymi. Nie sądzę, że byłoby to naprawdę uzasadnione - znacząco zmieniałbyś rozkłady twoich klas, gdzie mniejsza klasa jest teraz znacznie mniej zmienna. Większa klasa miałaby bogatą odmianę, a mniejsza - wiele podobnych obrazów z małymi transformacjami afinicznymi. Żyliby na znacznie mniejszym obszarze w przestrzeni obrazu niż w klasie większościowej.

Im bardziej standardowe podejście byłoby:

  • argument class_weights w model.fit, których można użyć, aby dowiedzieć się więcej na model z klasy mniejszościowej.
  • zmniejszenie rozmiaru klasy większości.
  • akceptowanie nierównowagi. Głębokie uczenie się może sobie z tym poradzić, potrzebuje po prostu dużo więcej danych (rozwiązanie do wszystkiego, naprawdę).

Pierwsze dwie opcje są naprawdę hackami, które mogą zaszkodzić twojej zdolności radzenia sobie z rzeczywistymi (niezrównoważonymi) danymi. Naprawdę nie rozwiązuje to problemu niskiej zmienności, która jest nieodłącznie związana z posiadaniem zbyt małej ilości danych. Jeśli aplikacja do zbioru danych w świecie rzeczywistym po szkoleniu modelowym nie jest problemem i chcesz uzyskać dobre wyniki na danych, które posiadasz, wtedy te opcje są w porządku (i dużo łatwiejsze niż tworzenie generatorów dla pojedynczej klasy).

Trzecia opcja to właściwa droga, jeśli masz wystarczającą ilość danych (na przykład, recent paper from Google about detecting diabetic retinopathy osiągnęła wysoką dokładność w zbiorze danych, w którym pozytywne przypadki wynosiły od 10% do 30%).

Jeśli naprawdę chcesz wygenerować różnorodne obrazy rozszerzone dla jednej klasy nad drugą, najprawdopodobniej najłatwiej byłoby zrobić to w procesie wstępnego przetwarzania. Zrób zdjęcia klasy mniejszości i wygeneruj kilka rozszerzonych wersji, i po prostu nazwij je całą częścią danych. Jak mówię, to wszystko jest dość hacky.

+0

Dziękuję bardzo za podzielenie się wglądem. Zajrzę do tego papieru google. – user1934212

Powiązane problemy