为什么Seq2SeqTrainer在使用T5时评估时会产生错误?

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

按照教程这里。我尝试使其适应我的数据集。

但是,我注意到在评估过程中

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,
)

enter image description here

nlp huggingface-transformers huggingface huggingface-trainer
2个回答
0
投票
事实证明,问题是 jupyter 笔记本中的隐藏状态,它递归地调用

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%,但在评估后,与真实标签相比,模型产生了错误的文本摘要。) 


0
投票
请卸载变形金刚最新版本并尝试 使用-:pip安装变压器==4.20.0 我已经尝试过这个了

我遇到这个问题而不是 import Seq2SeqTrainingArguments 这就是为什么我找到了解决方案

© www.soinside.com 2019 - 2024. All rights reserved.