numpy实现卷积
1 卷积本质
- 设计这样的一个 滤波器(filter,也称为kernel),用这个filter,往我们的图片上“盖”,覆盖一块跟filter一样大的区域之后,对应元素相乘,然后求和。计算一个区域之后,就向其他区域挪动,接着计算,直到把原图片的每一个角落都覆盖到了为止。这个过程就是 “卷积”。
- 可以通过设计特定的filter,让它去跟图片做卷积,就可以识别出图片中的某些特征。
- CNN(convolutional neural network),主要就是通过一个个的filter,不断地提取特征,从局部的特征到总体的特征,从而进行图像识别等等功能
- filter中的参数是通过大量的数据,让机器自己去“学习”这些参数。
2 Padding方式
- 每次卷积,图像都缩小,采用padding的方法。每次卷积前,先给图片周围都补一圈空白,让卷积之后图片跟原来一样大,同时,原来的边缘也被计算了更多次。
- “让卷积之后的大小不变”的padding方式,称为 “Same”方式, 把不经过任何填白的,称为 “Valid”方式。
2.1 “Valid”方式
2.1 “Same”方式
2.3 Padding计算公式
3 多卷积核多通道
- 在单核单通道的基础上执行多遍,然后把结果累加。
- (1)一个循环是输入通道数对循环:把卷积核在每个通道数据上卷积,然后结果累加
- (2)一个循环是核个数对循环:每个卷积核执行步骤(1),然后把结果累加,如下图
4 代码实现(循环计算实现和矩阵计算实现)
4.1 一维卷积
在 NumPy 中实现卷积操作可以通过使用 numpy.convolve
函数或手动编写卷积操作的代码来完成。以下是两种方法的示例:
方法一:使用 numpy.convolve
函数
numpy.convolve
函数用于执行一维卷积操作。首先,您需要定义一个卷积核(滤波器),然后将它应用于输入信号。下面是一个示例:
import numpy as np
# 定义输入信号
signal = np.array([1, 2, 3, 4, 5])
# 定义卷积核(滤波器)
kernel = np.array([0.5, 1, 0.5])
#