即使学习率设置为0,变量仍会更新

时间:2018-07-13 06:48:58

标签: tensorflow

我使用张量流训练我的模型,经过多次迭代,模型输出变为Nan。我设置了lr=0,我认为模型权重将不会更新,但是,经过多次迭代,我仍然得到了Nan。当我只加载数据,打印输出,完全削减优化过程时,我不会得到Nan

所以我很好奇为什么在lr=0时模型仍会更新。

我正在使用TF1.3。 python2.7

我尝试过tf.train.GradientDescentOptimizertf.train.AdamOptimizer

2 个答案:

答案 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)
对于AdamOptimizerGradientDescentOptimizer

。我最好的猜测是数据中的非渐变更新(例如BatchNorm和/或NaN)导致NaN。甚至是错误的操作。

您希望如何在不显示[mcve]实施情况的情况下获得帮助?

答案 1 :(得分:0)

Patwiw是对的!

实际上是因为我的代码对{strong>不正确的真实数据使用了tf.log,导致-inf丢失。