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

多模态模型训练报错求助:Bert+ResNet50触发ValueError

问题解决:多模态模型训练时的输出名称不匹配报错

错误原因

生成器返回的目标数据字典使用键'output',但你的模型输出层未指定对应名称,Keras自动为输出层分配了默认名称(如'dense_18'),导致两者名称不匹配,触发ValueError。

解决方案

方法一:给模型输出层指定名称(推荐)

修改模型定义中最后一层Dense的代码,添加name='output'参数,让模型输出名称与生成器返回的目标键一致:

# 修改前
output = Dense(num_classes, activation='softmax')(x)

# 修改后
output = Dense(num_classes, activation='softmax', name='output')(x)

这样模型输出层的名称就会是'output',和生成器返回的{'output': np.array(lbls)}完全匹配。

方法二:修改生成器的目标键

如果不想改动模型,可以先查看当前模型输出层的实际名称,执行以下代码:

new_model = image_text_model()
print(new_model.output_names)

将输出的名称(比如'dense_18')替换生成器中的'output':

# 修改前
yield {'image_input': images, ...}, {'output': np.array(lbls)}

# 修改后(假设输出层名称是dense_18)
yield {'image_input': images, ...}, {'dense_18': np.array(lbls)}

注意:此方法不够稳定,当模型结构调整时,输出层名称可能会变化,优先推荐方法一。

额外注意事项

你的训练代码中缺少模型编译步骤,需要在new_model.fit()前添加编译代码,否则模型无法正常训练:

new_model = image_text_model()
optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3, epsilon=1e-08, clipnorm=1.0)
loss = tf.keras.losses.CategoricalCrossentropy()
# 添加编译步骤
new_model.compile(optimizer=optimizer, loss=loss)
new_model.fit(train_generator, epochs=2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:22:54