tensorflow训练神经网络时loss出现nan的问题
一般情况下原因是由于优化器上的学习比率learning_rate定义值太大,如:
train_step = tf.compat.v1.train.GradientDescentOptimizer(0.1).minimize(loss)
运行打印loss:
for i in range(100):
sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
#这里我们用全部数据来进行train,其实有个forcast GDO只用一部分数据进行训练,能使训练效率更高
if i % 50:
print('实际偏差率:',sess.run(loss,feed_dict={xs:x_data,ys:y_data})[0])
其结果为:
实际偏差率: 9477596000000000.0
实际偏差率: inf
实际偏差率: nan
实际偏差率: nan
实际偏差率: nan
实际偏差率: nan
实际偏差率: nan
实际偏差率: nan
......
实际偏差率: nan
将其中learning_rate的值改为0.01或者更小:
train_step = tf.compat.v1.train.GradientDescentOptimizer(0.01).minimize(loss)
结果为:
实际偏差率: 5.9452715
实际偏差率: 5.5919566
实际偏差率: 5.1778126
实际偏差率: 0.023199111
实际偏差率: 0.26209167
实际偏差率: 0.41470975
实际偏差率: 0.47333607
实际偏差率: 0.48828265
实际偏差率: 0.48628327
实际偏差率: 0.47839066
实际偏差率: 0.46885166
实际偏差率: 0.4591693
.......
实际偏差率: 0.014343787
本文探讨了在使用TensorFlow进行神经网络训练时遇到Loss值变为NaN的情况,指出这通常是因为学习率设置过高导致。通过调整优化器的学习率参数,可以有效避免这一问题,使训练过程稳定并得到合理的结果。
1061

被折叠的 条评论
为什么被折叠?



