【问题标题】:Conditional GAN - shuffle/split two datasets identically条件 GAN - 相同地洗牌/拆分两个数据集
【发布时间】:2019-09-11 14:57:29
【问题描述】:

我正在尝试使用训练 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()

【问题讨论】:

  • 您在不同的数据加载器中加载彩色图像和灰色图像,如何确保它们正确配对?
  • Haran 也许我的问题表述得很糟糕。我的问题是如何批量正确配对图像。通过使用相同的 RNG/种子拆分批次,图像应该正确配对。但是,我做错了..
  • 尝试改用torch.manual_seed()。您还检查过加载器加载的第一张图片吗?颜色和灰色是否相互对应?在不同的运行中,加载器是否加载相同顺序的图像?
  • 我试过 worker_init_fn = torch.manual_seed。不会改变任何东西。结果显示在这里imgur.com/a/uCSDvmB。灰色应该只是图像的灰色版本,而不是完全不同。
  • 我建议创建一个继承数据集的新类,该类按顺序加载两个图像。与使用种子值相比,这将是一个更强大的解决方案。

标签: dataset pytorch dcgan


【解决方案1】:

正如 Haran Rajkumar 在 cmets 中指出的那样,更好的解决方案是预先连接两个数据集,然后应用 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()

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

【讨论】:

  • 谢谢。我接受了@HaranRajkumar 的建议并创建了一个新课程。它有效!
  • IMO 这种方法更短更易读,但很高兴它对你有用。
猜你喜欢
  • 1970-01-01
  • 2017-11-14
  • 2020-03-20
  • 2019-01-25
  • 1970-01-01
  • 2018-10-10
  • 2021-06-22
  • 1970-01-01
相关资源
最近更新 更多