2017-10-04 97 views
-1

我试图建立一个与Pytorch的cnn,并在maxpooling困难。我拿走了斯坦福大学的cs231n。正如我回忆,maxpooling可以用作尺寸扣除步骤,例如,我有(1,20,高度,宽度)输入ot max_pool2d(假设我的batch_size为1)。如果我使用(1,1)内核,我想得到这样的输出:(1,1,height,width),这意味着内核应该滑过通道维度。但是,在检查pytorch文档后,它说内核在高度和宽度上滑动。还要感谢Pytorch论坛的@ImgPrcSng,他告诉我使用max_pool3d,结果表明它运行良好。但是conv2d图层的输出和max_pool3d图层的输入之间仍然存在重塑操作。所以它很难被聚合成一个nn.Sequential,所以我想知道是否有另一种方法来做到这一点?Pytorch maxpooling渠道维

+0

为了得到很好的答案,你应该给出很好的答案,这表明你在解决你的问题上的努力。还可以尝试使用[Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)很好地设置您的帖子的格式 – jdhao

回答

0

会这样的工作?

from torch.nn import MaxPool1D 
import functional as F 

class ChannelPool(MaxPool1D): 
    def forward(self, input): 
     n, c, w, h = input.size() 
     input = input.view(n,c,w*h).permute(0,2,1) 
     pooled = F.max_pool1d(input, self.kernel_size, self.stride, 
         self.padding, self.dilation, self.ceil_mode, 
         self.return_indices) 
     _, _, c = input.size() 
     return input.view(n,c,w,h)