PyTorch搭建VAE使用Adam优化器报method不可迭代错误如何解决?
报错解决方法
直接错误原因
初始化Adam优化器时传入的参数错误:你传入了自定义的类方法model.param,而PyTorch优化器要求传入可迭代的模型可训练参数集合,因此触发'method' object is not iterable类型错误。
立即修复方案
将优化器初始化代码改为调用PyTorch内置的parameters()方法获取模型参数:
optim = torch.optim.Adam(model.parameters(), lr=0.01)
其他潜在问题修复建议
你当前的代码还存在多处逻辑错误,修复上述问题后仍会报错,建议同步调整:
- 编码器输出维度不匹配:编码器
self.enc的输出维度是786,但后续的self.mean、self.log层的输入维度设置为1200,维度无法对齐。需要将两个全连接层的输入维度改为786:self.mean = nn.Linear(786, 2) self.log_var = nn.Linear(786, 2) # 建议改名避免和Python内置log函数重名 - 重参数化逻辑适配性差:当前重参数化方法里的
eps写死了维度为(2,1200),batch size、隐变量维度变动就会报错,改为自动匹配mu的维度:# 建议把方法名改为reparameterize,避免和parameters()方法混淆 def reparameterize(self, mu, log_var): eps = torch.randn_like(mu) z = mu + eps * torch.exp(log_var * 0.5) return z - 损失函数选型错误:VAE不能用分类任务的
CrossEntropyLoss,需要使用「重构损失(MSE/BCE根据输入值域选择)+ KL散度正则项」的组合损失。
内容的提问来源于stack exchange,提问作者khashayar ehteshami
相关产品推荐
相关产品推荐

