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

微调microsoft/trocr-base-printed遇ValueError问题求助

微调TrOCR模型识别验证码时遭遇ValueError问题求助

我正在微调microsoft/trocr-base-printed图像转文本模型以实现验证码文本识别,遇到了ValueError: You have to specify either decoder_input_ids or decoder_inputs_embeds错误,尝试过相关教程的解决方法但无效,恳请帮忙排查问题。

以下是我的Python代码:

from transformers import TrOCRProcessor, VisionEncoderDecoderModel, BertTokenizer
from transformers import pipeline, default_data_collator
from datasets import load_dataset, Image as image
from datasets import Dataset, Features, Array3D
from PIL import Image
from transformers import Seq2SeqTrainer, Seq2SeqTrainingArguments

from glob import glob

import time
import os
import pandas as pd
import numpy as np
import pyarrow as pa
import pickle

picture_path = './captcha_100'
LIMIT = 100
directory = os.listdir(picture_path)[:LIMIT]
target = pd.read_csv('./captcha.csv').to_numpy().tolist()
data = []
picture = []

#read captcha picture from local directory
for d in directory:
    picture.append(Image.open(picture_path+'/'+d))

processor = TrOCRProcessor.from_pretrained('microsoft/trocr-base-printed')
model = VisionEncoderDecoderModel.from_pretrained('microsoft/trocr-base-printed')

#What I believe this code snippet can help me, but it's not work
model.config.decoder_start_token_id = processor.tokenizer.cls_token_id
model.config.pad_token_id = processor.tokenizer.pad_token_id
model.config.vocab_size = model.config.decoder.vocab_size

#making my own dataset
for i in range(LIMIT):
    temp = {}
    temp['pixel_values'] = processor(picture[i]).pixel_values[0].tolist()
    temp['answer'] = target[i][0]
    data.append(temp)
    
data = pa.Table.from_pylist(data)
data = Dataset(data)   
data = data.train_test_split(train_size=0.8)

#giving training arguments
training_args = Seq2SeqTrainingArguments(
    output_dir="./captcha100",
    per_device_train_batch_size=16,
    evaluation_strategy="steps",
    num_train_epochs=4,
    fp16=True,
    save_steps=100,
    eval_steps=100,
    logging_steps=10,
    learning_rate=2e-4,
    save_total_limit=2,
    remove_unused_columns=False,
    load_best_model_at_end=True,
)

trainer = Seq2SeqTrainer(
    model=model,
    args=training_args,
    train_dataset=data["train"],
    eval_dataset=data["test"],
    tokenizer=processor.feature_extractor,
    data_collator=default_data_collator
)

#train
trainer.train()
model = model.to('cpu')

#save the model
with open('captchaModel100.pkl', 'wb') as f:
    pickle.dump(model, f)

with open('processor.pkl', 'wb') as f:
    pickle.dump(processor, f)

完整报错栈如下:

Traceback (most recent call last):
  File "/home/aclab/Joywang/captcha/train_captcha.py", line 68, in <module>
    trainer.train()
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/transformers/trainer.py", line 1501, in train
    return inner_training_loop(
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/transformers/trainer.py", line 1749, in _inner_training_loop
    tr_loss_step = self.training_step(model, inputs)
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/transformers/trainer.py", line 2508, in training_step
    loss = self.compute_loss(model, inputs)
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/transformers/trainer.py", line 2540, in compute_loss
    outputs = model(**inputs)
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1190, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/transformers/models/vision_encoder_decoder/modeling_vision_encoder_decoder.py", line 609, in forward
    decoder_outputs = self.decoder(
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1190, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/transformers/models/trocr/modeling_trocr.py", line 958, in forward
    outputs = self.model.decoder(
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1190, in _call_impl
    return forward_call(*input, **kwargs)
  File "/home/aclab/.virtualenvs/cudatest/lib/python3.9/site-packages/transformers/models/trocr/modeling_trocr.py", line 637, in forward
    raise ValueError("You have to specify either decoder_input_ids or decoder_inputs_embeds")
ValueError: You have to specify either decoder_input_ids or decoder_inputs_embeds

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:50:43