python 实现 average pooling 和 max pooling

发布时间 2023-03-27 17:21:46作者: 一泓喜悲vv

pooling的主要作用

1. 首要作用:下采样,降维,去除冗余信息。同时扩大感受野,保留了feature map的特征信息,降低参数量。

2. 实现非线性,一定程度上避免过拟合。

3. 可以实现特征不变性。包括平移不变性、旋转不变性、尺度不变性

import cv2
import numpy as np
 
input = np.array([
    [1,2,1,1],
    [0,1,2,1],
    [1,1,0,1],
    [3,0,0,1]])
 
k = np.array([
    [0,1,0],
    [0,1,0],
    [0,1,0]])
 
h,w = input.shape
conv = [] # 卷积操作
max_pool = [] # 最大池化
ave_pool = [] # 平均池化
 
for i in range(h-2):
    line_conv = []
    for j in range(w-2):
        t = input[i:i+3,j:j+3]
        line_conv.append(np.sum(k*t)) # 输入3×3区域和卷积核进行对应元素相乘再相加        
    conv.append(line_conv)    
 
for i in range(0,w,2):
    line_ave = []
    line_max = []
    for j in range(0,h,2):
        t = input[i:i+2,j:j+2]
        line_ave.append(np.sum(t)/4)   
        line_max.append(np.max(t)) # 注意, 要用np.max(), 不是max()
    ave_pool.append(line_ave)    
    max_pool.append(line_max)
 
print('conv = \n',conv,'\nmax_pool = \n',max_pool,'\nave_pool = \n',ave_pool)