9

当我在主函数的这一行中调用 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

很确定我正确导入了所有的火炬模块。关于我在这里做错了什么的任何想法?

谢谢!

4

2 回答 2

11

这样做时,Network.parameters()您正在调用静态方法 parameters

但是,parameters是一个实例方法

所以你必须Network在调用之前实例化parameters

network = Network()
optimizer = optim.SGD(network.parameters(), lr=0.001, momentum=0.9)

或者,如果您只需要 Network first 这个特定的行:

optimizer = optim.SGD(Network().parameters(), lr=0.001, momentum=0.9)
于 2017-05-04T09:55:23.707 回答
1

您需要一个特定的Network实例,而不仅仅是Network class

optimizer = optim.SGD(Network().parameters(), lr=0.001, momentum=0.9)

请注意括号以创建Network.

于 2017-05-04T09:52:56.193 回答