我使用 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
然后我从这个类创建了一个对象并将它传递给 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)
Exception: thread parallelism mode is not supported for old DataSets
我的问题是为什么将 DataLoader2 模块添加到 PyTorch 与 DataLoader 有什么不同,它有什么好处?
PyTorch 版本:1.10.1
最佳答案
你绝对不应该使用它DataLoader2
。
torch.utils.data.DataLoader2
(实际上是torch.utils.data.dataloader_experimental.DataLoader2
)
作为实验性“功能”添加,作为 DataLoader
的 future 替代品。它被定义为 here .目前,它只能在 master 分支上访问(不稳定),当然官方页面上没有记录。
关于python - PyTorch 中的 DataLoader 和 DataLoader2 有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70865699/
相关文章:
c++ - 用方括号 [] 初始化 std::vector
ios - FBSDKGraphRequest 实例方法 '-startWithCompletion
java - Lombok 继承 : how to set default value for fi
javascript - 在 React.js 中使用 Dropzone 时如何将图像上传到 Fir
sql - 窗口 SUM 函数如何在内部与 OVER 一起工作?
python - Kubernetespodoperator如何使用cmds或者cmds和argum