2016-04-16 10 views
1

Ich habe versucht, Code aus dem Udacity Deep Learning Kurs (Aufgabe 3 - Regularisierung) und dem Tensorflow mnist_with_summaries.py Tutorial zusammen zu hacken. Mein Code erscheintLernrate größer als 0,001 ergibt Fehler

https://github.com/llevar/udacity_deep_learning/blob/master/multi-layer-net.py

aber etwas Seltsames vor sich geht in Ordnung zu laufen. Die Zuweisungen verwenden alle eine Lernrate von 0,5 und führen irgendwann zu einem exponentiellen Abfall. Der Code, den ich zusammenstelle, läuft jedoch nur dann gut, wenn ich die Lernrate auf 0,001 (mit oder ohne) setze. Wenn ich die Anfangsrate auf 0,1 oder mehr eingestellt erhalten wir folgende Fehler:

Traceback (most recent call last): 
    File "/Users/siakhnin/Documents/workspace/udacity_deep_learning/multi-layer-net.py", line 175, in <module> 
    summary, my_accuracy, _ = my_session.run([merged, accuracy, train_step], feed_dict=feed_dict) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 340, in run 
    run_metadata_ptr) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 564, in _run 
    feed_dict_string, options, run_metadata) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 637, in _do_run 
    target_list, options, run_metadata) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 659, in _do_call 
    e.code) 
tensorflow.python.framework.errors.InvalidArgumentError: Nan in summary histogram for: layer1/weights/summaries/HistogramSummary 
    [[Node: layer1/weights/summaries/HistogramSummary = HistogramSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](layer1/weights/summaries/HistogramSummary/tag, layer1/weights/Variable/read)]] 
Caused by op u'layer1/weights/summaries/HistogramSummary', defined at: 
    File "/Users/siakhnin/Documents/workspace/udacity_deep_learning/multi-layer-net.py", line 106, in <module> 
    layer1, weights_1 = nn_layer(x, num_features, 1024, 'layer1') 
    File "/Users/siakhnin/Documents/workspace/udacity_deep_learning/multi-layer-net.py", line 79, in nn_layer 
    variable_summaries(weights, layer_name + '/weights') 
    File "/Users/siakhnin/Documents/workspace/udacity_deep_learning/multi-layer-net.py", line 65, in variable_summaries 
    tf.histogram_summary(name, var) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/logging_ops.py", line 113, in histogram_summary 
    tag=tag, values=values, name=scope) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_logging_ops.py", line 55, in _histogram_summary 
    name=name) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op 
    op_def=op_def) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2154, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/usr/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1154, in __init__ 
    self._traceback = _extract_stack() 

Wenn ich die Rate, mit 0,001 eingestellt dann wird der Code vollständig mit einer Testgenauigkeit von 0,94.

Mit tensorflow 0,8 RC0 auf Mac OS X.

Antwort

5

Sieht aus wie Ihre Ausbildung divergiert (die Sie Unendlichkeiten oder NaNs bekommen verursacht). Es gibt keine einfache Erklärung dafür, warum sich die Dinge unter bestimmten Bedingungen unterscheiden, aber nicht bei anderen, aber im Allgemeinen führt eine höhere Lernrate zu einer größeren Abweichung.

bearbeitet, 17. April Du ein NaN in Ihrer Histogram Zusammenfassung bekommen, die höchstwahrscheinlich bedeutet, dass es ein NaN in Ihren Gewicht oder Aktivierungen. NaN s werden durch numerisch falsche Berechnungen verursacht, dh Log von 0 und Multiplikation von Ergebnis mit 0. Es gibt auch eine kleine Chance, dass es einen Fehler in Histogrammen gibt, um dies auszuschließen, Zusammenfassungen auszuschalten und zu sehen, ob Sie noch trainieren können gute Genauigkeit.

Um aus Zusammenfassungen drehen, ersetzen Sie diese Zeile = tf.merge_all_summaries verschmolzen()

mit diesem

merged = tf.constant(1) 

und kommentieren Sie diese Zeile

test_writer.add_summary(summary) 
+0

Hallo Yaroslav, Vielen Dank für Ihre Antwort. Kannst du mir helfen, die Fehlermeldung etwas auszupacken? Wie debugge ich das? Es scheint in der zweiten Epoche zu kommen, also ein bisschen zu schnell, um zu divergieren. Ist das Histogramm das Problem oder die Gewichte? Ist es möglich, die Tensorflow-Ausführung mit einem herkömmlichen Debugger zu durchlaufen? Ich scheine in der Lage zu sein, eine hohe Lernrate von 0,5 mit den Out-of-the-Box Beispielen in Udacity und Tensorflow Tutorials zu verwenden, so dass ich befürchte, dass es ein subtiler Fehler in meinem Code sein könnte, der Dinge so verhält. Danke für Ihre Hilfe. – llevar

+0

aktualisiert mit einigen Debugging-Tipps –

+0

Wenn ich die Zusammenfassungen auskommentiere und die Lernrate auf 0,1 hochsetze, stürzt das Programm nicht mehr ab, aber es lernt auch nicht. Die Genauigkeit bleibt über mehrere tausend Epochen bei 10%. Da Trainingsdaten konstant sind und Startgewichte Stichproben von einer normalen (0, 0.1) Ich erwarte, dass die Läufe meines Codes dem Sudacity-Code ähnlich sind, aber die eigenen laufen mit einer Rate von gerade mal 0,5. Ist der richtige Weg zu debuggen (zum Beispiel nach einem unerwartet großen Fehlergradienten zu suchen), um einen Rückgabewert von der Methode session.run zu sammeln, oder gibt es andere, bequemere Möglichkeiten, den Systemzustand abzufragen? – llevar

0

Sie Entropie überqueren:

diff = y_ * tf.log(y) 

können auch den Fall 0 * log (0)

Sie betrachten können, es ändern:

cross_entropy = -tf.reduce_sum(y_*tf.log(tf.clip_by_value(y_conv,1e-10,1.0))) 

Quelle: Tensorflow NaN bug?

Verwandte Themen