今天看论文时,看到一篇语义分割的文章,发现作者使用了一个adaptive average pooling的pooling 操作。一看这个怎么还没有见过。然后百度一搜发现这是pytroch 独有的一个pooling 操作。我平时一般使用的是keras.
看了一下这个原理,发现它是知道输出大小再进行pooling 池化的操作。
我们平时一般使用的池化操作一般都是定义 kerne_size ,strde 和padding 来计算output_size
adaptive pooling 就是知道inputsize和outputsize 求解kernek_size和stride
最后查看源码可以得到下面的公式
这里有了公式这样就可以进行操作了。
def adapmaxpooling(x,outsize):
x_shape=K.int_shape(x)
batchsize1,dim1,dim2,channels1=x_shape
stride=np.floor(dim1/outsize).astype(np.int32)
kernels=dim1-(outsize-1)*stride
adpooling=MaxPooling2D(pool_size=(kernels,kernels),strides=stride)(x)
return adpooling
这样就可以了。这里我参考了AdaptivePooling与Max/AvgPooling相互转换。 感谢作者。