Я попытался взломать код из курса Udacity Deep Learning (Assignment 3 - Регуляризация) и Tensorflow mnist_with_summaries.py Tutorial. Мой код, как представляется, прекрасно работатьСкорость обучения более 0,001 приводит к ошибке
https://github.com/llevar/udacity_deep_learning/blob/master/multi-layer-net.py
но что-то странное происходит. Все задания используют скорость обучения 0,5 и в какой-то момент вводят экспоненциальный спад. Однако код, который я собрал, работает нормально, когда я устанавливаю скорость обучения 0,001 (с распадом или без). Если установить начальную скорость в 0,1 или выше, я получаю следующее сообщение об ошибке:
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()
Если установить скорость на уровне 0,001, то код работает до завершения с тестируемой точностью 0,94.
Использования tensorflow 0,8 RC0 на Mac OS X.
Hi Ярослав, Спасибо за ваш ответ. Можете ли вы мне немного разобраться с сообщением об ошибке? Как мне отладить это? Кажется, это происходит во вторую эпоху, поэтому слишком быстро расходиться. Это гистограмма, это проблема или вес? Можно ли выполнить выполнение тензорного потока с помощью обычного отладчика? Похоже, что я могу использовать высокий уровень обучения 0,5 с примерами из готовых примеров в Udacity и обучающих программах для тензора, поэтому я боюсь, что это может быть какая-то тонкая ошибка в моем коде, которая заставляет вещи вести себя таким образом. Спасибо за вашу помощь. – llevar
обновлен с некоторыми советами по отладке –
Когда я комментирую резюме и увеличиваю скорость обучения до 0,1, программа больше не вылетает, но она также не учится. Точность остается на уровне 10% в течение нескольких тысяч эпох. Поскольку данные обучения постоянны, а начальные веса - это выборки из нормального (0, 0.1) Я ожидаю, что прогоны моего кода будут похожи на код udacity, но они отлично работают со скоростью даже 0,5. Правильный способ отладки (например, для поиска неожиданно большого градиента ошибок), собирая возвращаемое значение из метода session.run или есть другие более удобные способы опроса состояния системы? – llevar