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

Keras多输入模型调用model.fit报'tuple'无shape属性错误如何解决?

问题根源
  • 自定义数据生成器的标签返回格式不符合单输出模型的要求:你的create_data_generator函数在返回数据时,将标签包裹在了列表中yield [_gen1, _gen2], [_gen1_l],而你的模型只有1个输出,Keras 单输出模型默认期望接收的标签是单个张量,而非被列表/元组包裹的张量。
  • 指标计算时结构不匹配:当启用metrics=['acc']时,Keras会自动对齐标签和模型输出的结构,你返回的列表格式标签会被解析为tuple结构,和模型单输出的张量结构无法匹配,触发了访问shape属性的报错。
解决方案

二选一即可:

方案1:修改生成器返回格式(推荐)

直接返回单个标签张量,去掉标签外层的列表包裹:

def create_data_generator(data_gen_one, data_gen_two):
    while(True):
        _gen1, _gen1_l = next(data_gen_one)
        _gen2, _gen2_l = next(data_gen_two)
        # 标签不包裹列表,直接返回单个张量
        yield [_gen1, _gen2], _gen1_l

注:你已经设置两个生成器shuffle=False且两份DataFrame样本顺序一致,可保证输入和标签的对应关系正确。

方案2:对齐模型编译时的指标格式

如果不想修改生成器代码,可在编译模型时将指标也包裹为对应层级的列表,匹配标签的结构:

model.compile(
    optimizer="adam",
    loss="categorical_crossentropy",
    # 标签是长度为1的列表,指标也对应包裹为嵌套列表
    metrics=[["acc"]]
)
额外优化建议

你的卷积层构造函数中存在变量重复定义的问题(acti02、pool02被多次赋值),虽然不会触发本次报错,但可能导致后续调试逻辑混乱,建议修改为唯一变量名。

内容的提问来源于stack exchange,提问作者Sensei Munk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:27:03