运行Flickr8k图像字幕模型时触发TypeError: use_causal_mask参数异常
解决TensorFlow图像字幕任务中MultiHeadAttention的
use_causal_mask参数报错 问题情况
将TensorFlow官方图像字幕教程中的特征提取模型从MobileNetV3替换为InceptionV3,处理Flickr8k数据集时触发TypeError:
TypeError: call() got an unexpected keyword argument 'use_causal_mask'
错误来自因果自注意力层对tf.keras.layers.MultiHeadAttention的调用,移除该参数后模型可正常运行。
问题根因
use_causal_mask是TensorFlow 2.10及以上版本新增的参数,若当前使用的TensorFlow版本低于该阈值,调用时传入此参数就会触发参数不识别的错误。
解决办法
方法1:直接移除参数
这是已验证有效的快速修复方式——删除MultiHeadAttention调用中的use_causal_mask参数,模型即可正常运行。
方法2:手动构建因果掩码(保留原逻辑)
若需要维持因果自注意力的功能,在低版本TensorFlow中可以手动生成掩码替代该参数:
# 获取解码器输入的序列长度 seq_len = tf.shape(decoder_inputs)[1] # 生成下三角掩码,实现因果注意力效果 causal_mask = tf.linalg.band_part(tf.ones((seq_len, seq_len)), -1, 0) # 用attention_mask参数传入掩码 attention_output = multi_head_attention( query=decoder_inputs, value=decoder_inputs, key=decoder_inputs, attention_mask=causal_mask )
方法3:升级TensorFlow版本
将TensorFlow升级到2.10或更高版本,即可直接使用use_causal_mask参数,无需修改代码。
内容的提问来源于stack exchange,提问作者Arijit Hazra
相关产品推荐
相关产品推荐

