python - 如何从函数列表[f1,f2,f3,... fn]组成嵌套函数g = fn(...(f3(f2(f1()))...)

标签 python

问题
有没有现成的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)。
话虽如此,它将开始将f1f2链接为f_21(x) = f2(f1(x)),然后将f3f_21链接为f3(f_21(x)),成为g(x)

关于python - 如何从函数列表[f1,f2,f3,... fn]组成嵌套函数g = fn(...(f3(f2(f1()))...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66149076/

相关文章:

python - MCQ 类型字符串的正则表达式

python - 无法在浏览器上打开 jupyter(ipython) notebook

Python Azure Databrick : 'DataFrame' object does not support item assignment

python - 如何用python提取图像链接

python - python 中的简单命令行应用程序 - 解析用户输入?

python - h5py文件和pickle文件保存模型的区别

python - 如何从一个 wlst 脚本调用另一个 wlst 脚本?

python - 调用 Python 函数而不向其传递参数 - animate(i)

python - 为什么 NotImplemented 在 Python 3 中是真实的?

python - Django 时区字段不接受所有 pytz 时区