Python Pytorch DCGAN示例不';无法处理不同的图像大小

Python Pytorch DCGAN示例不';无法处理不同的图像大小,python,neural-network,deep-learning,pytorch,generative-art,Python,Neural Network,Deep Learning,Pytorch,Generative Art,我试图以此为起点,从我自己的224x224图像的图像数据集构建GAN。图像大小包含在默认参数中(例如--imageSize 224) 以下是模型的代码片段: class _netG(nn.Module): def __init__(self, ngpu): super(_netG, self).__init__() self.ngpu = ngpu self.main = nn.Sequential( # input is Z, going into a

我试图以此为起点,从我自己的224x224图像的图像数据集构建GAN。图像大小包含在默认参数中(例如--imageSize 224)

以下是模型的代码片段:

class _netG(nn.Module):
def __init__(self, ngpu):
    super(_netG, self).__init__()
    self.ngpu = ngpu
    self.main = nn.Sequential(
        # input is Z, going into a convolution
        nn.ConvTranspose2d(     nz, ngf * 8, 4, 1, 0, bias=False),
        nn.BatchNorm2d(ngf * 8),
        nn.ReLU(True),
        # state size. (ngf*8) x 4 x 4
        nn.ConvTranspose2d(ngf * 8, ngf * 4, 4, 2, 1, bias=False),
        nn.BatchNorm2d(ngf * 4),
        nn.ReLU(True),
        # state size. (ngf*4) x 8 x 8
        nn.ConvTranspose2d(ngf * 4, ngf * 2, 4, 2, 1, bias=False),
        nn.BatchNorm2d(ngf * 2),
        nn.ReLU(True),
        # state size. (ngf*2) x 16 x 16
        nn.ConvTranspose2d(ngf * 2,     ngf, 4, 2, 1, bias=False),
        nn.BatchNorm2d(ngf),
        nn.ReLU(True),
        # state size. (ngf) x 32 x 32
        nn.ConvTranspose2d(    ngf,      nc, 4, 2, 1, bias=False),
        nn.Tanh()
        # state size. (nc) x 64 x 64
    )

def forward(self, input):
    if isinstance(input.data, torch.cuda.FloatTensor) and self.ngpu > 1:
        output = nn.parallel.data_parallel(self.main, input, range(self.ngpu))
    else:
        output = self.main(input)
    return output

class _netD(nn.Module):
def __init__(self, ngpu):
    super(_netD, self).__init__()
    self.ngpu = ngpu
    self.main = nn.Sequential(
        # input is (nc) x 64 x 64
        nn.Conv2d(nc, ndf, 4, 2, 1, bias=False),
        nn.LeakyReLU(0.2, inplace=True),
        # state size. (ndf) x 32 x 32
        nn.Conv2d(ndf, ndf * 2, 4, 2, 1, bias=False),
        nn.BatchNorm2d(ndf * 2),
        nn.LeakyReLU(0.2, inplace=True),
        # state size. (ndf*2) x 16 x 16
        nn.Conv2d(ndf * 2, ndf * 4, 4, 2, 1, bias=False),
        nn.BatchNorm2d(ndf * 4),
        nn.LeakyReLU(0.2, inplace=True),
        # state size. (ndf*4) x 8 x 8
        nn.Conv2d(ndf * 4, ndf * 8, 4, 2, 1, bias=False),
        nn.BatchNorm2d(ndf * 8),
        nn.LeakyReLU(0.2, inplace=True),
        # state size. (ndf*8) x 4 x 4
        nn.Conv2d(ndf * 8, 1, 4, 1, 0, bias=False),
        nn.Sigmoid()
    )

def forward(self, input):
    if isinstance(input.data, torch.cuda.FloatTensor) and self.ngpu > 1:
        output = nn.parallel.data_parallel(self.main, input, range(self.ngpu))
    else:
        output = self.main(input)

    return output.view(-1, 1).squeeze(1)
如果更改任何默认参数(例如--imageSize 224),则会出现以下错误:

Traceback (most recent call last):
   File "main.py", line 209, in <module>
      errD_real = criterion(output, label)
   File "/opt/python/lib/python3.6/site-
      packages/torch/nn/modules/module.py", line 210, in __call__
        result = self.forward(*input, **kwargs)
     File "/opt/python/lib/python3.6/site-
    packages/torch/nn/modules/loss.py", line 36, in forward
     return backend_fn(self.size_average, weight=self.weight)(input, 
   target)
    File "/opt/python/lib/python3.6/site-
      packages/torch/nn/_functions/thnn/loss.py", line 22, in forward
      assert input.nelement() == target.nelement()
     AssertionError
回溯(最近一次呼叫最后一次):
文件“main.py”,第209行,在
errD_real=标准(输出、标签)
文件“/opt/python/lib/python3.6/site-
程序包/torch/nn/modules/module.py”,第210行,输入调用__
结果=自我转发(*输入,**kwargs)
文件“/opt/python/lib/python3.6/site-
包裹/火炬/nn/modules/loss.py”,第36行,向前
返回后端\u fn(self.size\u average,weight=self.weight)(输入,
(目标)
文件“/opt/python/lib/python3.6/site-
包裹/torch/nn/_功能/thnn/loss.py”,第22行,向前
断言输入.neelement()==target.neelement()
断言错误
一开始我被告知尝试其他型号,但我也认为尝试回避这个问题会很好。我尝试了本文中的解决方案大纲,但仍然不起作用。我仍然在学习PyTorch,所以在上面的消息之前出现的网络架构还没有给我太多的直觉。我很感激你能给我的任何建议