Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 给定输入大小:(128x1x1)。计算输出大小:(128x0x0)。输出大小太小_Python_Neural Network_Deep Learning_Conv Neural Network_Pytorch - Fatal编程技术网

Python 给定输入大小:(128x1x1)。计算输出大小:(128x0x0)。输出大小太小

Python 给定输入大小:(128x1x1)。计算输出大小:(128x0x0)。输出大小太小,python,neural-network,deep-learning,conv-neural-network,pytorch,Python,Neural Network,Deep Learning,Conv Neural Network,Pytorch,我正在训练一个U形网,看起来像这样 `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.MaxPoo

我正在训练一个U形网,看起来像这样

`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
前进(自身,x)
75
76块4=自转换块256块512(池3)
--->77 pool4=self.pool4(块4)
78
79 block5=self.conv_block512_1024(池4)
/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py in_uu_u_u调用(self,*input,**kwargs)
323用于自钩子。\u前进\u预钩子。值():
324挂钩(自身,输入)
325结果=自转发(*输入,**kwargs)
326用于钩住自身。\u向前\u钩住.values():
327钩子结果=钩子(自身、输入、结果)
/前进中的usr/local/lib/python3.5/dist-packages/torch/nn/modules/pooling.py(self,input)
141返回F.max_pool2d(输入,self.kernel_大小,self.stride,
142自填充、自扩张、自细胞模式,
-->143.自回归指数)
144
145定义报告(自我):
/max_pool2d中的usr/local/lib/python3.5/dist-packages/torch/nn/functional.py(输入、内核大小、步幅、填充、扩展、ceil模式、返回索引)
332有关详细信息,请参见:类:`~torch.nn.MaxPool2d`。
333     """
-->334 ret=torch.\u C.\u nn.max\u pool2d(输入、内核大小、步幅、填充、扩展、ceil\u模式)
335如果返回,则返回ret,否则返回[0]
336
运行时错误:给定的输入大小:(128x1x1)。计算的输出大小:(128x0x0)。输出大小在/pytorch/torch/lib/THCUNN/generic/SpatialDilatedMaxPooling处太小。cu:69

我猜我在通道大小或池大小上犯了一个错误,但我不确定错误到底在哪里。

你的问题是,在池4之前,你的图像已经缩小到了
1x1
像素大小的图像。所以你需要输入一个更大的图像,大小至少是原来的两倍(~134x134)或者删除网络中的池层。

您是否尝试过在前向传递上打印张量大小?我尝试过打印大小,但它会在运行代码的该部分之前抛出错误如果您提供可用于复制错误的代码会更好。或者,您可以明确告诉我们是哪一行导致了问题,以及张量s“执行每一行后都会有结果。否则,就很难帮助你了。@瓦西亚赫马:你的权利,我看看我能得到什么更多的信息,然后再回来这里。”