我如何在pytorch中将层添加到Nural网络

时间:2019-01-06 14:29:25

标签: python-3.x pytorch

我想以编程方式向Nural网络添加一个层,它返回了此错误TypeError: forward() missing 1 required positional argument: 'x'

class Net(nn.Module):


    def __init__(self):
        super(Net, self).__init__()

        self.fc1 = nn.Linear(1, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  
        num_features = 1
        for s in size:
            num_features *= s
        return num_features


netz =Net()
print(netz)



netz = nn.Sequential([nn.Linear(10, 120), netz()])



print(netz)
`

我在用netz=torch.load()加载它时发生了相同的错误

似乎引起错误的行是:netz = nn.Sequential([nn.Linear(10, 120), netz()])

我如何使其工作?

1 个答案:

答案 0 :(得分:0)

好的,有几件事。

从为什么要调用netz()开始,您就已经用netz =Net()实例化了该对象,因此这没有任何意义。

第二件事,nn.Sequential期望*args作为“构造函数”参数,因此您直接传递模块的子类:netz = nn.Sequential(Net(), nn.Linear(100,100))或解压缩它们:nn.Sequential(*[nn.Linear(100,100), Net()])

您还可以使用OrderedDict添加多个模块,如PyTorch docs中所述(您应该进行咨询-在那里是有原因的!

model = nn.Sequential(OrderedDict([
          ('conv1', nn.Conv2d(1,20,5)),
          ('relu1', nn.ReLU()),
          ('conv2', nn.Conv2d(20,64,5)),
          ('relu2', nn.ReLU())
        ]))

您还可以将带有my_modules.add_module("my_module_name", Net())的模块添加到现有的有序模块集合中。