1. 程式人生 > 其它 >pytorch 用卷積來表示平均池化

pytorch 用卷積來表示平均池化

技術標籤:python卷積深度學習卷積神經網路計算機視覺神經網路

我們知道平均池化的作用就是kernel_size大小的池化視窗在特徵圖上滑動,池化視窗覆蓋到的特徵圖的值相加後平均作為該覆蓋區域的值輸出。如果我們用卷積的操作去表示平均池化,卷積的權重可以表示為(假設為二維資料,kernel_size=3):
在這裡插入圖片描述
注意:此時卷積核的權重不再是可訓練引數。

程式碼實現:

# 定義卷積核的權重引數
def define_Conv_to_Avg2d(in_channel,out_channel,kernel_size):
    if isinstance (kernel_size,int):
        weight=
torch.ones((in_channel,out_channel,kernel_size,kernel_size)) xs=kernel_size*kernel_size weight=weight/xs elif isinstance (kernel_size,tuple) and len(kernel_size)==2: weight=torch.ones((in_channel,out_channel,kernel_size[0],kernel_size[1])) xs=kernel_size[0]*
kernel_size[1] weight=weight/xs else: print('kernel_size size error!') return weight
Pi = nn.Conv3d(in_channel,out_channel,kernel_size=3,stride=2, padding=1, bias=False)

# 因為池化不改變通道大小,所以這裡in_channel=out_channel
Pi.weight=torch.nn.Parameter(define_Conv_to_Avg2d(
in_channel,out_channel,kernel_size=3),requires_grad=False)