2017-10-04 99 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)