pytorch 用卷積來表示平均池化
阿新 • • 發佈:2021-02-05
技術標籤: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)