当前位置:   article > 正文

“ValueError: Sum of input lengths does not equal the length of the input dataset!”

sum of input lengths does not equal the length of the input dataset!

这个错误信息 “ValueError: Sum of input lengths does not equal the length of the input dataset!” 通常出现在使用 PyTorchtorch.utils.data.random_split 或类似的函数来划分数据集时,划分的子集总长度与原始数据集的长度不匹配。

在 PyTorch 中,当你想把一个大的数据集划分为几个小的子集(例如训练集、验证集和测试集)时,你需要确保这些子集的长度之和等于原始数据集的长度。例如,如果你的原始数据集有 1000 个样本,你想划分为训练集和验证集,那么这两个子集的长度之和也必须是 1000。

假设你已经有了三个分开的文件夹 train, test, val,并且你想要从 train 文件夹创建一个训练集和一个验证集。这里有两种处理方式:

  1. 如果你的 train, test, val 文件夹已经包含了准确划分的数据,那么你不需要再次划分。你可以分别从这三个文件夹加载数据:

    train_dataset = MyDataset('path/to/train')
    val_dataset = MyDataset('path/to/val')
    test_dataset = MyDataset('path/to/test')
    
    • 1
    • 2
    • 3

    其中 MyDataset 是你定义的用于加载数据的类。

  2. 如果你只有一个大的数据集,需要划分,你应该这样操作:

    full_dataset = MyDataset('path/to/dataset')
    
    train_size = int(0.8 * len(full_dataset))
    val_size = int(0.1 * len(full_dataset))
    test_size = len(full_dataset) - train_size - val_size
    
    train_dataset, val_dataset, test_dataset = torch.utils.data.random_split(full_dataset, [train_size, val_size, test_size])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这个例子中,假设你想要将数据集划分为 80% 训练集,10% 验证集,和 10% 测试集。

请根据你的实际情况选择合适的方法。如果你的数据已经预先划分好了,就直接从各自的文件夹中加载;如果你需要从一个大的数据集中划分,确保划分的大小之和等于原始数据集的大小。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/149533
推荐阅读
相关标签
  

闽ICP备14008679号