2016-08-11 6 views
0

Die Lernratenabklingfunktion tf.train.exponential_decay benötigt einen decay_steps Parameter. Um die Lernrate alle num_epochs zu verringern, würden Sie decay_steps = num_epochs * num_train_examples/batch_size einstellen. Beim Lesen von Daten aus .tfrecords Dateien wissen Sie jedoch nicht, wie viele Trainingsbeispiele darin enthalten sind.TensorFlow: Wie wird der Lernratenabfall basierend auf Epochen festgelegt?

num_train_examples zu erhalten, könnten Sie:

  • eine tf.string_input_producer mit num_epochs=1 einrichten.
  • Führen Sie diese durch tf.TFRecordReader/tf.parse_single_example.
  • Schleife und zähle, wie oft es vor dem Anhalten eine Ausgabe erzeugt.

Dies ist jedoch nicht sehr elegant.

Gibt es einen einfacheren Weg, entweder die Anzahl der Trainingsbeispiele aus einer .tfrecords Datei zu erhalten oder den Lernratenverfall basierend auf Epochen anstatt Schritten einzustellen?

Antwort

2

können Sie den folgenden Code verwenden, um die Anzahl der Datensätze in einer .tfrecords Datei zu erhalten:

def get_num_records(tf_record_file): 
    return len([x for x in tf.python_io.tf_record_iterator(tf_record_file)]) 
0

Im learning_rate unten

learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step, 
              100000, 0.96, staircase=True) 

starter_learning_rate nach gewünschten Epochen durch die Definition eines geändert werden kann Funktion wie:

def initial_learning_rate(epoch): 
    if (epoch >= 0) and (epoch < 100): 
     return 0.1 
    if (epoch >= 100) and (epoch < 200): 
     return 0.05 
    if (epoch >= 200) and (epoch < 500): 
     return 0.001 

Und dann können Sie ini tialize Ihre starter_learning_rate in der for-Schleife (Iterieren über Epochen) als:

for epoch in range(epochs): #epochs is the total number of epochs 
starter_learning_rate = initial_learning_rate(epoch) 
... 

Hinweis

Die global_step Variable wird in nicht geändert:

decayed_learning_rate = starter_learning_rate * 
         decay_rate^(global_step/decay_steps) 
0

Ich empfehle Ihnen, die Lernrate eingestellt entsprechend den Veränderungen des Trainings- oder Evaluationsverlustes verfallen. Wenn der Verlust oszilliert, können Sie die Lernrate verringern. Kaum können Sie vorhersagen, aus welcher Epoche oder Schritt Sie es vor Beginn des Trainings verringern sollten.

Verwandte Themen