numpy实现最大池化

最大池化的逻辑是在一个固定大小的格子类找到最大的值,他是一个无权重层

class max_pool():
    def __init__(self,pooling=(2,2), strides=(2, 2), padding=(0, 0)):
        self.pooling = pooling
        self.strides = strides
        self.padding = padding
    def forward(self,z):

        z = np.pad(z, ((0, 0),(0, 0), (self.padding[0], self.padding[0]), (self.padding[1], self.padding[1])), 'constant',
                        constant_values=(0, 0))
        N, C, H, W = z.shape
        out_H = int(H/2)
        out_W = int(W / 2)
        pool_z = np.zeros((N, C, out_H, out_W))
        for i in range(N):
            for j in range(C):
                for oi in range(out_H):
                    for oj in range(out_W):
                        pool_z[i,j,oi,oj] = np.max(z[i,j,
                                                        oi*self.strides[0]:  oi*self.strides[0]+ self.pooling[0],
                                                        oj*self.strides[1]:  oj*self.strides[1]+ self.pooling[1]
                                                ])
        return pool_z

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最大池化和平均池化是深度学习中常用的特征提取方法,以下是它们的代码实现最大池化: ```python import numpy as np def max_pooling(input, pool_size=(2, 2)): # 计算输出矩阵的大小 output_shape = (input.shape[0] // pool_size[0], input.shape[1] // pool_size[1]) # 初始化输出矩阵 output = np.zeros(output_shape) # 对于每个输出矩阵中的元素 for i in range(output_shape[0]): for j in range(output_shape[1]): # 找到输入矩阵中对应的子矩阵 sub_matrix = input[i*pool_size[0]:i*pool_size[0]+pool_size[0], j*pool_size[1]:j*pool_size[1]+pool_size[1]] # 将子矩阵中的最大值作为输出矩阵中的对应元素 output[i][j] = np.max(sub_matrix) return output ``` 平均池化: ```python import numpy as np def avg_pooling(input, pool_size=(2, 2)): # 计算输出矩阵的大小 output_shape = (input.shape[0] // pool_size[0], input.shape[1] // pool_size[1]) # 初始化输出矩阵 output = np.zeros(output_shape) # 对于每个输出矩阵中的元素 for i in range(output_shape[0]): for j in range(output_shape[1]): # 找到输入矩阵中对应的子矩阵 sub_matrix = input[i*pool_size[0]:i*pool_size[0]+pool_size[0], j*pool_size[1]:j*pool_size[1]+pool_size[1]] # 将子矩阵中的平均值作为输出矩阵中的对应元素 output[i][j] = np.mean(sub_matrix) return output ``` 其中,`input` 为输入矩阵,`pool_size` 为池化窗口大小。两种池化方法都是从输入矩阵中提取窗口内的特征,然后进行相应的操作得到输出矩阵。在这里,我们使用了 numpy 库,它提供了很方便的数组操作方法,如 `np.zeros`、`np.max` 和 `np.mean`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值