pytorch:层列表返回“优化器有一个空参数列表”

时间:2018-09-12 14:58:15

标签: python python-3.x pytorch

我有一个已定义的模型和已定义的层,我将我的已定义层的n个实例添加到模型的init函数中的列表中,如下所示:

    self.layers = []
    for i in range(len(nhid)-1):
        self.layers.append(MyLayer(nhid[i], nhid[i+1]))

但是当我通过创建优化器时

optim.Adam(model.parameters(),lr=args.lr, weight_decay=args.weight_decay) 

它说:

  

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

但是当我按照如下方式将其编写为两层时,我没有出现错误:

self.layer1 = MyLayer[nhid[0],nhid[1]]
self.layer2 = MyLayer[nhid[1],nhid[2]]

2 个答案:

答案 0 :(得分:3)

我通过使用nn.ModuleList()如下解决了这个问题:

temp = []
for i in range(len(nhid)-1):
    temp.append(MyLayer(nhid[i], nhid[i+1]))
self.layers = nn.ModuleList(temp)

我也读过nn.Sequential(),但是我没有找到如何正确使用它的方法。

答案 1 :(得分:0)

你有

nhid[0], nhid[1], nhid[2]

所以len(nhid)3

所以

for i in range(len(nhid)-1):
    self.layers.append(MyLayer(nhid[i], nhid[i+1]))

成为

for i in range(2):
    self.layers.append(MyLayer(nhid[i], nhid[i+1]))

self.layers.append(MyLayer(nhid[0], nhid[1]))
self.layers.append(MyLayer(nhid[1], nhid[2]))

将其与您的无错误方法进行比较:

self.layer1 = MyLayer[nhid[0],nhid[1]]
self.layer2 = MyLayer[nhid[1],nhid[2]]

在第一种(错误)方法中,您没有设置对象属性layer1layer2