Keras使用fit_generator训练时model_5期望2输入却收3张量错误如何解决
错误原因
你的图像字幕生成模型为双输入结构(常规设计为图像特征输入+已生成文本序列输入),仅需要接收2个输入张量,但你的data_generator返回了3个独立张量,Keras会默认将生成器返回的所有张量识别为模型输入,因此触发输入数量不匹配的报错,多出的1个张量实际是训练用的目标标签。
修复方案
调整data_generator的返回格式,将两个输入张量打包为列表,与目标标签组成二元组返回即可,参考修改后的生成器核心逻辑:
def data_generator(train_descriptions, train_features, tokenizer, max_length): # 你原有数据处理逻辑保持不变 while 1: # 生成单批次的三个张量 batch_img_feature = 批次图像特征张量 # 模型第一个输入 batch_seq = 批次文本序列张量 # 模型第二个输入 batch_target = 批次下一词标签张量 # 训练目标 # 错误写法:直接返回三个张量 return batch_img_feature, batch_seq, batch_target # 正确写法:打包为 (输入列表, 目标) 的二元组 yield [batch_img_feature, batch_seq], batch_target
修改生成器后无需调整你现有训练循环的代码,重新运行训练即可正常执行。
可选优化
如果你使用的是TensorFlow 2.x版本,fit_generator已被官方弃用,你可以直接调用model.fit()传入生成器,参数保持一致即可正常运行。
内容的提问来源于stack exchange,提问作者WhataData
相关产品推荐
相关产品推荐

