Tensorflow:为什么我的损失在下降,尽管我的梯度为零?

Tensorflow:为什么我的损失在下降,尽管我的梯度为零?,tensorflow,neural-network,rnn,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_gra

为了调试代码和理解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>]
tf.可训练的_变量()
出[8]:
[,
]
当我运行网络时,损失仍在下降。这怎么可能?据我所知,新变量值应为旧值+学习率*梯度

我正在使用AdaGradOptimizer


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

在修改gvs.run之后,您可能应该检查gvs确实只包含0。。。除了可训练的变量外,你的人际网络中还有什么变化吗?例如,如果你有批量标准化,其计算的平均值和方差可能会随着时间的推移而变化,而不是真正可训练的(我认为它们不会出现在tf.trainable_variables()中,我可能对此有错误;但这或类似的情况可能会发生)。我检查了gvs,它们都只返回0。我不使用批处理规范化。你还能想到哪些东西没有出现在
tf.trainable_variables()
中?