用训练器评估拥抱面变换器给出不同的结果

问题描述 投票:0回答:0

我正在使用预训练的 Transformer 进行序列分类,我使用 Trainer 类对我的数据集进行了微调。当我使用 Trainer 类评估模型时,我得到的准确率为 94%

trainer = Trainer(model=model)
preds = trainer.predict(validation_dataset)
predictions = np.argmax(preds.predictions, axis=-1)

metric = evaluate.load("accuracy")
metric.compute(predictions=predictions, references=preds.label_ids)
# prints: {'accuracy': 0.9435554514341591}

然而,当我试图直接从模型中得到预测时,准确率只有 86% 左右:

predictions = []
model.eval()
for row in validation_dataset:
    text_ids = row['input_ids'].unsqueeze(0)
    predicted = torch.argmax(model(text_ids)[0])
    predictions += [predicted.item()]

metric.compute(predictions, labels)
# prints {'accuracy': 0.8639942552151239}

我想知道为什么训练者和模型的预测不同。此外,为什么训练者预测的准确性要好得多?我是不是遗漏了什么或者是实施不当的迹象?

python machine-learning huggingface-transformers
© www.soinside.com 2019 - 2024. All rights reserved.