Sun*_*eng 0 python neural-network max-pooling pytorch
我试图用Pytorch建立一个cnn,并且难以进行最大化.我采取了斯坦福大学持有的cs231n.正如我记得的那样,maxpooling可以用作维度推导步骤,例如,我有这个(1,20,高度,宽度)输入ot max_pool2d(假设我的batch_size是1).如果我使用(1,1)内核,我想得到这样的输出:(1,1,高度,宽度),这意味着内核应该在通道维度上滑动.但是,在检查了pytorch文档之后,它说内核在高度和宽度上滑动.感谢Pytorch论坛上的@ImgPrcSng告诉我使用max_pool3d,结果表明效果很好.但是在conv2d层的输出和max_pool3d层的输入之间仍然存在重塑操作.所以很难被聚合到一个nn.Sequential,所以我想知道还有另一种方法吗?
会这样的吗?
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()
input = input.permute(0,2,1)
return input.view(n,c,w,h)
Run Code Online (Sandbox Code Playgroud)
要在所有通道的每个坐标中进行最大池化,只需使用 einops 中的图层即可
from einops.layers.torch import Reduce
max_pooling_layer = Reduce('b c h w -> b 1 h w', 'max')
Run Code Online (Sandbox Code Playgroud)
图层可以像任何其他火炬模块一样在您的模型中使用