【问题标题】: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 是您的重复次数。从数据加载器获取批次后,您可以对其进行整形。

    【讨论】:

      猜你喜欢
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2017-08-24
      • 2017-12-11
      • 2018-02-04
      • 2018-09-18
      相关资源
      最近更新 更多