我想以编程方式向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()])
我如何使其工作?
答案 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())
的模块添加到现有的有序模块集合中。