Python Pytorch:层返回列表';优化器得到一个空参数列表';
我有一个已定义的模型和已定义的层,我将已定义层的n个实例添加到模型的init函数中的列表中,如下所示: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
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=…我的问题是,我不知道层数,也无法设置名称。