Tensorflow:为什么我的梯度为零,但损失却减少了?

时间:2018-08-29 08:50:48

标签: tensorflow neural-network rnn

为调试代码和理解RNN,我将渐变手动设置为0,如下所示:

gvs = optimizer.compute_gradients(cost)
gvs[0] = (tf.zeros((5002,2), dtype=tf.float32), tf.trainable_variables()[0])
gvs[1] = (tf.zeros((2,), dtype=tf.float32), tf.trainable_variables()[1])
train_op = optimizer.apply_gradients(gvs)

我只有两个可训练的变量,因此上面的“快而脏”的方法应该将所有梯度设置为零:

tf.trainable_variables()
Out[8]: 
[<tf.Variable 'rnn/basic_rnn_cell/kernel:0' shape=(5002, 2) dtype=float32_ref>,
 <tf.Variable 'rnn/basic_rnn_cell/bias:0' shape=(2,) dtype=float32_ref>]

运行网络时,损耗仍在下降。这个怎么可能?据我了解,新的变量值应该是旧值+学习率*梯度。

我正在使用AdaGradOptimizer。

更新np.sum(sess.run(gvs[0][0]))np.sum(sess.run(gvs[1][0]))都返回0。

0 个答案:

没有答案