Python 如何使用tf.compute_gradient_error
我想使用Python 如何使用tf.compute_gradient_error,python,tensorflow,Python,Tensorflow,我想使用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.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) # e.g. 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是指体重的减少
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\u feed\u dict
来提供占位符数据,pycharm调试程序将在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])
compute\u gradient\u error
仅用于测试,我希望它总是比TensorFlow的正常梯度计算慢得多。如果有必要,我会建议在单元测试中使用它,但在训练/推理过程中永远不要使用它。Hi@AllenLavoie我添加了另一个测试,gradient\u error
的结果是不稳定的,它工作正常吗?floor
是不可微的,所以它可能会阻止正常的梯度计算,并抛弃有限差分法。我不确定它能在这里做些什么。