实例化模型后仍报parameters()缺少self参数的TypeError问题排查
PyTorch中
TypeError: parameters() missing 1 required positional argument: 'self'问题解析 错误含义解释
在Python类中,self是实例方法的第一个必填参数,代表当前类的实例对象。PyTorch的nn.Module类中,parameters()是实例方法,必须通过类的实例调用——如果直接用类名调用该方法,Python不会自动传入实例对象作为self参数,就会抛出这个报错。
问题定位
你的代码存在两处问题:
- 优化器初始化错误:
你写的torch.optim.Adam(AddNN.parameters(), lr = .05)是直接用类名AddNN调用parameters(),而不是用已实例化的模型对象net。parameters()需要通过模型实例来获取参数,正确写法应为net.parameters()。 - forward方法缩进错误:
forward方法被缩进在__init__方法内部,变成了__init__的嵌套函数,而非类的成员方法。后续调用模型时,PyTorch会因找不到forward方法触发新错误。
修正后的关键代码
class AddNN(nn.Module): def __init__(self): super().__init__() self.input = nn.Linear(2,16) self.fc1 = nn.Linear(16,32) self.fc2 = nn.Linear(32,1) self.output = nn.Linear(1,1) # forward方法与__init__同级缩进 def forward(self, x): x = F.relu(self.input(x)) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) return self.output(x) net = AddNN() lossfun = nn.MSELoss() # 使用模型实例调用parameters() optimizer = torch.optim.Adam(net.parameters(), lr = .05)
内容的提问来源于stack exchange,提问作者Rainbow
相关产品推荐
相关产品推荐

