首页 > 解决方案 > 如何模拟张量流模型?

问题描述

我想测试一个接受tf.keras模型并对其执行一些操作的函数。说明问题的示例函数:

def func(model, x):
    with tf.GradientTape() as tape:
        tape.watch(x)
        output = model(x)
        # do some additional stuff with output
        gradient = np.array(tape.gradient(output, x))
        # do some additional stuff with gradient
        return gradient

我想知道模拟的最佳主意model是什么。
可能的解决方案:

  1. 使用具有设定权重的小型网络。这个最容易实现,但是
    a) 计算时间比简单的模拟要长。
    b) 很难控制模型返回的内容。

  2. 使用单元测试或pytest. 这将直接失败,因为没有创建可以链接x和的计算图output

  3. 移动tape.gradient(output, x)到另一个函数,然后在测试期间模拟这个函数并model(x)使用单元测试或 pytest。我认为这是最好的,但它func的可读性较差(尤其是如果必须将更多特定于 tf 的元素移动到各种其他功能时)。

有没有更好的办法?理想情况下,我想:

  1. 表示给定输入的该模型x返回给定输出y
  2. y表示给定输出相对于给定输入的梯度xz
  3. y表示给定层的给定输出的梯度ll'
  4. 尽量减少对func.

标签: pythonunit-testingtensorflowtf.keras

解决方案


推荐阅读