Help with unevenly sized images in GAN models

I am trying to modify one of the example codes to have images of uneven ratios. I cannot find a solution anywhere on the internet. Can anyone help me? Here’s the full error:

Traceback (most recent call last):
  File "C:\Users\\Downloads\.py", line 298, in <module>
    main()
  File "C:\Users\\Downloads\.py", line 209, in main
    errD_real = criterion(output, label)
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\module.py", line 1736, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\module.py", line 1747, in _call_impl
    return forward_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\loss.py", line 697, in forward
    return F.binary_cross_entropy(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\functional.py", line 3545, in binary_cross_entropy
    raise ValueError(
ValueError: Using a target size (torch.Size([71])) that is different to the input size (torch.Size([142])) is deprecated. Please ensure they have the same size.

Also, before this, I tried to fix this error, and that seemed to cause the current problem

Traceback (most recent call last):
  File "C:\Users\\Downloads\.py", line 298, in <module>
    main()
  File "C:\Users\\Downloads\.py", line 207, in main
    output = netD(real_cpu).view(-1)
             ^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\module.py", line 1736, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\module.py", line 1747, in _call_impl
    return forward_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\Downloads\.py", line 155, in forward
    return self.main(input)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\module.py", line 1736, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\module.py", line 1747, in _call_impl
    return forward_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\container.py", line 250, in forward
    input = module(input)
            ^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\module.py", line 1736, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\module.py", line 1747, in _call_impl
    return forward_call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\conv.py", line 549, in forward
    return self._conv_forward(input, self.weight, self.bias)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\\AppData\Local\Programs\Python\Python312\Lib\site-packages\torch\nn\modules\conv.py", line 544, in _conv_forward
    return F.conv2d(
           ^^^^^^^^^
RuntimeError: Calculated padded input size per channel: (4 x 2). Kernel size: (4 x 4). Kernel size can't be greater than actual input size

Based on your description it seems you might have padded the input in the batch dimension or have used a view operation incorrectly which has then increased the batch size of the input. Check if this could be the case and post the model definition if not.

I apologize for the fact that I’ve switched to a completely different model now, but I still have an issue.
I am trying to change this model to use RGB instead of grayscale, and I have the issue of the model refusing to make an image with 3 channels, giving this error when I try to save an image:

ValueError: cannot reshape array of size 21632 into shape (208,104,3)

Any help is appreciated

Edit: Here’s how the models are defined

class Discriminator(nn.Module):
        def __init__(self, input_size, hidden_layer, output_size):
            super(Discriminator, self).__init__()
            self.fc1 = nn.Linear(input_size, hidden_layer*4)
            self.fc2 = nn.Linear(hidden_layer*4, hidden_layer*2)
            self.fc3 = nn.Linear(hidden_layer*2, hidden_layer)
            self.fc4 = nn.Linear(hidden_layer, output_size)
            self.dropout = nn.Dropout(0.3)
        
        def forward(self,x):
            x = x.view(-1, (xdim//sizediv)*(ydim//sizediv))
            x = F.leaky_relu(self.fc1(x), 0.2) # Negative slope of 0.2
            x = self.dropout(x)
            x = F.leaky_relu(self.fc2(x), 0.2)
            x = self.dropout(x)
            x = F.leaky_relu(self.fc3(x), 0.2)
            x = self.dropout(x)
            out = self.fc4(x)
            return out

    class Generator(nn.Module):
        def __init__(self, input_size, hidden_layer, output_size):
            super(Generator, self).__init__()
            self.fc1 = nn.Linear(input_size, hidden_layer)
            self.fc2 = nn.Linear(hidden_layer, hidden_layer*2)
            self.fc3 = nn.Linear(hidden_layer*2, hidden_layer*4)
            self.fc4 = nn.Linear(hidden_layer*4, output_size)
            self.dropout = nn.Dropout(0.3)
        def forward(self,x):
            x = F.leaky_relu(self.fc1(x), 0.2)
            x = self.dropout(x)
            x = F.leaky_relu(self.fc2(x), 0.2)
            x = self.dropout(x)
            x = F.leaky_relu(self.fc3(x), 0.2)
            x = self.dropout(x)
            out = F.tanh(self.fc4(x))

            return out

Another thing of note: Trying to change the size of the inputs and/or models leads to a different error:
RuntimeError: mat1 and mat2 shapes cannot be multiplied (1152x21632 and 64896x640)

Hi, how are you defining the input size/output size?, since you are using linear layers and 3 channel images it should be like HxWx3. Also, you should ensure that the RGB image is flattened before passing it to the model.

Daniel Gonzalez
Embedded SW Engineer at RidgeRun