最大池化的逻辑是在一个固定大小的格子类找到最大的值,他是一个无权重层
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