【问题标题】:How to check gradient computation via unit test如何通过单元测试检查梯度计算
【发布时间】:2019-10-06 04:46:38
【问题描述】:

我正在尝试对自定义层进行单元测试。编写前馈测试非常简单,但我不知道如何实现梯度测试。

我发现 tensorflow 测试包中有一个名为 compute_gradient 的函数,但我找不到任何有关如何使用它的资源。文档基本上说它计算了我想要的梯度(雅可比矩阵),但是当我尝试使用它时,我得到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 对象,但由于我的图层中没有参数期望在输入处获得错误值。如果我再次搞砸了,请纠正我。澄清一下,我的层只是在转换数据,因此它本身没有渐变,但必须正确地向后传播。

【问题讨论】:

    标签: python unit-testing tensorflow gradient


    【解决方案1】:

    检查是否启用了急切执行,如果没有尝试导入下面的代码

    import tensorflow as tf
    tf.enable_eager_execution()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      相关资源
      最近更新 更多