卷积神经网络中卷积层的计算公式
时间: 2025-04-16 17:33:09 浏览: 174
### 卷积神经网络中的卷积层计算公式
在卷积神经网络中,卷积层的运算主要依赖于输入特征图与滤波器之间的卷积操作。对于给定的一个二维输入 \( X \),以及大小为 \( F×F \) 的滤波器 \( W \),输出特征图 \( Y \) 中位置 (i,j) 处的值可以通过下述公式来表示:
\[Y(i, j)=\sum_{u=0}^{F-1}\sum_{v=0}^{F-1}X(i+u, j+v)\cdot W(u,v)+b\]
这里 \( b \) 表示偏置项[^2]。
当考虑步幅(stride)和填充(padding)时,上述公式的应用会有所变化。设输入尺寸为 \( H_w × H_h \),滤波器尺寸为 \( K_w × K_h \),步幅为 \( S_w × S_h \),零填充宽度为 \( P_w × P_h \),则经过一次卷积后的输出维度可以按照下面的方式计算得出:
\[O_w=\left(\frac{H_w-K_w+2P_w}{S_w}\right)+1,\quad O_h=\left(\frac{H_h-K_h+2P_h}{S_h}\right)+1\]
其中 \( O_w \) 和 \( O_h \) 分别代表输出矩阵的宽和高[^3]。
为了更直观理解这个过程,假设有一个简单的例子:如果输入是一个 7x7 的灰度图片,采用一个 3x3 的滤波器做卷积,并设置步长为 1,在不加任何填充的情况下,则最终得到的结果将会是一个 5x5 的新图像。
```python
import numpy as np
def convolve(input_matrix, kernel, stride=(1, 1), padding='valid'):
input_height, input_width = input_matrix.shape[:2]
kernel_size = kernel.shape[0]
if isinstance(padding, str):
pad_h = pad_w = 0
elif isinstance(padding, tuple):
pad_h, pad_w = padding
output_height = ((input_height - kernel_size + 2 * pad_h) / stride[0]) + 1
output_width = ((input_width - kernel_size + 2 * pad_w) / stride[1]) + 1
result = np.zeros((int(output_height), int(output_width)))
for i in range(int(output_height)):
for j in range(int(output_width)):
h_start = i * stride[0]
w_start = j * stride[1]
patch = input_matrix[h_start:h_start + kernel_size,
w_start:w_start + kernel_size]
result[i][j] = np.sum(patch * kernel)
return result
```
阅读全文
相关推荐

















