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