问题
有没有现成的Python方法可以从函数列表[f1,f2,f3]中组成多个嵌套的函数g = f3(f2(f1())),其中列表中还有更多函数。
如果有的话,我可以做:
g = lambda x: f3(f2(f1(x)))
但是,当我在深度神经网络中有数十个功能(例如层)时,它是无法管理的。最好不要创建另一个函数来编写g,而是要找到可用的方法。更新
基于@Chris的答案。对于顺序神经网络层
[ batchnorm, matmul, activation, softmaxloss ]
,每个层都有forward(X)
方法来计算其输出到下一层,损失函数L和损失将为:L = reduce(lambda f, g: lambda X: g(f(X)), [ layer.forward for layer in layers ] ) # Loss function
network_loss = L(X)
最佳答案
一种使用functools.reduce
的方法:
from functools import reduce
f1 = lambda x: x+1
f2 = lambda x: x*2
f3 = lambda x: x+3
funcs = [f1, f2, f3]
g = reduce(lambda f, g: lambda x: g(f(x)), funcs)
输出:g(1)==7 # ((1+1) * 2) + 3
g(2)==9 # ((2+1) * 2) + 3
洞察力:functools.reduce
将根据其第一个参数(此处为funcs
)链接其第二个参数(此处为lambda
)。话虽如此,它将开始将
f1
和f2
链接为f_21(x) = f2(f1(x))
,然后将f3
和f_21
链接为f3(f_21(x))
,成为g(x)
。
关于python - 如何从函数列表[f1,f2,f3,... fn]组成嵌套函数g = fn(...(f3(f2(f1()))...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66149076/