Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用tf.compute_gradient_error_Python_Tensorflow - Fatal编程技术网

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
是不可微的,所以它可能会阻止正常的梯度计算,并抛弃有限差分法。我不确定它能在这里做些什么。