Tensorflow: Почему моя потеря уменьшается, хотя мои градиенты равны нулю? - PullRequest
0 голосов
/ 29 августа 2018

Для отладки своего кода и понимания 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.

...