您可以像在Pytorch中一样将变量传递给Python中的数据成员吗?

时间:2019-07-03 14:00:02

标签: python pytorch

以下是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__一样。

这怎么可能?

2 个答案:

答案 0 :(得分:1)

以功能方式var(x)完成pytorch,层或网络中任何内容的转发。这是使用内置的__call__()覆盖的python制作的。自己尝试。制作一个类,覆盖__call__()并将其用作函数。

答案 1 :(得分:0)

我看到这是一个很好的问题。

self.conv1 = nn.Conv2d(1, 20, 5)

self.conv1确实是一个变量,但它也是派生自nn.Module的特殊类变量(阅读:模块)。

它也是可调用的,已实现的__call__方法,这就是我们可以调用它的原因。