我对keras功能API中的语法如何工作感到困惑。它对定义复杂的多输入和输出模型非常有用。但语法对我来说有点令人费解。
new_layer = Conv2d(...)(old_layer)
据我所知,Conv2d是一个类。 Conv2d()()语法如何在python中工作?
Conv2d(...).(X)
相当于:
layer = Conv2d(...)
X = layer(X)
其中layer()
相当于layer.__call__(self,....)
。
python中实现__call__()
方法的每个对象都可以直接调用(你可以看看this question或this tutorial)。所有keras层都实现了这个函数(参见source),并且实现应该在给定输入张量的情况下返回层的输出。