2016-07-12 16 views
32

In den meisten Modellen gibt es einen Schritte Parameter, der die Anzahl der Schritte angibt, über die Daten auszuführen. Aber ich sehe in den meisten praktischen Anwendungen, wir führen auch die Fit-Funktion N Epochen.Was ist der Unterschied zwischen Schritten und Epochen in TensorFlow?

Was ist der Unterschied zwischen dem Ausführen von 1000 Schritten mit 1 Epoche und dem Ausführen von 100 Schritten mit 10 Epochen? Welche ist in der Praxis besser? Irgendwelche Logik ändert sich zwischen aufeinander folgenden Epochen? Daten mischen?

Antwort

30

Eine Epoche bedeutet normalerweise eine Iteration über alle Trainingsdaten. Wenn Sie beispielsweise 20.000 Bilder und eine Stapelgröße von 100 haben, sollte die Epoche 20.000/100 = 200 Schritte enthalten. Allerdings setze ich normalerweise nur eine feste Anzahl von Schritten wie 1000 pro Epoche, obwohl ich einen viel größeren Datensatz habe. Am Ende der Epoche überprüfe ich die durchschnittlichen Kosten und wenn es verbessert wird, speichere ich einen Checkpoint. Es gibt keinen Unterschied zwischen Schritten von einer Epoche zur anderen. Ich behandle sie nur als Checkpoints.

Die Daten werden häufig zwischen Epochen gemischt. Ich bevorzuge es, mit der Funktion random.sample die Daten auszuwählen, die in meinen Epochen verarbeitet werden sollen. Also sage ich, dass ich 1000 Schritte mit einer Chargengröße von 32 machen möchte. Ich werde nur zufällig 32.000 Proben aus dem Pool der Trainingsdaten auswählen.

+7

Der zweite Teil Ihrer Antwort ist meiner Meinung nach falsch. Eine Epoche ist als ein Zyklus durch die Trainingsdaten definiert. Es ist keine Epoche, wenn Sie die Anzahl der Schritte festlegen. Analog kann man es nicht epoch nennen, wenn man das Trainingsbeispiel in jedem Schritt selbstständig abtastet. Sie können Ihren Prüfpunkt speichern und alle N Schritte überprüfen, aber das bedeutet nicht, dass N Schritte zu einer Epoche werden. Ich würde es vermeiden, diese Epoche im Code zu nennen, sie könnte verwirren. – MarvMind

16

Ein Trainingsschritt ist ein Gradientenupdate. In einem Schritt batch_size werden viele Beispiele bearbeitet.

Eine Epoche besteht aus einem vollständigen Zyklus durch die Trainingsdaten. Dies sind normalerweise viele Schritte. Wenn Sie zum Beispiel 2.000 Bilder haben und eine Stapelgröße von 10 verwenden, besteht eine Epoche aus 2.000 Bildern/(10 Bilder/Schritt) = 200 Schritte.

Wenn Sie unser Trainingsbild zufällig (und unabhängig) in jedem Schritt wählen, nennen Sie es normalerweise nicht epoch. [Hier unterscheidet sich meine Antwort von der vorherigen. Siehe auch meinen Kommentar.]

+0

Ich habe die 200-Schritte-Berechnung bearbeitet, aber vergessen, mich einzuloggen. Wenn Sie also mit dem "unbekannten Benutzer" sprechen wollen, bin ich hier –

Verwandte Themen