2017-01-07 1 views
1

Я пытаюсь переобучить inceptionV3 на моем RPi3. Я получаю сообщение об ошибке гистограммы.Исходная проблема переобучения «Нан в итоговой гистограмме для: HistogramSummary»

python /home/pi/Tensorflow/tensorflow/tensorflow/examples/image_retraining/retrain.py --bottleneck_dir=/home/pi/Documents/Machine\ Learning/Inception/tf_files/bottlenecks --how_many_training_steps 500 --model_dir=/home/pi/Documents/Machine\ Learning/Inception/tf_files/inception --output_graph=/home/pi/Documents/Machine\ Learning/Inception/tf_files/retrained_graph.pb --output_labels=/home/pi/Documents/Machine\ Learning/Inception/tf_files/retrained_labels.txt --image_dir /home/pi/Documents/Machine\ Learning/Inception/Retraining_Images 
Looking for images in 'Granny Smith Apple' 
Looking for images in 'Red Delicious' 
100 bottleneck files created. 
200 bottleneck files created. 
2017-01-07 11:30:22.180768: Step 0: Train accuracy = 56.0% 
2017-01-07 11:30:22.242166: Step 0: Cross entropy = nan 
2017-01-07 11:30:22.850969: Step 0: Validation accuracy = 50.0% 
Traceback (most recent call last): 
    File "/home/pi/Tensorflow/tensorflow/tensorflow/examples/image_retraining/retrain.py", line 938, in <module> 
    tf.app.run() 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 30, in run 
    sys.exit(main(sys.argv[:1] + flags_passthrough)) 
    File "/home/pi/Tensorflow/tensorflow/tensorflow/examples/image_retraining/retrain.py", line 887, in main 
    ground_truth_input: train_ground_truth}) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 717, in run 
    run_metadata_ptr) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 915, in _run 
    feed_dict_string, options, run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 965, in _do_run 
    target_list, options, run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 985, in _do_call 
    raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors.InvalidArgumentError: Nan in summary histogram for: HistogramSummary 
    [[Node: HistogramSummary = HistogramSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](HistogramSummary/tag, final_result)]] 

Caused by op u'HistogramSummary', defined at: 
    File "/home/pi/Tensorflow/tensorflow/tensorflow/examples/image_retraining/retrain.py", line 938, in <module> 
    tf.app.run() 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 30, in run 
    sys.exit(main(sys.argv[:1] + flags_passthrough)) 
    File "/home/pi/Tensorflow/tensorflow/tensorflow/examples/image_retraining/retrain.py", line 846, in main 
    bottleneck_tensor) 
    File "/home/pi/Tensorflow/tensorflow/tensorflow/examples/image_retraining/retrain.py", line 764, in add_final_training_ops 
    tf.histogram_summary(final_tensor_name + '/activations', final_tensor) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/logging_ops.py", line 100, in histogram_summary 
    tag=tag, values=values, name=scope) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_logging_ops.py", line 100, in _histogram_summary 
    name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", line 749, in apply_op 
    op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2380, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1298, in __init__ 
    self._traceback = _extract_stack() 

InvalidArgumentError (see above for traceback): Nan in summary histogram for: HistogramSummary 
    [[Node: HistogramSummary = HistogramSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](HistogramSummary/tag, final_result)]] 

Я попытался изменить merged = tf.merge_all_summaries() в retrain.py после прочтения this , но не работал.

Кроме того, первый раз, когда я пытался переучить, я получил различные результаты для шага 0 до удара об ошибке:

2017-01-07 11:13:36.548913: Step 0: Train accuracy = 89.0% 
2017-01-07 11:13:36.555770: Step 0: Cross entropy = 0.590778 
2017-01-07 11:13:37.052190: Step 0: Validation accuracy = 76.0% 
+0

Не могли бы вы решить вашу проблему? У меня такая же проблема, и я не могу найти решение для этого. – Gegenwind

ответ

3

Похоже, что это может помочь узнать, где значение NaN откуда. Для этого обратите внимание на tensorflow отладчик (tfdbg): https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/how_tos/debugger/index.md

В вашем retrain.py, вы можете внести изменения, как

from tensorflow.python import debug as tf_debug 

# ... 
# In def main(_) 
if debug: 
    sess = tf_debug.LocalCLIDebugWrapperSession(sess) 
    sess.add_tensor_filter("has_inf_or_nan", tf_debug.has_inf_or_nan) 

# ... 

Тогда, когда sess.run() происходит для обучения и оценки, вы перейдет в интерфейс командной строки отладчика. На tfdbg> строке можно ввести команду, чтобы код должен выполняться до тех пор любые NaNs или Бесконечности появляются в TensorFlow графике:

tfdbg> run -f has_inf_or_nan 

Когда Тензор фильтр has_inf_or_nan хит, интерфейс даст вам список тензоров, содержащих Infs или Nans, отсортированные по времени. Тот, что сверху, должен быть «виновником», то есть тем, который первым создал плохие числовые значения. Скажем, его зовут node_1, вы можете использовать следующий tfdbg команды, чтобы посмотреть на его входы и узел атрибуты:

tfdbg> li -r node_1 
tfdbg> ni -a node_1 
+0

Примечание: поскольку отладчик tfdbg является недавно добавленной функцией (около декабря 2016 года), вам может потребоваться синхронизировать вашу вилку TensorFlow, чтобы возглавить и/или загрузить последнюю двоичную информацию, чтобы получить доступ к этой функции. – scai

+0

Есть ли флаг, который мне нужно добавить в код python? Ошибка 'if debug:' 'NameError: глобальное имя 'debug' не определено', вызывается, несмотря на добавление' --debug'. Я использую TF.11. – user7388993

+0

@ user7388993 Флаг «debug» - это всего лишь пример. Вы можете определить его как константу в коде Python. Если вам не нужен этот переключатель, вы можете просто обойтись без этой строки «if debug». – scai

1

Если вы используете tf.contrib.learn вы хотите использовать следующее:

debug_hook = tf_debug.LocalCLIDebugHook() 
debug_hook.add_tensor_filter("has_inf_or_nan", tf_debug.has_inf_or_nan) 
hooks = [debug_hook] 
... 
classifier.fit(..., monitors=hooks) 
Смежные вопросы