我使用张量流训练我的模型,经过多次迭代,模型输出变为Nan
。我设置了lr=0
,我认为模型权重将不会更新,但是,经过多次迭代,我仍然得到了Nan
。当我只加载数据,打印输出,完全削减优化过程时,我不会得到Nan
。
所以我很好奇为什么在lr=0
时模型仍会更新。
我正在使用TF1.3。 python2.7
我尝试过tf.train.GradientDescentOptimizer
和tf.train.AdamOptimizer
答案 0 :(得分:1)
您的模型将不更新:
import tensorflow as tf
w = tf.get_variable('w', initializer=42.)
cost_op = tf.square(w)
train_op = tf.train.GradientDescentOptimizer(0.0).minimize(cost_op)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(10):
_, cost, value = sess.run([train_op, cost_op, w])
print(i, cost, value)
给予
(0, 1764.0, 42.0)
(1, 1764.0, 42.0)
(2, 1764.0, 42.0)
(3, 1764.0, 42.0)
(4, 1764.0, 42.0)
(5, 1764.0, 42.0)
(6, 1764.0, 42.0)
(7, 1764.0, 42.0)
(8, 1764.0, 42.0)
(9, 1764.0, 42.0)
对于AdamOptimizer
和GradientDescentOptimizer
的。我最好的猜测是数据中的非渐变更新(例如BatchNorm和/或NaN)导致NaN。甚至是错误的操作。
您希望如何在不显示[mcve]实施情况的情况下获得帮助?
答案 1 :(得分:0)
Patwiw是对的!
实际上是因为我的代码对{strong>不正确的真实数据使用了tf.log
,导致-inf
丢失。