在 pytorch 中池化通道

Pooling over channels in pytorch

在 tensorflow 中,我可以合并深度维度,这会减少通道并保持空间维度不变。我正在尝试在 pytorch 中做同样的事情,但 documentation 似乎说池只能在高度和宽度尺寸上完成。有没有办法可以在 pytorch 中汇集频道? 我有一个形状为 [1,512,50,50] 的张量,我正在尝试使用池将通道数减少到 3。 我看到 this question 但没有找到有用的答案。

减少通道数量的最简单方法是使用 1x1 内核:

import torch                                                                                                                                                                                               

x = torch.rand(1, 512, 50, 50)                                                                                                                                                                                  
conv = torch.nn.Conv2d(512, 3, 1)                                                                                                                                                                             
y = conv(x)                                                                                                                                                                                                   

print(y.size())                                                                                                                                                                                                   
# torch.Size([1, 3, 50, 50])

如果由于某种原因你真的需要沿着通道维度执行池化,你可能想要置换维度,以便通道维度与其他维度(例如宽度)交换。 这个想法被引用 here.