【问题标题】:Given input size: (128x1x1). Calculated output size: (128x0x0). Output size is too small给定输入大小:(128x1x1)。计算的输出大小:(128x0x0)。输出尺寸太小
【发布时间】:2018-07-02 06:57:34
【问题描述】:

我正在尝试训练一个看起来像这样的 U-Net

`class UNet(nn.Module):
def __init__(self, imsize):
    super(UNet, self).__init__()
    self.imsize = imsize

    self.activation = F.relu
    self.pool1 = nn.MaxPool2d(2)
    self.pool2 = nn.MaxPool2d(2)
    self.pool3 = nn.MaxPool2d(2)
    self.pool4 = nn.MaxPool2d(2)
    self.conv_block1_64 = UNetConvBlock(4, 64)
    self.conv_block64_128 = UNetConvBlock(64, 128)
    self.conv_block128_256 = UNetConvBlock(128, 256)
    self.conv_block256_512 = UNetConvBlock(256, 512)
    self.conv_block512_1024 = UNetConvBlock(512, 1024)

    self.up_block1024_512 = UNetUpBlock(1024, 512)
    self.up_block512_256 = UNetUpBlock(512, 256)
    self.up_block256_128 = UNetUpBlock(256, 128)
    self.up_block128_64 = UNetUpBlock(128, 64)

    self.last = nn.Conv2d(64, 1, 1)`

我使用的损失函数是

`class BCELoss2d(nn.Module):

def __init__(self, weight=None, size_average=True):
    super(BCELoss2d, self).__init__()
    self.bce_loss = nn.BCELoss(weight, size_average)

def forward(self, logits, targets):
    probs = F.sigmoid(logits)
    probs_flat = probs.view(-1)
    targets_flat = targets.view(-1)
    return self.bce_loss(probs_flat, targets_flat)`

输入的图片张量是[1,1,68,68],标签也是一样的形状

我收到此错误:

<ipython-input-72-270210759010> in forward(self, x)
 75 
 76         block4 = self.conv_block256_512(pool3)
---> 77         pool4 = self.pool4(block4)
     78 
  79         block5 = self.conv_block512_1024(pool4)

/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py in _    _call__(self, *input, **kwargs)
    323         for hook in self._forward_pre_hooks.values():
    324             hook(self, input)
 325         result = self.forward(*input, **kwargs)
    326         for hook in self._forward_hooks.values():
    327             hook_result = hook(self, input, result)

/usr/local/lib/python3.5/dist-packages/torch/nn/modules/pooling.py in forward(self, input)
    141         return F.max_pool2d(input, self.kernel_size, self.stride,
    142                             self.padding, self.dilation, self.ceil_mode,
--> 143                             self.return_indices)
    144 
    145     def __repr__(self):

/usr/local/lib/python3.5/dist-packages/torch/nn/functional.py in max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode, return_indices)
    332     See :class:`~torch.nn.MaxPool2d` for details.
    333     """
--> 334     ret = torch._C._nn.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)
    335     return ret if return_indices else ret[0]
    336 

RuntimeError: Given input size: (128x1x1). Calculated output size: (128x0x0). Output size is too small at /pytorch/torch/lib/THCUNN/generic/SpatialDilatedMaxPooling.cu:69

我猜我的频道大小或池大小有误,但我不确定错误到底出在哪里。

【问题讨论】:

  • 您是否尝试过通过正向传递打印张量大小?
  • 我尝试打印尺寸,但它在运行该部分代码之前抛出错误
  • 如果您提供可用于重现错误的代码,效果会更好。或者,您可以具体告诉我们哪条线导致了问题,以及执行每条线后的张量形状。否则,很难为您提供帮助。
  • @WasiAhmad 你的权利,我看看我能得到什么更多信息然后回到这里

标签: python neural-network deep-learning conv-neural-network pytorch


【解决方案1】:

您的问题是,在 Pool4 之前,您的图像已经缩小到 1x1pixel 大小的图像。因此,您需要提供一个更大的图像,其尺寸至少要翻一番(~134x134),或者在您的网络中移除一个池化层。

【讨论】:

  • 节省了我的 10000 小时
【解决方案2】:

对于nn.MaxPool2d() 函数,如果kernel_size 大于它的input_size 则会引发错误。

【讨论】:

    猜你喜欢
    • 2020-04-11
    • 2021-04-13
    • 1970-01-01
    • 2021-07-04
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    相关资源
    最近更新 更多