You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:24:02