【问题标题】:Spliting the dataset using SubsetRandomSampler not working使用 SubsetRandomSampler 拆分数据集不起作用
【发布时间】:2021-06-17 11:41:39
【问题描述】:

我使用SubsetRandomSampler 将训练数据拆分为训练 (80%) 和验证数据 (20%)。但它在拆分后(4996)显示了相同数量的图像:

>>> print('len(train_data): ', len(train_loader.dataset))
>>> print('len(valid_data): ', len(validation_loader.dataset))
len(train_data):  4996
len(valid_data):  4996

完整代码:

import numpy as np
import torch
from torchvision import transforms
from torch.utils.data.sampler import SubsetRandomSampler

train_transforms = transforms.Compose([transforms.ToTensor(),
                                       transforms.Normalize([0.485, 0.456, 0.406],
                                                            [0.229, 0.224, 0.225])])
dataset = datasets.ImageFolder( '/data/images/train', transform=train_transforms )

validation_split = .2
shuffle_dataset = True
random_seed= 42
batch_size = 20

dataset_size = len(dataset) #4996
indices = list(range(dataset_size))
split = int(np.floor(validation_split * dataset_size))

if shuffle_dataset :
    np.random.seed(random_seed)
    np.random.shuffle(indices)
train_indices, val_indices = indices[split:], indices[:split]

train_sampler = SubsetRandomSampler(train_indices)
valid_sampler = SubsetRandomSampler(val_indices)

train_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, sampler=train_sampler)
validation_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, sampler=valid_sampler)

【问题讨论】:

    标签: python python-3.x random pytorch pytorch-dataloader


    【解决方案1】:

    train_loader.datasetvalidation_loader.dataset 是返回加载程序从中采样的底层原始数据集(即大小为 4996 的原始数据集)的方法。

    如果您遍历加载器本身,您会看到它们只返回与您在每个采样器的索引中包含的一样多的样本(考虑批处理)。

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2018-10-19
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多