Próbuję zrobić binarny problem klasyfikacji z Keras, przy użyciu metody ImageDataGenerator.flow_from_directory
do generowania partii. Jednak moje klasy są bardzo niezrównoważone, np. Około 8x lub 9x więcej w jednej klasie od drugiej, powodując blokowanie modelu, przewidując tę samą klasę wyjściową dla każdego przykładu. Czy istnieje sposób, aby ustawić flow_from_directory
, aby przereklamować z mojej małej klasy lub pod-próbki z mojej dużej klasy podczas każdej epoki? Na razie właśnie stworzyłem wiele kopii każdego obrazu w mojej mniejszej klasie, ale chciałbym mieć nieco więcej elastyczności.keras flow_from_directory over lub undersample class
Odpowiedz
Przy aktualnej wersji Keras - nie można zrównoważyć zestawu danych za pomocą tylko wbudowanych metod Keras. flow_from_directory
po prostu buduje listę wszystkich plików i ich klas, tasuje je (jeśli to konieczne), a następnie iteruje nad nim.
Ale można zrobić inny trik - poprzez pisanie własnego generatora, które sprawi, że równoważenie wewnątrz python
:
def balanced_flow_from_directory(flow_from_directory, options):
for x, y in flow_from_directory:
yield custom_balance(x, y, options)
Tutaj custom_balance
powinna być funkcja, która dana partia (x, y)
jest równoważenie go i zwracając zrównoważona partia (x', y')
. W przypadku większości aplikacji wielkość partii nie musi być taka sama - ale istnieją pewne dziwne przypadki użycia (np. stateful RNNs) - w których rozmiary partii powinny mieć stały rozmiar).
Można również obliczyć liczbę plików w każdej klasie i normalizują class_weights
files_per_class = []
for folder in os.listdir(input_foldr):
if not os.path.isfile(folder):
files_per_class.append(len(os.listdir(input_foldr + '/' + folder)))
total_files = sum(files_per_class)
class_weights = {}
for i in xrange(len(files_per_class)):
class_weights[i] = 1 - (float(files_per_class[i])/total_files)
print (class_weights)
...
...
...
model.fit_generator(... ,class_weight=class_weights)
proszę dodać przykładowy kod i więcej wyjaśnień –
Edytuj odpowiedź i dodaj ten kod –
- 1. Korzystanie Keras ImageDataGenerator w modelu regresji
- 2. Pobierz etykiety klas z funkcjonalnego modelu Keras
- 3. Keras + IndexError
- 4. Używanie inteligentnych wskaźników w struct lub class
- 5. typedef i enum lub enum class
- 6. MIDI Over Bluetooth
- 7. Debugowania keras warstwa pośrednia lub zmienne obiektywne z tensorflow
- 8. Keras Funkcje ekstraktu VGG
- 9. C++ over wątku
- 10. Egistential Quantification over Values
- 11. Błąd Redis Over
- 12. Mojolicious over HTTPS
- 13. Behat over Cucumber w PHP
- 14. Wielowątkowe modelowanie TensorFlow/Keras
- 15. TimeDistributed vs. TimeDistributedDense Keras
- 16. Uzyskanie przewidywania w Keras
- 17. autoencoder keras not converging
- 18. Wdrożenie Siamese NN Keras
- 19. Keras flowFromDirectory pobiera nazwy plików podczas ich generowania
- 20. Websockets over HTTPS 403 Forbidden
- 21. Keras: jak zapisać historię szkoleniowych
- 22. Czy wątki Keras są bezpieczne?
- 23. Keras zamieszanie dotyczące liczby warstw
- 24. Hover over polygons (wyświetlanie tekstu)
- 25. Hover Over efekt w NSCollectionView
- 26. Loop Over Array w JavaScript
- 27. Jak mogę użyć SUM() OVER()
- 28. ROW_NUMBER() bez over w SQL
- 29. Czy istnieje pętla "start-over"?
- 30. sessionStorage over localStorage w PhoneGap
dzięki To wydaje się być ok, co potrzebne – George
ktoś może utworzyć skrypt w pełni pracy w oparciu o to, aby rozwinąć? Potrzebuję bardziej konkretnego przykładu custom_balance, itp. – mikal94305