ValueError:优化器的参数列表为空

时间:2019-08-02 06:24:01

标签: pytorch

我创建以下简单的线性类:

class Decoder(nn.Module):
    def __init__(self, K, h=()):
        super().__init__()
        h = (K,)+h+(K,)
        self.layers = [nn.Linear(h1,h2) for h1,h2 in zip(h, h[1:])]

    def forward(self, x):
        for layer in self.layers[:-1]:
            x = F.relu(layer(x))
        return self.layers[-1](x)

但是,当我尝试将参数放入优化器类时,出现错误ValueError: optimizer got an empty parameter list

decoder = Decoder(4)
LR = 1e-3
opt = optim.Adam(decoder.parameters(), lr=LR)

我在做类定义时显然做错了吗?

1 个答案:

答案 0 :(得分:2)

由于您将图层存储在Decoder内的常规pythonic列表中,因此Pytorch无法告知self.list的这些成员实际上是子模块。将此列表转换为pytorch的{​​{3}},您的问题将得到解决

class Decoder(nn.Module):
    def __init__(self, K, h=()):
        super().__init__()
        h = (K,)+h+(K,)
        self.layers = nn.ModuleList(nn.Linear(h1,h2) for h1,h2 in zip(h, h[1:]))