【发布时间】:2020-07-29 17:40:20
【问题描述】:
假设我输入了 x 和函数列表 [f, g, h, j] 是否有 TensorFlow 函数来获取这些函数的组成?即[f(x), g(f(x)), h(g(f(x))), j(h(g(f(x))))]。
【问题讨论】:
标签: tensorflow keras deep-learning tensorflow2.0 tf.keras
假设我输入了 x 和函数列表 [f, g, h, j] 是否有 TensorFlow 函数来获取这些函数的组成?即[f(x), g(f(x)), h(g(f(x))), j(h(g(f(x))))]。
【问题讨论】:
标签: tensorflow keras deep-learning tensorflow2.0 tf.keras
Python 可以将可调用对象(即函数)分配给变量。如果您使用此功能,您可以轻松地遍历可调用列表以获取组合:
def compose(x):
# For more clarity, let's actually assign callables to variables
f = tf.nn.leaky_relu
g = lambda x: -x
h = tf.nn.sigmoid
j = tf.reduce_mean
callables = [f, g, h, j]
results = []
for func in callables:
x = func(x)
results.append(x)
return results
类似tf.map_fn 这样的并行形式在这种情况下是不可能的,因为一个元素依赖于先前的元素;流程本质上是顺序的。
【讨论】:
tf.scan 函数接受更广泛的输入集,Tensorflow 会很好。例如tf.scan(lambda initializer, fn: fn(initializer), [lambda x: x + 2, lambda x: x * 2, lambda x: x + 3, lambda x: x * 3], 0),但函数无法转换为张量支持的类型。