2017-10-04 2 views
-1

J'essayais de construire un cnn avec Pytorch, et j'avais du mal à le faire. J'ai pris le cs231n tenu par Stanford. Comme je l'ai rappelé, maxpooling peut être utilisé comme une étape de déduction dimensionnelle, par exemple, j'ai cette entrée (1, 20, hauteur, largeur) ot max_pool2d (en supposant que mon batch_size est 1). Et si j'utilise le noyau (1, 1), je veux obtenir une sortie comme ceci: (1, 1, hauteur, largeur), ce qui veut dire que le noyau devrait glisser sur la dimension du canal. Cependant, après avoir vérifié les docs de pytorch, il dit que le noyau glisse sur la hauteur et la largeur. Et merci à @ImgPrcSng sur le forum Pytorch qui m'a dit d'utiliser max_pool3d, et ça s'est bien passé. Mais il y a toujours une opération de refonte entre la sortie de la couche conv2d et l'entrée de la couche max_pool3d. Donc, il est difficile d'être agrégé dans un nn.Sequentiel, alors je me demande s'il existe une autre façon de le faire?Pytorch maxpooling sur les canaux dimension

+0

Afin d'obtenir de bonnes réponses, vous devez donner de bonnes réponses qui démontrent votre effort pour résoudre votre problème. Essayez également de formater votre message en utilisant [Markdown] (https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) – jdhao

Répondre

0

Un truc pareil pourrait-il fonctionner?

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)