Python 学习率大于0.001会导致错误

Python 学习率大于0.001会导致错误,python,tensorflow,Python,Tensorflow,我尝试将Udacity深度学习课程(作业3-正则化)和Tensorflow mnist_with_summaries.py教程中的代码整合在一起。我的代码运行正常 但奇怪的事情正在发生。所有作业都使用0.5的学习率,并且在某些点上引入指数衰减。但是,当我将学习速率设置为0.001(有衰减或无衰减)时,我编写的代码运行良好。如果将初始速率设置为0.1或更大,则会出现以下错误: Traceback (most recent call last): File "/Users/siakhnin/D

我尝试将Udacity深度学习课程(作业3-正则化)和Tensorflow mnist_with_summaries.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()
回溯(最近一次呼叫最后一次):
文件“/Users/siakhnin/Documents/workspace/udacity\u deep\u learning/multi-layer net.py”,第175行,在
总结,我的准确度,我的会话。运行([合并,准确度,训练步骤],输入数据=输入数据)
文件“/usr/local/lib/python2.7/site packages/tensorflow/python/client/session.py”,第340行,正在运行
运行_元数据_ptr)
文件“/usr/local/lib/python2.7/site packages/tensorflow/python/client/session.py”,第564行,正在运行
提要(dict字符串、选项、运行元数据)
文件“/usr/local/lib/python2.7/site packages/tensorflow/python/client/session.py”,第637行,在
目标\u列表、选项、运行\u元数据)
文件“/usr/local/lib/python2.7/site packages/tensorflow/python/client/session.py”,第659行,在
e、 代码)
tensorflow.python.framework.errors.InvalidArgumeInterror:Nan在汇总直方图中,用于:layer1/weights/summaries/historogramSummary
[[Node:layer1/weights/summaries/historogramsummary=historogramsummary[T=DT_FLOAT,_device=“/job:localhost/replica:0/task:0/cpu:0”](layer1/weights/summaries/historogramsummary/tag,layer1/weights/Variable/read)]]
由op u“第1层/权重/总结/历史总结”引起,定义为:
文件“/Users/siakhnin/Documents/workspace/udacity\u deep\u learning/multi-layer net.py”,第106行,中
层1,权重层1=nn层(x,num特征,1024,“层1”)
文件“/Users/siakhnin/Documents/workspace/udacity\u deep\u learning/multi-layer net.py”,第79行,nn\u层
变量摘要(权重、图层名称+'/weights')
文件“/Users/siakhnin/Documents/workspace/udacity\u deep\u learning/multi-layer net.py”,第65行,变量摘要
tf.直方图汇总(名称、变量)
文件“/usr/local/lib/python2.7/site packages/tensorflow/python/ops/logging_ops.py”,第113行,在直方图摘要中
标记=标记,值=值,名称=范围)
文件“/usr/local/lib/python2.7/site packages/tensorflow/python/ops/gen_logging_ops.py”,第55行,在直方图摘要中
名称=名称)
文件“/usr/local/lib/python2.7/site packages/tensorflow/python/ops/op_def_library.py”,第655行,在apply_op
op_def=op_def)
文件“/usr/local/lib/python2.7/site packages/tensorflow/python/framework/ops.py”,第2154行,在create_op中
初始值=自身值。\默认值\初始值,初始值=初始值)
文件“/usr/local/lib/python2.7/site packages/tensorflow/python/framework/ops.py”,第1154行,在__
self.\u traceback=\u extract\u stack()
如果我将速率设置为0.001,那么代码将以0.94的测试精度运行到完成


在Mac OS X上使用tensorflow 0.8 RC0。

看起来你的训练正在偏离方向(这会导致你得到无穷大或N)。没有简单的解释为什么事情在某些条件下会发生分歧,而在其他条件下则不会,但一般来说,学习率越高,分歧的可能性就越大

编辑,4月17日 您在
直方图
摘要中得到一个
NaN
,这很可能意味着您的权重或激活中有一个
NaN
NaN
s是由于数值计算不当造成的,即取对数0,然后将结果乘以0。柱状图中也有一些小的错误,为了排除这种情况,关闭摘要,看看你是否仍然能够训练到很好的准确性

要关闭摘要,请替换此行 合并=tf.merge_all_summaries()

用这个

merged = tf.constant(1)
并注释掉这一行

test_writer.add_summary(summary)

看起来你的训练是发散的(这会导致你得到无穷大或N)。没有简单的解释为什么事情在某些条件下会发生分歧,而在其他条件下则不会,但一般来说,学习率越高,分歧的可能性就越大

编辑,4月17日 您在
直方图
摘要中得到一个
NaN
,这很可能意味着您的权重或激活中有一个
NaN
NaN
s是由于数值计算不当造成的,即取对数0,然后将结果乘以0。柱状图中也有一些小的错误,为了排除这种情况,关闭摘要,看看你是否仍然能够训练到很好的准确性

要关闭摘要,请替换此行 合并=tf.merge_all_summaries()

用这个

merged = tf.constant(1)
并注释掉这一行

test_writer.add_summary(summary)
你可以交叉熵:

diff = y_ * tf.log(y) 

也可以考虑案例0 *log(0)

您可以将其更改为:

cross_entropy = -tf.reduce_sum(y_*tf.log(tf.clip_by_value(y_conv,1e-10,1.0)))
资料来源:

交叉熵:

diff = y_ * tf.log(y) 

也可以考虑案例0 *log(0)

您可以将其更改为:

cross_entropy = -tf.reduce_sum(y_*tf.log(tf.clip_by_value(y_conv,1e-10,1.0)))
资料来源:

你好,雅罗斯拉夫,谢谢你的回复。你能帮我把错误信息拆开一点吗?如何调试这个?它似乎发生在第二个纪元,所以有点太快而无法分开。问题是直方图还是权重?是否可以使用常规调试器逐步执行tensorflow?我似乎能够在Udacity和tensorflow教程中使用开箱即用的示例,使用0.5的高学习率,所以我担心可能是我的代码中存在一些微妙的错误,导致事情以这种方式运行。谢谢你的帮助。当我评论总结并将学习率提高到0.1时,程序不再崩溃,但也不会学习。在数千个历史时期内,准确率保持在10%。由于训练数据是恒定的,并且起始权重是来自正常(0,0.1)的样本,因此我希望我的代码的运行与udacity代码类似,但它们的运行速度很好,为eve