我正在尝试对自定义图层进行单元测试。编写前馈测试非常简单,但是我不知道如何实现渐变测试。
我发现在tensorflow测试包中有一个名为compute_gradient
的函数,但是我找不到有关如何使用它的任何资源。该文档基本上说它可以计算出我想要的梯度(jacobian矩阵),但是当我尝试使用它时,我得到了EagerTensor is not callable
这是我失败的代码:
class LayerGradientTest(tf.test.TestCase):
def test_gradient(self):
with self.test_session():
input_tensor = [...]
expected_output = [...]
expected_gradients = [...]
test_layer = MyLayer()
output_tensor = test_layer(tf.Variable(input_tensor))
grad_computed = tf.test.compute_gradient(output_tensor, expected_output)
self.assertAllEqual(grad_computed, expected_gradients)
我希望测试在断言时通过或失败,但是我得到一个
TypeError: 'tensorflow.python.framework.ops.EagerTensor' object is not callable
中的compute_gradient
编辑: 当然,渐变需要损失函数,我是个白痴……但是输出仍然是胡说八道。我现在使用以下代码:
function = tf.losses.mean_squared_error
grad_computed = tf.test.compute_gradient(function, [output_tensor, expected_output])
输入到我的图层的形状是(1、2、2、3)和(1、2、2、2),但是渐变是4个12x4矩阵的zip对象,但是由于我的图层中没有参数,期望在输入处获得错误值。如果我又搞砸了,请纠正我。为了澄清起见,我的图层只是在转换数据,因此它本身没有渐变,但必须正确地向后传播。
答案 0 :(得分:0)
检查是否启用了急切执行,如果未尝试,请在导入中尝试以下代码
import tensorflow as tf
tf.enable_eager_execution()