报错TypeError: 'Adam'类型不可迭代的原因及解决咨询
ISR超分模型训练问题排查与解决
1. 可训练权重差异警告的处理
你遇到的UserWarning: Discrepancy between trainable weights and collected trainable weights...警告,是因为ISR库的模型并非标准Keras模型,不支持原生Keras的model.compile()方法,所以常规Stack Overflow上针对Keras模型的解决方案不适用。
这个警告属于ISR内部权重管理逻辑和Keras原生逻辑的差异,不会干扰模型训练和最终超分效果,完全可以忽略。
2. Adam不可迭代错误的原因与修复
TypeError: argument of type 'Adam' is not iterable错误,是因为ISR的训练接口对优化器的传参格式有要求——它需要优化器参数是可迭代类型(列表或字典),而你直接传入了单个Adam实例。
错误示例:
from tensorflow.keras.optimizers import Adam opt = Adam(lr=1e-4) model.train(train_dir='...', val_dir='...', optimizer=opt) # 直接传Adam实例触发错误
正确写法二选一:
- 包装成列表传入:
opt = [Adam(lr=1e-4)] model.train(train_dir='...', val_dir='...', optimizer=opt) - 用字典指定优化器(更贴合ISR官方推荐):
opt = {'name': 'adam', 'lr': 1e-4} model.train(train_dir='...', val_dir='...', optimizer=opt)
3. 代码运行有效性确认
Colab中出现的相同警告不影响代码运行,只要修复优化器传参错误后,你可以通过以下方式验证:
- 跑一个极小批量的训练数据(比如1-2个epoch,少量样本)
- 查看训练过程中是否输出损失值,且损失呈下降趋势
- 用训练后的模型测试一张低分辨率图,看是否能生成超分结果
内容的提问来源于stack exchange,提问作者Kerim Mirzeyev
相关产品推荐
相关产品推荐

