构建视频转文本模型时LED解码器缺失logits属性错误求助
问题解决:VisionEncoderDecoderModel使用LED解码器无logits输出
问题原因
你仅提取了LED模型的decoder核心编码模块,这个模块只负责生成隐藏状态,没有附带用于输出文本概率的语言建模头(LM Head)。而VisionEncoderDecoderModel默认需要解码器具备LM Head才能生成logits,因此前向传播后返回的对象只有隐藏状态,没有logits属性,触发报错。
解决方案
有两种可行的修复方式:
方法1:直接加载完整LED模型作为解码器
使用AutoModelForSeq2SeqLM加载完整的LED模型,它包含解码器主体和对应的LM Head,VisionEncoderDecoderModel会自动识别并使用这个头生成logits:
from transformers import AutoModel, AutoModelForSeq2SeqLM, VisionEncoderDecoderModel enc = "MCG-NJU/videomae-base" dec = "allenai/led-base-16384" encoder = AutoModel.from_pretrained(enc) # 加载完整的LED seq2seq模型 decoder = AutoModelForSeq2SeqLM.from_pretrained(dec) model = VisionEncoderDecoderModel(encoder=encoder, decoder=decoder)
方法2:手动为提取的解码器添加LM Head
如果必须单独使用LED的解码器主体,需要手动挂载对应的LM Head,并配置必要的模型参数:
from transformers import AutoModel, LEDForConditionalGeneration, VisionEncoderDecoderModel enc = "MCG-NJU/videomae-base" dec = "allenai/led-base-16384" encoder = AutoModel.from_pretrained(enc) # 加载完整LED模型以获取LM Head led_full_model = LEDForConditionalGeneration.from_pretrained(dec) # 提取解码器主体 decoder = led_full_model.decoder # 挂载LED的LM Head到解码器 decoder.lm_head = led_full_model.lm_head # 同步解码器配置 decoder.config = led_full_model.config # 构建模型并配置生成相关参数 model = VisionEncoderDecoderModel(encoder=encoder, decoder=decoder) model.config.decoder_start_token_id = led_full_model.config.decoder_start_token_id model.config.pad_token_id = led_full_model.config.pad_token_id model.config.vocab_size = led_full_model.config.vocab_size
验证
修改后运行你的推理代码,output对象会包含logits属性,可通过print(output.logits.shape)查看输出形状。
内容的提问来源于stack exchange,提问作者jeg
相关产品推荐
相关产品推荐

