今天看論文時,看到一篇語義分割的文章,發現作者使用了一個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相互轉換。 感謝作者。