"ModelScope中,现在数据集有1000条以上,报以下错误,怎么解决? :Traceback (most recent call last):
File ""train.py"", line 27, in
output = sft_main(sft_args)
File ""/models/swift/swift/utils/run_utils.py"", line 31, in x_main
result = llm_x(args, kwargs)
File ""/models/swift/swift/llm/sft.py"", line 134, in llm_sft
train_dataset, val_dataset = get_dataset(
File ""/models/swift/swift/llm/utils/dataset.py"", line 1522, in get_dataset
dataset_dict = train_d.train_test_split(
File ""/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py"", line 557, in wrapper
out: Union[""Dataset"", ""DatasetDict""] = func(self, *args, kwargs)
File ""/opt/conda/lib/python3.8/site-packages/datasets/fingerprint.py"", line 481, in wrapper
out = func(dataset, args, *kwargs)
File ""/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py"", line 4388, in train_test_split
raise ValueError(
ValueError: test_size=1 should be either positive and smaller than the number of samples 1 or a float in the (0, 1) range"
遇到这个错误是因为在使用train_test_split函数时,传入的test_size参数值为1,这导致了试图将整个数据集划分为测试集而没有留给训练集任何数据。解决方法如下:
检查参数:确认你在调用get_dataset或直接使用train_test_split时,是否错误地将test_size设置为了1。应该将其设置为一个正整数或一个(0,1)区间内的浮点数,以表示测试集占总数据集的比例或具体样本数。
调整分割比例:如果你希望保留大部分数据用于训练,可以设置test_size为一个小于1的浮点数,例如0.2表示20%的数据用于测试,其余80%用于训练。或者,如果你需要指定具体的测试样本数,确保该数目小于总样本数。
代码修改示例:在调用相关函数时,修改test_size的值。例如,如果你想让测试集占20%,可以这样修改:
train_dataset, val_dataset = get_dataset(..., test_size=0.2)
或者,直接调整为具体样本数(假设总样本数足够):
train_dataset, val_dataset = get_dataset(..., test_size=200) # 假设200是合理的测试样本数
确保所做的修改符合你的数据集大小和模型训练需求。这样调整后,错误应该会得到解决,数据集能够正确地被分割为训练集和验证集。
ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉群号:44837352