多模态seq2seq组装时报Could not compute output KerasTensor错误如何解决?
错误诱因
- 解码器输入定义违规:Keras Functional API要求模型输入必须为扁平化的张量列表,你在构建解码器时使用了嵌套列表
[decoder_inputs, [state_inputs1,state_inputs2]]作为输入,导致Keras无法正确追踪张量的计算路径。 - 解码器调用方式错误:调用
decoder时你将decoder_target和编码器输出作为两个独立的位置参数传入,而Keras层的__call__方法第一个参数接收所有输入张量的集合,后续位置参数为training、mask等控制参数,参数匹配错误导致模型计算输出时找不到对应张量,最终触发断言错误。
修复方案
1. 修改解码器定义
将build_decoder函数中模型返回行的输入参数扁平化,去掉嵌套结构:
# 原错误代码 # return Model(inputs=[decoder_inputs, [state_inputs1,state_inputs2]], outputs=decoder_outputs, name="final_decoder") # 修改后代码 return Model(inputs=[decoder_inputs, state_inputs1, state_inputs2], outputs=decoder_outputs, name="final_decoder")
2. 修改解码器调用逻辑
调用时将所有输入张量打包为一个列表传入,先拆分编码器输出的两个状态,再统一传入解码器:
# 原错误代码 # result = decoder(decoder_target, encoder(inputs)) # 修改后代码 encoder_state_h, encoder_state_c = encoder(inputs) result = decoder([decoder_target, encoder_state_h, encoder_state_c])
内容的提问来源于stack exchange,提问作者Damian Grzanka
相关产品推荐
相关产品推荐

