DataLoader 未在 PyTorch 中随机采样

Mon*_*eck 3 python loader deep-learning pytorch

我的 DataLoader 在每个时期都返回相同的图像。我的模型每次只查看相同的单个图像(索引为“0”)(批量大小为 1...尽管无论如何,不​​同批量大小没有任何变化)。

这是我的数据集,精简为重要部分:

class MyDataset(Dataset):

    def __init__(self, path, loader=pil_loader):
        self.path = path
        self.images = os.listdir(path)

    def __getitem__(self, index):
        image = self.images[index]

    . . .
Run Code Online (Sandbox Code Playgroud)

这是数据集:

train_ds = MyDataset('/data')
Run Code Online (Sandbox Code Playgroud)

这是我的采样器:

train_sampler = RandomSampler(train_ds)
Run Code Online (Sandbox Code Playgroud)

这是我的数据加载器:

train_dl = DataLoader(train_ds, batch_size=1, sampler=train_sampler)
Run Code Online (Sandbox Code Playgroud)

我不确定为什么在训练期间它每次都会返回相同的图像。

是我RandomSampler设置不完整吗?或者也许我写错了__getitem__?我想不通。

Mon*_*eck 5

啊哈。好吧,如果有人最终遇到同样的问题,我知道它是什么,也许这会有所帮助。

我的定义__len__是错误的。

我想随机采样器取决于您如何设置长度方法。

我的暂时被模拟为

def __len__(self):
    return len(0)
Run Code Online (Sandbox Code Playgroud)

而不是真实的东西,例如:

def __len__(self):
    return len(self.images)
Run Code Online (Sandbox Code Playgroud)