PyTorch 中的 DataLoader 和 DataLoader2 有什么不同?

Ami*_*lah 6 python deep-learning data-science pytorch

我使用 PyTorch 数据集类开发了一个自定义数据集。代码是这样的:

class CustomDataset(torch.utils.data.Dataset):

    def __init__(self, root_path, transform=None):
        self.path = root_path
        self.mean = mean
        self.std = std
        self.transform = transform
        self.images = []
        self.masks = []

        for add in os.listdir(self.path):
            # Some script to load file from directory and appending address to relative array
            ...

        self.masks.sort()
        self.images.sort()

    def __len__(self):
        return len(self.images)

    def __getitem__(self, item):
        image_address = self.images[item]
        mask_address = self.masks[item]



        if self.transform is not None:
            augment = self.transform(image=np.asarray(Image.open(image_address, 'r', None)),
                                     mask=np.asarray(Image.open(mask_address, 'r', None)))
            image = Image.fromarray(augment['image'])
            mask = augment['mask']

        if self.transform is None:
            image = np.asarray(Image.open(image_address, 'r', None))
            mask = np.asarray(Image.open(mask_address, 'r', None))

        # Handle Augmentation here

        return image, mask
Run Code Online (Sandbox Code Playgroud)

然后我从此类创建了一个对象并将其传递给 torch.utils.data.DataLoader。虽然这对于 DataLoader 效果很好,但对于 torch.utils.data.DataLoader2 我遇到了问题。错误是这样的:

dataloader = torch.utils.data.DataLoader2(dataset=dataset, batch_size=2, pin_memory=True, num_workers=4)

例外:旧数据集不支持线程并行模式

我的问题是为什么将 DataLoader2 模块添加到 PyTorch 中,它与 DataLoader 有何不同以及它的好处是什么?

PyTorch 版本:1.10.1

Iva*_*van 3

你绝对不应该使用它DataLoader2

torch.utils.data.DataLoader2(实际上torch.utils.data.dataloader_experimental.DataLoader2)被添加为实验性“功能”,作为未来的替代品DataLoader. 它在这里定义。目前,它只能在master分支上访问(不稳定),当然没有在官方页面上记录。