adaptive pooling keras 实现。

今天看论文时,看到一篇语义分割的文章,发现作者使用了一个adaptive average pooling的pooling 操作。一看这个怎么还没有见过。然后百度一搜发现这是pytroch 独有的一个pooling 操作。我平时一般使用的是keras.

看了一下这个原理,发现它是知道输出大小再进行pooling 池化的操作。

我们平时一般使用的池化操作一般都是定义 kerne_size ,strde 和padding 来计算output_size

output\_size=ceil((input_size+2*padding-kernekl\_size)/stride)+1

adaptive pooling 就是知道inputsize和outputsize 求解kernek_size和stride

最后查看源码可以得到下面的公式

stride=floor((input\_size/(output\_size))

kernel\_size=input\_size-(output\_size-1)*stride 

padding=0

这里有了公式这样就可以进行操作了。

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相互转换。 感谢作者。

adaptive pooling

你可能感兴趣的:(AI)