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

TensorFlow2.6训练多输出GAN判别器报ListWrapper无minimize属性错误

报错原因

你在编译多输出判别器c_model时,为optimizer参数传入了列表[opt, opt],TensorFlow 2.6的Keras框架会将该列表包装为ListWrapper对象,而训练时框架需要调用优化器的minimize方法执行参数更新,ListWrapper本身没有该方法,因此触发AttributeError。

常规多输出模型如果所有输出共享同一个优化器,直接传入单个优化器实例即可,不需要封装为列表。只有需要为不同输出指定独立优化器的场景才需要传入列表/字典,且该场景在TensorFlow 2.6版本中无法通过默认的compile+train_on_batch逻辑实现,需要写自定义训练循环。

修复方案

修改c_model的编译代码,将optimizer参数改为单个优化器实例即可:

c_model = Model(inputs = in_image, outputs = [c_out_layer, d_out_layer])
opt = tf.keras.optimizers.SGD(learning_rate=0.0002)
# 仅修改optimizer参数,其余配置保持不变
c_model.compile(
    loss=['sparse_categorical_crossentropy', 'binary_crossentropy'],
    optimizer=opt,
    metrics=['accuracy', 'accuracy']
)
额外注意事项

多输出模型调用train_on_batch返回的结果维度与单输出不同,顺序为「总损失 + 每个输出的损失 + 每个输出的指标」,你当前的返回值接收代码会触发不匹配报错,建议调整为:

# 对应返回值:总损失、分类分支损失、判别分支损失、分类分支准确率、判别分支准确率
total_loss, c_loss, d_loss, c_acc, d_acc = c_model.train_on_batch(Xsup_real, [ysup_real, label_real])

内容的提问来源于stack exchange,提问作者Arpit Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:09:04