【问题标题】:Sample each image from dataset N times in single batch在一个批次中从数据集中对每个图像进行 N 次采样
【发布时间】:2019-09-22 23:48:24
【问题描述】:
我目前正在从事学习表示(深度嵌入)的任务。我使用的数据集每个对象只有一个示例图像。我也使用增强。
在训练期间,每个批次必须包含数据集中单个图像的 N 个不同增强版本(dataset[index] 总是返回新的随机变换)。
是否有一些带有 DataLoader 的标准解决方案或库可以用于 torch.utils.data.distributed.DistributedSampler?
如果没有,任何继承自 torch.utils.data.DataLoader(并调用 super().__init__(...))的 DataLoader 是否可以在分布式训练中工作?
【问题讨论】:
标签:
python
neural-network
computer-vision
pytorch
distributed-computing
【解决方案1】:
据我所知,这不是一种标准的做事方式——即使每个对象只有一个样本,仍然会从每个批次的不同对象中采样不同的图像,并且在不同的时期,采样的图像将是变化不同。
也就是说,如果你真的想做你正在做的事情,为什么不简单地为你的数据集编写一个包装器呢?
class Wrapper(Dataset):
N = 16
def __getitem__(self, index):
sample = [ super().__getitem__(index) for _ in N ]
sample = torch.stack(sample, dim=0)
return sample
那么您的每个批次都是BxNxCxHxW,其中 B 是批次大小,N 是您的重复次数。从数据加载器获取批次后,您可以对其进行整形。