最大池化和平均池化相加代码实现
时间: 2023-09-25 09:13:02 浏览: 59
最大池化和平均池化是深度学习中常用的特征提取方法,以下是它们的代码实现:
最大池化:
```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`。