【问题标题】:Inception retraining issue "Nan in summary histogram for: HistogramSummary"Inception 再培训问题“Nan in summary histogram for: HistogramSummary”
【发布时间】:2017-05-22 11:09:44
【问题描述】:

我正在尝试在我的 RPi3 上重新训练 inceptionV3。我收到此直方图错误消息。

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)]]

在阅读this 后,我尝试将merged = tf.merge_all_summaries() 更改为retrain.py 但它没有工作。

另外,当我第一次尝试重新训练时,我在第 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%

【问题讨论】:

  • 您能解决您的问题吗?我遇到了同样的问题,找不到解决方案。

标签: python tensorflow imagenet


【解决方案1】:

听起来这可能有助于了解 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&gt; 提示符下,您可以输入命令让代码运行,直到任何 NaN 或 Infinities 出现在 TensorFlow 图中:

tfdbg> run -f has_inf_or_nan

当张量过滤器has_inf_or_nan被命中时,界面会给你一个包含Infs或Nans的Tensor列表,按时间顺序排序。顶部的那个应该是“罪魁祸首”,即第一个产生错误数值的那个。假设它的名字是node_1,你可以使用下面的 tfdbg 命令来查看它的输入和节点属性:

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

【讨论】:

  • 注意:由于 tfdbg 调试器是最近添加的功能(大约 2016 年 12 月),您可能需要将 TensorFlow fork 同步到 head 和/或下载最新的二进制文件才能访问此功能。
  • 我需要在 python 代码中添加一个标志吗?尽管添加了--debug,但仍会引发错误if debug:NameError: global name 'debug' is not defined。我正在使用 TF.11。
  • @user7388993 “调试”标志只是一个例子。您可以在 Python 代码中将其定义为常量。如果你不想要那个开关,你可以不用那个“if debug”行。
【解决方案2】:

如果您使用的是 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2018-05-22
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    相关资源
    最近更新 更多