按照教程这里。我尝试使其适应我的数据集。
但是,我注意到在评估过程中
Seq2SeqTrainer
会调用 compute_metrics
3
次。
第一次它通过了正确的验证/测试集,但其他
2
次我不知道到底在传递什么,也不知道为什么调用compute_metrics
3
次?
请注意,下面的屏幕截图中的验证集有 6400 个样本,这些样本在第一次被
compute_metrics
调用时正确传递给 Seq2SeqTrainer
,但是第二次传递的其他 2
调用是什么? 和
predictions
的大小为
labels
,第三次调用
127
时,它会为
compute_metrics
和
predictions
传递某种类型的标量值。谁能解释一下这里到底发生了什么?
为什么
labels
会调用
Seq2SeqTrainer
3 次,而它应该只在通过大小为
compute_metrics
样本的验证集上的实际预测和标签时调用它一次?
6400
training_args = Seq2SeqTrainingArguments(
output_dir="t5_checkpoints",
learning_rate=2e-5,
per_device_train_batch_size=640,
per_device_eval_batch_size=640,
num_train_epochs=10,
weight_decay=0.01,
evaluation_strategy="epoch",
save_strategy="epoch",
save_total_limit=3,
predict_with_generate=True,
generation_max_length=128,
generation_num_beams=4,
load_best_model_at_end=True,
logging_steps=1,
)
trainer = Seq2SeqTrainer(
model=model,
args=training_args,
train_dataset=tokenized_data["train"],
eval_dataset=tokenized_data["valid"],
tokenizer=tokenizer,
data_collator=data_collator,
compute_metrics=compute_metrics,
)
作为
compute_metrics
的参数部分传递,直到除了标量值之外什么都没有剩下。现在事情“似乎有效”(即,没有错误,但在测试时模型似乎没有学习,即使任务很简单。训练准确率达到 90%,但在评估后,与真实标签相比,模型产生了错误的文本摘要。)
我遇到这个问题而不是 import Seq2SeqTrainingArguments 这就是为什么我找到了解决方案