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

Pytorch ValueError:优化器获取的参数列表为空,pytorch,Pytorch,我创建了以下简单的线性类: 类解码器(nn.Module): 定义(self,K,h=()): super()。\uuuu init\uuuuu() h=(K,)+h+(K,) self.layers=[nn.Linear(h1,h2)表示压缩中的h1,h2(h,h[1:])] def前进(自身,x): 对于self.layers[:-1]中的层: x=F.relu(层(x)) 返回自我层[-1](x) 然而,当我尝试将参数放入优化器类时,我得到了错误ValueError:optimizer得

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

类解码器(nn.Module):
定义(self,K,h=()):
super()。\uuuu init\uuuuu()
h=(K,)+h+(K,)
self.layers=[nn.Linear(h1,h2)表示压缩中的h1,h2(h,h[1:])]
def前进(自身,x):
对于self.layers[:-1]中的层:
x=F.relu(层(x))
返回自我层[-1](x)
然而,当我尝试将参数放入优化器类时,我得到了错误
ValueError:optimizer得到了一个空的参数列表

解码器=解码器(4)
LR=1e-3
opt=optm.Adam(decoder.parameters(),lr=lr)

类定义有什么明显的错误吗?

由于您将层存储在
解码器中的常规pythonic列表中,Pytorch无法告诉
self的这些成员。列表实际上是子模块。将此列表转换为pytorch,您的问题将得到解决

类解码器(nn.Module):
定义(self,K,h=()):
super()。\uuuu init\uuuuu()
h=(K,)+h+(K,)
self.layers=nn.ModuleList(nn.Linear(h1,h2)表示压缩中的h1,h2(h,h[1:]))

由于您将层存储在
解码器中的常规pythonic列表中,Pytorch无法告诉
self.list
的这些成员实际上是子模块。将此列表转换为pytorch,您的问题将得到解决

类解码器(nn.Module):
定义(self,K,h=()):
super()。\uuuu init\uuuuu()
h=(K,)+h+(K,)
self.layers=nn.ModuleList(nn.Linear(h1,h2)表示压缩中的h1,h2(h,h[1:]))

现在看另一个答案可能会重复,这肯定是同一个问题。然而,我认为我的代码更容易阅读。因此,对于编辑来说,如果他们想留下这个或者删除这个。现在看另一个答案可能是重复的,这肯定是同一个问题。然而,我认为我的代码更容易阅读。因此,如果编辑想保留或删除此内容,请访问他们。@neerajswankar如果您有nee问题:请按原样发布,而不是以神秘的方式发布comment@NEERAJSWARNKAR如果你有一个新的问题:把它贴出来,而不是作为一个隐晦的评论