1

我正在尝试使用训练 DCGAN 来为一些图像着色。这样做时,我将我的 GAN 设置在图像的灰度版本上。然后我想先用一批真实图像训练我的 GAN/判别器,然后再用一批假图像训练。每隔一段时间,我想比较图像的彩色、灰度和地面实况版本。因此,我需要以相同的方式拆分成批的真实/灰色图像。我使用pytorch。查看我包含的代码,这些应该提供相同的批次。然而,他们没有。

我试过没有worker_init_fn。我也尝试了不同的随机函数调用并将它们传递给 worker_init_fn 无济于事。

dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size,
                                          shuffle=True, num_workers=workers, worker_init_fn = random.seed(seed))

dataloader_gray = torch.utils.data.DataLoader(dataset_gray, batch_size=batch_size,
                                          shuffle=True, num_workers=workers, worker_init_fn = random.seed(seed))

for i, (data, data_gray) in enumerate(zip(dataloader, dataloader_gray)):
    doStuff()
4

1 回答 1

0

正如Haran Rajkumar在评论中指出的那样,更好的解决方案是事先将两个数据集连接起来,然后再应用torch.utils.DataLoader(前提是两个torch.utils.Dataset对象在开始时都包含完全相同顺序的图像)。

请注意,不必创建单独的类来执行此操作,torch.utils.data.ConcatDataset它提供了开箱即用的功能。

不确定您的确切代码,但这应该足够(或至少足以让您朝着正确的方向前进):

import torch

dataloader = torch.utils.data.DataLoader(
    torch.utils.data.ConcatDataset(dataset, dataset_gray),
    batch_size=batch_size,
    shuffle=True,
    num_workers=workers
)

for i, (data, data_gray) in enumerate(dataloader):
    doStuff()

如您所见,它更具可读性和更易于使用。

于 2019-04-22T13:22:48.320 回答