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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章