当我在主函数的这一行调用pytorch中的Network.parameters()时出现了问题:optimizer = optim.SGD(Network.parameters(), lr=0.001, momentum=0.9)
我得到了以下错误代码:
TypeError: parameters() missing 1 required positional argument: 'self'
我的网络是在这个类中定义的
class Network(nn.Module):def __init__(self): super(Network, self).__init__() self.conv1 = nn.Conv2d(1, 32, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(32, 64, 5) self.pool2 = nn.MaxPool2d(2, 2) self.conv3 = nn.Conv2d(64, 64, 5) self.pool2 = nn.MaxPool2d(2, 2) self.fc1 = nn.Linear(64 * 5 * 5, 512) self.fc2 = nn.Linear(512, 640) self.fc3 = nn.Linear(640, 3756)def forward(self, x): x = self.pool(F.relu(self.conv(x))) x = self.pool(F.relu(self.conv2(x))) x = self.pool(F.relu(self.conv3(x))) x = x.view(-1, 64 * 5 * 5) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x
我确定我正确导入了所有torch模块。有什么想法可以告诉我哪里做错了?
谢谢!
回答:
当你执行Network.parameters()
时,你是在调用静态方法parameters
。
但是,parameters
是一个实例方法。
所以你必须先实例化Network
,然后再调用parameters
。
network = Network()optimizer = optim.SGD(network.parameters(), lr=0.001, momentum=0.9)
或者,如果你只需要Network在这一特定行使用:
optimizer = optim.SGD(Network().parameters(), lr=0.001, momentum=0.9)