Ich arbeite an einem Faltungsnetzwerk zur Bildklassifizierung. Der Trainingsdatensatz ist zu groß, um auf meinen Computerspeicher geladen zu werden (4 GB). Außerdem muss ich eine Erweiterung versuchen, um die Klassen auszugleichen.
Ich benutze keras
. Ich habe viele Beispiele untersucht, aber keine Lösung für mein Problem gefunden. Ich denke darüber nach, die Parameter des model.fit
Aufrufs durch Übergeben einer Funktion oder eines Generators zu ersetzen, der das 'Batching' ausführt. Diese Funktion werde ich entwerfen, um sie von der Festplatte zu importieren und eine Erweiterung anzuwenden.
Ich habe keine Ahnung, wie ich das umsetzen soll. Irgendwelche Vorschläge?
python
keras
training
convolution
Lernen ist ein Chaos
quelle
quelle
Antworten:
Während Sie an der Bildklassifizierung arbeiten und auch eine Datenerweiterung implementieren möchten, können Sie die beiden kombinieren UND die Stapel mithilfe der mächtigen 'ImageDataGenerator'-Klasse direkt aus einem Ordner laden.
Schauen Sie sich die ausführliche Dokumentation an!
Ich werde das Beispiel von diesem Link nicht kopieren und einfügen, aber ich kann die Schritte skizzieren, die Sie durchlaufen:
Erstellen Sie die Generatorklasse:
data_gen = ImageDataGenerator()
Wenn Sie möchten, dass die Erweiterung im laufenden Betrieb für Sie durchgeführt wird, kann dies beim Erstellen der Klasse angegeben werden:
data_gen = ImageDataGenerator(samplewise_center=True, ...)
Wenn Sie Erweiterungsprozesse verwenden, für die einige Statistiken zum Dataset erforderlich sind, z. B. eine merkmalweise Normalisierung (nicht stichprobenweise), müssen Sie den Generator vorbereiten, indem Sie einige Ihrer Daten anzeigen :
data_gen.fit(training_data)
. Diesefit
Methode berechnet einfach Dinge wie den Mittelwert und die Standardabweichung vor, die später zur Normalisierung verwendet werden.Der Generator geht in die
fit_generator
Methode des Modells über , und wir nennen dieflow_from_directory
Methode des Generators:model.fit_generator(training_data=data_gen.flow_from_directory('/path/to/folder/'), ...)
Sie können mit ImageDataGenerator auch einen separaten Generator für Ihre Validierungsdaten erstellen, in dem Sie die Erweiterung dann nicht anwenden sollten, damit Validierungstests an realen Daten durchgeführt werden, um ein genaues Bild der Modellleistung zu erhalten.
In jedem Fall laufen diese Generatoren theoretisch für immer und generieren Stapel aus Ihrem Ordner. Daher empfehle ich die Verwendung einer Rückruffunktion von Keras, um zu stoppen, wenn bestimmte Kriterien erfüllt sind. Weitere Informationen finden Sie in der Dokumentation zur EarlyStopping-Klasse . Sie können dies auch manuell tun, aber Keras macht es sehr einfach!
Wenn Sie eine feinkörnige Steuerung wünschen, können Sie alle oben genannten Schritte manuell ausführen, indem Sie genügend Proben von der Festplatte für einen einzelnen Stapel laden, eine Erweiterung durchführen und dann die
model.train_on_batch()
Methode ausführen . Wenn Sie sich mit den Details befassen möchten, lernen Sie am besten zuerst die Keras-Methode und fahren dann mit Ihren eigenen detaillierten Modellen fort, die Tensorflow nach Bedarf kämmen. Die beiden können sehr gut zusammen verwendet werden!quelle
flow_from_directory
Methode