2017-04-17 4 views
7

ich dieses Problem für einige Tage war verwirrt ...Was den Unterschied zwischen „samples_per_epoch“ und „steps_per_epoch“ in fit_generator ist

Meine Frage ist, warum die Trainingszeit so großen Unterschied zwischen dem, habe ich den batch_size gesetzt für meinen Generator "1" und "20" sein.

Wenn ich die batch_size , die Trainingszeit von 1 Epoche etwa 180 ~ 200 sec zu sein. Wenn ich die batch_size , die Trainingszeit von 1 Epoche sein beträgt ca. 3000 ~ 3200 sec.

Allerdings scheint dieser schreckliche Unterschied zwischen diesen Trainingszeiten abnormal zu sein ..., da es das umgekehrte Ergebnis sein sollte: batch_size = 1, Trainingszeit -> 3000 ~ 3200 sek. Batch_size = 20, Trainingszeit -> 180 ~ 200 sek.

Der Eingang meines Generators ist nicht der Dateipfad, sondern die Nummernfelder, die bereits in den Speicher über den Aufruf von "np.load()" geladen wurden. Also ich denke, das I/O-Trade-off-Problem existiert nicht.

Ich verwende Keras-2.0.3 und mein Backend ist tensorflow-gpu 1.0.1

Ich habe das Update von dieser PR fusionierte gesehen, aber es scheint, dass diese Änderung nicht alles beeinflussen wird bei alle. (die Verwendung ist genau die gleiche mit Original)

Die link hier ist der Kern meines selbstdefinierten Generators und der Teil meines fit_generator.

Kann mir jemand helfen, dieses Problem zu erklären? Vielen Dank :)

Antwort

11

Wenn Sie fit_generator verwenden, ist die Anzahl der für jede Epoche verarbeiteten Stichproben batch_size * steps_per_epochs. Von der Keras Dokumentation für fit_generator: https://keras.io/models/sequential/

steps_per_epoch: Gesamtzahl der Schritte (Chargen von Proben) vom Generator zu erhalten, bevor eine Epoche beendet und startet die nächste Epoche zu erklären. Es sollte normalerweise gleich der Anzahl der eindeutigen Beispiele Ihres Datasets dividiert durch die Stapelgröße sein.

Dies unterscheidet sich von dem Verhalten von "fit", wo zunehmende Batch_size in der Regel Dinge beschleunigt.

Zusammenfassend, wenn Sie Batch_size mit fit_generator erhöhen, sollten Sie steps_per_epochs um denselben Faktor verringern, wenn die Trainingszeit gleich oder niedriger bleiben soll.

+0

Danke für die Antwort! Ich denke, mein Original ist dasselbe (steps_per_epochs sollte dem # total samples/batch_size entsprechen). Aber die gemischte Pull-Anfrage verwirrte mich sehr ... OK, ich habe es endlich! Vielen Dank! – HappyStorm

+2

Ich sehe nicht die Batch_size irgendwo in der Fit_generator() Routine angegeben. Wo also leitet die Batch_size ab? Definieren sie charge_size als (Länge Ihres Generators)/(steps_per_epoch)? Sie sagen, es ist "in der Regel gleich", aber das würde bedeuten, dass es genau gleich ist. –

Verwandte Themen