MaxPooling 最大池化简单实现

#!/usr/bin/env python3
# -*-coding:utf8-*-
import numpy as np


def max_pooling(feature_map, size=2, stride=2):
    """max_pooling"""
    
    channel = feature_map.shape[0]
    height = feature_map.shape[1]
    width = feature_map.shape[2]
    # 确定最后的输出形状
    out_height = np.uint16((height - size) // stride + 1)
    out_width = np.uint16((width - size) // stride + 1)
    # print("out_shape", (out_height, out_width))
    
    out_pooling = np.zeros((channel, out_height, out_width), dtype=np.uint8)
    
    for map_num in range(channel):
        after_height = 0
        for m in np.arange(0, height, stride):
            after_width = 0
            for n in np.arange(0, width, stride):
                try:
                    out_pooling[map_num, after_height, after_width] = np.max(feature_map[map_num, m:m + size, n:n + size])
                # try执行不成功, 说明已经超出,终止循环
                except:
                    break
                after_width = after_width + 1
            after_height = after_height + 1
    return out_pooling


if __name__ == "__main__":
    input = np.arange(1, 28)
    input = input.reshape((3, 3, 3))
    print("池化前:", input)
    output = max_pooling(input, 2, 1)
    print("最大池化后:", output)
    print(output.dtype)
    print("out_shape", (output.shape))

Python3:

池化前: [[[ 1  2  3]
  [ 4  5  6]
  [ 7  8  9]]

 [[10 11 12]
  [13 14 15]
  [16 17 18]]

 [[19 20 21]
  [22 23 24]
  [25 26 27]]]

最大池化后: [[[ 5  6]
  [ 8  9]]

 [[14 15]
  [17 18]]

 [[23 24]
  [26 27]]]
uint8
"out_shape" (3, 2, 2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值