我创建了以下简单的线性类:
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)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将参数放在优化器类中时,我得到了错误ValueError: optimizer got an empty parameter list。
decoder = Decoder(4)
LR = 1e-3
opt = optim.Adam(decoder.parameters(), lr=LR)
Run Code Online (Sandbox Code Playgroud)
类定义有什么我做的明显错误吗?
由于您将层存储在Decoder.py中的常规pythonic列表中,Pytorch 无法告诉这些成员self.list实际上是子模块。将此列表转换为pytorch nn.ModuleList,您的问题将得到解决
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:]))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1463 次 |
| 最近记录: |