我定义了如下的模型
class mymodel(nn.Module):
def __init__(self, hidden_dim):
super(mymodel, self).__init__()
# 定义 nn.Parameter 类型的参数
self.Alpha = nn.Parameter(torch.empty(hidden_dim), requires_grad=True).cuda()
nn.init.normal_(self.Alpha)
self.Beta = nn.Parameter(torch.empty(hidden_dim), requires_grad=True).cuda()
nn.init.normal_(self.Beta)
def forward(self, x):
return x
# 实例化模型
model = mymodel(hidden_dim=256)
# 打印模型的参数及其名称
for name, param in model.named_parameters():
print(name, param.size())
然而,在我定义如下的优化器时,
self.optimizer = Adam(model.parameters(), lr=self.lr, weight_decay=self.weight_decay)
提示我
ValueError: optimizer got an empty parameter list
出现这个情况是不正常的,因为我定义了alpha和beta两个可学习变量。
我通过询问GPT4.0, chatGPT,检查了
requires_grad=True
等一系列,但还是没能解决问题。
在我仔细排查后发现,在定义那2个变量时不能加.cuda()
这个也许是pytorch的隐藏bug吧
改为以下代码后就正常了。
class mymodel(nn.Module):
def __init__(self, hidden_dim):
super(mymodel, self).__init__()
# 定义 nn.Parameter 类型的参数
self.Alpha = nn.Parameter(torch.empty(hidden_dim), requires_grad=True)
nn.init.normal_(self.Alpha)
self.Beta = nn.Parameter(torch.empty(hidden_dim), requires_grad=True)
nn.init.normal_(self.Beta)
def forward(self, x):
return x
# 实例化模型
model = mymodel(hidden_dim=256)
# 打印模型的参数及其名称
for name, param in model.named_parameters():
print(name, param.size())