深度学习7. 卷积的概念
发布网友
发布时间:2024-10-19 15:05
我来回答
共1个回答
热心网友
时间:2024-11-16 14:13
卷积来源于英文的Convolution,由“Con”代表积分,“vol”代表转、卷组成。
卷积是一种数学运算,广泛应用于信号处理和图像处理等领域,它以简洁的数学形式描述动态过程。
卷积的定义较为复杂,在卷积神经网络中可能不常用。设f和g为定义在实数域上的函数,它们的卷积f*g定义为:
(公式)
其中t为实数,[公式]为积分变量。
在离散形式下,若f和g为长度为n的向量,它们的卷积f*g定义为:
(公式)
其中k为整数,[i]表示向量f的第i个元素。
在卷积神经网络中,卷积操作是一种特殊的线性变换,卷积核(也称为滤波器)在输入数据上进行滑动,每次计算与卷积核重叠部分的点乘和。这种操作可以提取输入数据的局部特征,实现特征的共享和抽象,使得网络对输入数据的变化更加鲁棒和准确。
卷积核是一种可学习的滤波器,用于对输入图像进行特征提取。卷积核通常是一个小的二维矩阵,大小为[公式],其中k为正整数,称为卷积核大小。卷积核的值通常由神经网络自动学习得到。
卷积核的作用是提取输入数据的局部特征。在卷积操作中,卷积核可以识别输入图像中的不同特征,如边缘、纹理、角落等,从而提取更加高级的特征表示。通过使用多个卷积核,可以提取不同类型的特征,形成更加复杂的特征表示,进而提高模型的性能。
不同的卷积核可以实现不同的效果,常见的卷积核有:
卷积核的大小是卷积神经网络中的一个超参数,通常与输入数据的尺寸以及需要提取的特征的大小有关。在卷积神经网络中,卷积核的大小通常比较小,例如常见的卷积核大小为3或5,因为较小的卷积核可以更好地保留输入图像中的局部特征。
同时,卷积核的大小也需要根据卷积操作的步幅和填充等超参数进行选择。在后面例子中,卷积核大小为3,步幅为1,填充为1,即每次卷积操作会对输入图像中的[公式]的区域进行处理,并生成一个相同大小的卷积特征。填充的目的是为了保留输入图像的边缘信息,以避免在卷积操作中丢失像素。
需要注意的是,卷积核大小的选择需要根据具体问题进行调整,通常需要通过实验来确定最佳的超参数。
自定义的卷积函数接收两个参数:- image:输入图像;- kernel:卷积核
卷积使用valid卷积的方式,在进行卷积操作时,输出图像的尺寸会变小,计算公式是:(image_rows - kernel_rows + 1, image_cols - kernel_cols + 1)
程序使用两个嵌套的循环遍历输出图像的每个像素,并计算该像素对应的卷积结果。np.sum函数中的参数image对输入图像进行切片,矩阵会进行逐元素相乘(Hadamard乘积或元素级乘积)。image[row:row + kernel_rows, col:col + kernel_cols]和kernel的大小都是kernel_rows x kernel_cols,相乘结果返回一个相同形状的矩阵。
示例的卷积核是一个简单的边缘检测器,用于检测图像中的边缘。
这里加载一张灰度图:
程序输出结果如下:
输出结果:
生成单通道图像调用卷积(1)生成单通道图像torch.randn(1, 1, 28, 28)
下面用torch.randn(1, 1, 28, 28)来生成随机数的PyTorch函数,它返回一个大小为(1, 1, 28, 28)的张量。其中每个参数的具体含义如下:
(2)卷积层
nn.Conv2d是PyTorch中用于定义卷积层的类。代码nn.Conv2d(in_channels=1, out_channels=16, kernel_size=3, padding=1)表示创建一个卷积层对象conv_layer,参数的含义如下:
最终,可以通过调用conv_layer(input_data)来实现卷积操作,其中input_data是输入的数据,卷积操作的结果将作为函数返回值。
卷积后得到了1个批次、16个大小为$28\times28$的特征图。
加载灰度图像进行卷积操作
下面示例中,卷积结果[batch_size, channel,height,width]会进行降维操作,以便于可视化显示。最后会使用Image.fromarray,将数组转为图片显示出来。
原始图像:
输出:
对彩色图片卷积,输出1通道
对彩色图片进行卷积,要把输入通道数改为3,加载时选择RGB:
输入:
卷积结果:
输出3通道的卷积操作
输出: