首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"ValueError:您必须指定input_ids或inputs_embeds“在培训AutoModelWithLMHead模型(GPT-2)时

"ValueError:您必须指定input_ids或inputs_embeds“在培训AutoModelWithLMHead模型(GPT-2)时
EN

Stack Overflow用户
提问于 2022-01-04 10:26:25
回答 2查看 597关注 0票数 0

我想微调AutoModelWithLMHead模型从这个储存库,这是一个德国的GPT-2模式.我遵循了教程的预处理和微调。我已经为微调准备了一堆文字段落,但在开始训练时,我会收到以下错误:

代码语言:javascript
复制
File "GPT\lib\site-packages\torch\nn\modules\module.py", line 1102, in _call_impl
    return forward_call(*input, **kwargs)
  File "GPT\lib\site-packages\transformers\models\gpt2\modeling_gpt2.py", line 774, in forward
    raise ValueError("You have to specify either input_ids or inputs_embeds")
ValueError: You have to specify either input_ids or inputs_embeds

这是我的代码供参考:

代码语言:javascript
复制
# Load data
with open("Fine-Tuning Dataset/train.txt", "r", encoding="utf-8") as train_file:
    train_data = train_file.read().split("--")

with open("Fine-Tuning Dataset/test.txt", "r", encoding="utf-8") as test_file:
    test_data = test_file.read().split("--")

# Load pre-trained tokenizer and prepare input
tokenizer = AutoTokenizer.from_pretrained('dbmdz/german-gpt2')

tokenizer.pad_token = tokenizer.eos_token
train_input = tokenizer(train_data, padding="longest")
test_input = tokenizer(test_data, padding="longest")

# Define model

model = AutoModelWithLMHead.from_pretrained("dbmdz/german-gpt2")
training_args = TrainingArguments("test_trainer")


# Evaluation

metric = load_metric("accuracy")

def compute_metrics(eval_pred):
    logits, labels = eval_pred
    predictions = numpy.argmax(logits, axis=-1)
    return metric.compute(predictions=predictions, references=labels)

# Train
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_input,
    eval_dataset=test_input,
    compute_metrics=compute_metrics,
)
trainer.train()
trainer.evaluate()

有人知道原因吗?欢迎任何帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-04 14:08:06

我没有找到这个问题的具体答案,但找到了解决办法。对于任何寻找如何从HuggingFace微调GPT模型的例子,您可能会看到这个存储库。他们列举了几个例子,说明如何微调不同的转换器模型,并辅之以文档化的代码示例。我使用了run_clm.py脚本,它实现了我想要的结果。

票数 0
EN

Stack Overflow用户

发布于 2022-06-23 14:13:51

train_dataseteval_dataset需要一个torch.utils.data.Datasettorch.utils.data.IterableDataset类型的对象。例如,您可以使用Huggingface的数据集库加载数据,并以下列方式处理:

代码语言:javascript
复制
import datasets
data = datasets.load_dataset("text", data_files={"train": "Fine-Tuning Dataset/train.txt", "test":"Fine-Tuning Dataset/test.txt"})

def tokenize_function(element):
    return tokenizer(element, padding="longest")

tokenized_data = dataset.map(tokenize_function, batched=True)

现在,以下内容应该可以工作(与您附加的其他代码一起使用):

代码语言:javascript
复制
# Train
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_data['train'],
    eval_dataset=tokenized_data['test'],
    compute_metrics=compute_metrics,
)
trainer.train()
trainer.eval()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70577285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档