下面的代码是 CNN 中使用的最大池化算法。我一直面临的问题是,考虑到大量的特征图,它的速度非常慢。其缓慢的原因很明显——计算机必须在每个特征图上执行数万次迭代。那么,我们如何降低算法的计算复杂度呢?
('inputs' 是一个包含所有特征图的 numpy 数组,'pool_size' 是一个包含池维度的元组。)
def max_pooling(inputs, pool_size):
feature_maps = []
for feature_map in range (len(inputs)):
feature_maps.append([])
for i in range (0, len(inputs[feature_map]) - pool_size[0], pool_size[0]):
for j in range (0, len(inputs[feature_map]) - pool_size[0], pool_size[0]):
feature_maps[-1].append(np.array(max((inputs[feature_map][j:j+pool_size[0], i:i+pool_size[0]]).flatten())))
return feature_maps