最大池化代码
import numpy as np
def max_pooling(det,pool_param):
M,N,H,W=det.shape()
H1,W1,stride=pool_param['pool_heaight'],pool_param['pool_width',pool_param['stride']]
H2=int(H-H1/stride)+1
W2=int(W-W1/stride)+1
out=np.zeros(M,N,H,W)
for i in range(len(H2)):
for j in range(len(W2)):
out[...,i,j]=np.max(det[...,i*stride:i*stride+H2,j*stride:j*stride+W2],axis=(2,3))
result=(det,out,pool_param)
return out,result
np.max()讲解:
import numpy as np
#定义矩阵
a=[[1,2,3],[1,2,3]]
b=np.array(a)
print(b.shape) #2*3
print(b.max(axis=0).shape) #(3,)
a = [[[1,2,3],[11,22,33]],[[10,20,30],[110,220,330]],[[101,201,301],[11001,22001,33001]],[[55,66,77],[550,660,770]]]
b=np.array(a)
print(b.size) #24
print(b.shape) # 4*2*3
print(b.max(axis=0).shape)
# [[ 101 201 301]
# [11001 22001 33001]] 2*3
print(b.max(axis=1).shape)
# [[ 11 22 33]
# [ 110 220 330]
# [11001 22001 33001]
# [ 550 660 770]] 4*3
print(b.max(axis=2).shape) 4*2
shape=[x, y, z],从这里结果看:
- axis=0,返回shape=[y,z]
每个x中的全部[y,z]作比较,即每个x元素的比较 - axis=1,返回shape=[x,z]
在每个x元素内,每个y中的z维度元组比较 - axis=2,返回shape=[x,y]
在每个z中的内部元素做比较
axis=n表示在n维比较各个元素,对应数值位置,最后消除了n维度。