2017-05-24 2 views
0

Dies ist wahrscheinlich eine sehr grundlegende Frage. Ich bin neu im Deep Learning und von dem, was ich bis jetzt gesammelt habe, erstellt man im Allgemeinen Datenpartien und sobald alle Trainingsdaten verwendet wurden (oder "genug" davon), wird der Prozess einige Male wiederholt (jede Iteration) heißt eine Epoche). Allerdings sehen, als ich im Tutorial von CIFAR10:Tensorflow CIFAR10 Tutorial: Anzahl der Epochen im Trainingsprozess ermitteln

CIFAR10 Tensorflow tutorial

Es gibt keine solche Sache wie Epochen ist. Sie sind hier nur erwähnt: cifar10.py

als NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN, NUM_EXAMPLES_PER_EPOCH_FOR_EVAL und NUM_EPOCHS_PER_DECAY.

Verwenden sie das um die Epochen implizit zu definieren?

num_batches_per_epoch = NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN /FLAGS.batch_size 

frage ich auch, weil ich ein wenig verwirrt darüber bin, wie ich hier die num_epochs Argument setzen soll (in meinem eigenen Modell):

tf.train.string_input_producer(...,num_epochs=num_epochs,...)` 

sollte ich es NONE gesetzt gerade oder ich tun müssen Sie zuerst die Anzahl der Epochen berechnen?

Antwort

1

Es gibt zwei Dinge in Ihrer Frage:

  1. Verstehen: Eine Epoche bedeutet nicht, eine Iteration für die meisten Situationen. Eine Epoche bedeutet einen Durchgang des gesamten Trainingssatzes. NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN etc. sind here als 50000 definiert. CIFAR-10 hat 50000 Beispiele für das Training. Dann wird es leicht zu verstehen sein num_batches_per_epoch.

  2. Wie zur Codierung, in tf.train.string_input_producer(...,num_epochs=num_epochs,...), können Sie API überprüfen, die num_epochs erklärt. Für CIFAR-10, geben Sie keine num_epochs (weil diese string_input_producer nicht jedes Beispiel direkt liest. Die Datenbank in 5 Teile/Dateien aufgeteilt ist, von denen jeder 10.000 Beispiele speichert und string_input_producer liest Dateien).

+0

Das Flag 'max_steps' ist auf 1000000 Chargen eingestellt. Und jede Charge hat 128 Beispiele. Ist es richtig zu sagen, dass sie (1000000 * 128)/50000 = 2560 Epochen haben? Also im Grunde kann ich num_epochs auf None setzen und einfach alles bei einer bestimmten Anzahl von Schritten stoppen – user3142067

+0

Ja, sie haben 2560 Epochen. Wenn Sie 'num_epochs' in' tf.train.string_input_producer (..., num_epochs = num_epochs, ...) 'auf None setzen, hört der Leser nicht mit dem Lesen von Daten auf, bis der Schritt 'max_steps' erreicht, wenn das gesamte Programm beendet wird ; Wenn Sie die 'num_epochs' angeben, liest der Leser nur' num_epochs'-Zeiten seiner Eingabe und fordert dann einen 'OutOfRange'-Fehler auf. – Seven

Verwandte Themen