Python Pytorch:层返回列表';优化器得到一个空参数列表';

Python Pytorch:层返回列表';优化器得到一个空参数列表';,python,python-3.x,pytorch,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])) temp = [] for i in range(len(nhid)-1): temp.append(MyLayer(nhid[i], nhid[i+1])) sel

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

    self.layers = []
    for i in range(len(nhid)-1):
        self.layers.append(MyLayer(nhid[i], nhid[i+1]))
temp = []
for i in range(len(nhid)-1):
    temp.append(MyLayer(nhid[i], nhid[i+1]))
self.layers = nn.ModuleList(temp)
但是当我创建优化器时

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]]
你有

nhid[0], nhid[1], nhid[2]
所以
len(nhid)
3

所以

变成

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

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

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

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

我使用
nn.ModuleList()
解决了问题,如下所示:

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

我也读过关于
nn.Sequential()
,但我没有找到如何正确使用它。

很抱歉,我不知道应该如何设置对象属性?
self.layer1=…
self.layer2=…我的问题是,我不知道层数,也无法设置名称。