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.
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
aktualisiert mit einigen Debugging-Tipps –
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