以下是pytorch文档的nn.Module
中的示例代码:
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.conv1 = nn.Conv2d(1, 20, 5)
self.conv2 = nn.Conv2d(20, 20, 5)
def forward(self, x):
x = F.relu(self.conv1(x))
return F.relu(self.conv2(x))
在这里,我们正在x
函数中将self.conv1()
传递给forward
。
但是,self.conv1
是一个变量,就像self.conv1 = nn.Conv2d(1, 20, 5)
函数中此行__init__
一样。
这怎么可能?
答案 0 :(得分:1)
以功能方式var(x)
完成pytorch,层或网络中任何内容的转发。这是使用内置的__call__()
覆盖的python制作的。自己尝试。制作一个类,覆盖__call__()
并将其用作函数。
答案 1 :(得分:0)
我看到这是一个很好的问题。
self.conv1 = nn.Conv2d(1, 20, 5)
self.conv1
确实是一个变量,但它也是派生自nn.Module
的特殊类变量(阅读:模块)。
它也是可调用的,已实现的__call__
方法,这就是我们可以调用它的原因。