Как использовать tf.compute_gradient_error

Я хочу использовать tf.test.compute_gradient_error чтобы проверить, являются ли все градиенты разумными (почти равными нулю).

Я сделал небольшой тест. Кажется, эта функция принимает местозаполнитель.
Вычислить ошибку градиента без данных заполнителя канала нормально

 x = tf.Variable([2], dtype=tf.float32) xp = tf.placeholder(dtype=tf.float32, shape=[None, 5]) y = xp * 2 y2 = y * x y3 = y2 * 3 y4 = tf.reduce_mean(y3) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) # err = 9.84e-5 err = tf.test.compute_gradient_error(y2, (2, 5), y3, (2, 5)) # err1 = 6.94e-5 err1 = tf.test.compute_gradient_error(y2, (2, 5), y4, ()) 

Но когда я начинаю проверку, появляется сообщение об ошибке

 loss_sumup = func(sumup) # eg concat and reduce_mean.... loss = loss_sumup + lossL2 # err = 4.67e-5 err = tf.test.compute_gradient_error(loss_sumup, [], loss, []) # err1: You must feed a value for placeholder tensor 'Placeholder' err1 = tf.test.compute_gradient_error(lossL2, [], loss, []) # err2: You must feed a value for placeholder tensor 'Placeholder' err2 = tf.test.compute_gradient_error(sumup, [100, 10], loss, []) 

lossL2 – потеря веса l2

 tf_vars = tf.trainable_variables() lossL2 = tf.add_n([tf.nn.l2_loss(v) for v in tf_vars if 'bias' not in v.name]) * 0.001 

Если я использую параметр extra_feed_dict для подачи данных заполнителя, то отладчик pycharm показывает Timeout waiting for response on 113
Я думаю, что тайм-аут является приемлемым результатом, потому что моя модель использует почти 2 минуты для каждой итерации, мне нужно найти способ ускорить

Изменить 02/11

 A = 200 B = 1 # f = np.random.rand(A, B) # vif = tf.placeholder(tf.float32, shape=[A, B]) f = np.ones((A, B), dtype=np.float32) vif = tf.constant(f, dtype=tf.float32) out1 = vif + tf.floor(vif) out2 = tf.sub(vif, tf.floor(vif)) out3 = tf.subtract(vif, tf.floor(vif)) out4 = vif - tf.floor(vif) with tf.Session() as sess: # sometimes value close 500, sometimes close 1E-5 err1 = tf.test.compute_gradient_error(vif, [A, B], out1, [A, B]) err2 = tf.test.compute_gradient_error(vif, [A, B], out2, [A, B]) err3 = tf.test.compute_gradient_error(vif, [A, B], out3, [A, B]) err4 = tf.test.compute_gradient_error(vif, [A, B], out4, [A, B])