还有一种常用的操作是k-max-pooling.这种是在max-pooling上改进来的,因为max-pooling操作太简单粗暴了,k-max-pooling认为每一块不只一个点重要,前几个亮点都比较重要,所以在每一个pooling块中取了前k大的值。
import torch
def kmax_pooling(x, dim, k):
index = x.topk(k, dim=dim)[1].sort(dim=dim)[0]
return x.gather(dim, index)
x = torch.rand(4, 5, 6, 10)
print(x) # [torch.FloatTensor of size 4x5x6x10]
y = kmax_pooling(x, 3, 5)
print(y) # # [torch.FloatTensor of size 4x5x6x5]