2017-05-08 4 views
2
features = [tf.contrib.layers.real_valued_column("x", dimension=1)] 
estimator = tf.contrib.learn.LinearRegressor(feature_columns=features) 
y = np.array([0., -1., -2., -3.]) 
input_fn = tf.contrib.learn.io.numpy_input_fn({"x":x}, y, batch_size=4, 
               num_epochs=1000) 

estimator.fit(input_fn=input_fn, steps=1000) 

Zum Beispiel bedeuten diese "Schritte = 1000" und "num_epochs = 1000" genau das Gleiche? Wenn ja, warum muss es dupliziert werden? Wenn nicht, kann ich diese beiden Parameter anders einstellen?Sind Epochen und Trainingsschritte dasselbe?

Antwort

1

Hier ist der grundlegende Unterschied zwischen Epoche und Schritte in jeder Maschine Lernalgorithmus oder Rahmen:

Sobald der Rahmen festgelegt alle Datenpunkte in der Ausbildung geht durch seine Parameter zu aktualisieren, es eine Epoche genannt wird. Ein Schritt ist eine Aktualisierung der Parameter (z. B. Gewichte des neuralen Netzwerks, wenn es DNN trainiert). Diese Aktualisierung kann unter Verwendung eines einzelnen Datenpunkts oder eines Mini-Stapels von Datenpunkten (z. B. zufälliges Zeichnen von 100 Datenpunkten mit oder ohne Ersatz) oder aller Punkte erhalten werden. Wenn Sie also sehen, ob alle Ihre Datenpunkte in einem Schritt (oder Aktualisierung von Parametern) verwendet werden, wird es eine Epoche, d. H. Ein Schritt = eine Epoche.

In der Regel verwenden Frameworks Mini-Batching und bündeln in einem Schritt 100 (oder eine andere Anzahl) Datenpunkte und führen ein Update durch. In diesem Fall, wenn Sie sagen, Sie haben insgesamt 1 Million Datenpunkte (10^6), dann hat eine Epoche 10000 Schritte, da ein Schritt 100 Datenpunkte enthält.

+0

BTW, in meinem Beispiel kann ich die Schritte von "500" zu "1000" ändern? Mein Verständnis ist nicht, da alle Datenpunkte in einem Schritt wegen Batchgröße = "4" verwendet werden. Wenn das der Fall ist, warum sollte ich den Parameter "steps" angeben? Sollte es nicht immer automatisch durch "(# Datenpunkte/Losgröße) * Epochen" berechnet werden? – user697911

2

Nein, sie sind nicht gleich. Wie bei den meisten (allen?) Frameworks hat Tensorflow einige Befehle, die Epochen angeben, und einige, die an Schritten, a.k.a Iterationen arbeiten. A Schritt ist eine Charge, die durch die Losgröße bestimmt wird, die in der Eingabe des Modells angegeben ist. Wenn Sie beispielsweise AlexNet mit der Standard-Stapelgröße von 256 und den ILSVRC 2012-Datensatz mit ungefähr 1,28 Millionen Bildern verwenden, haben Sie pro Schritt etwa 5000 Schritte (1.280.000/256).

Die Stapelgröße ist die Anzahl der parallel verarbeiteten Bilder. Wenn 1,28 Millionen Bilder im Datensatz vorhanden sind, müssen Sie 12,8 Millionen Bilder pro Epoche verarbeiten: das ist die Definition von Epoche - verarbeiten Sie jede Eingabe einmal. Ist diese Arithmetik jetzt klar?

+1

Mit "5000 Schritte pro Epoche" meinen Sie, dass die Losgröße 256 gleich der Anzahl der Epochen ist? Bitte klären Sie mehr. – user697911

Verwandte Themen