出现此错误的原因是 evaluation_strategy="epoch"
指定了每个 epoch 后进行验证,但 Trainer
未传入 eval_dataset
,导致验证数据集缺失。要解决此问题,有以下两种方法:
解决方案 1:提供 eval_dataset
修改代码,将验证数据集传递给 Trainer
:
确保 tokenized_datasets
包含 "validation"
分区,如果没有,需要在数据预处理中创建验证集。例如,使用 train_test_split
来划分数据集:
from datasets import load_dataset
# 加载数据集并划分为训练集和验证集
dataset = load_dataset("wikitext", "wikitext-2-raw-v1")
tokenized_datasets = dataset.map(tokenize_function, batched=True, remove_columns=["text"])
tokenized_datasets = tokenized_datasets["train"].train_test_split(test_size=0.1)
解决方案 2:关闭验证
如果不需要验证,可以将 evaluation_strategy
改为 "no"
:
此时只会进行训练,不再执行验证步骤。
验证集 vs. 推理
验证集的作用是帮助评估模型在训练过程中是否出现过拟合或欠拟合,并指导模型的超参数调整。
验证集的作用:
- 评估泛化能力:验证模型在未见数据上的性能,帮助发现过拟合或欠拟合。
- 超参数调优:指导学习率、批次大小等超参数选择。
- 模型选择:在多模型中选择验证集上表现最好的模型。
- 早停机制:当验证损失不再下降时,停止训练。
推理的作用:
- 真实场景应用:在部署阶段,模型对新输入数据进行预测。
- 评估最终性能:使用测试集或实际数据,衡量模型实际效果。
区别:
- 验证集:用于训练过程中的性能评估和优化,不更新模型参数。
- 推理:是模型最终应用于新数据时的过程,只进行前向传播,评估模型的实用性和准确性。
验证集是训练中的工具,而推理是模型应用的最终目标。这是深度学习中易混淆的概念。
没有回复内容