本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com
卷积运算(Convolution)是CNN卷积神经网络中最基本、最常用的运算,它用于融合图像的信息
本文讲解CNN卷积的基本运算、卷积的输入输出通道,以及卷积运算的意义,并展示卷积运算的代码实现
通过本文,可以快速了解CNN的卷积运算是什么,有什么作用,以及如何对输入进行卷积运算
本节介绍CNN的卷积运算的具体计算原理,以及卷积运算的意义
什么是CNN的卷积运算
CNN中的卷积运算是指,用一个矩阵作为卷积核,对输入从左到右、从上到下进行卷积运算
以下是一个CNN卷积运算的示例:
它就是以卷积核为权重,对输入从左到右,从上到下进行卷积运算,具体计算过程如下:
如上所示,把卷积核当作窗口
然后从左到右,从上往下移动卷积核窗口,将窗口覆盖的每一小块输入进行加权,就可以得到卷积输出
CNN卷积运算的意义
CNN卷积运算的生物意义
卷积运算主要用于图像,它在生物意义上,就相当于用眼睛来扫描图像
卷积核相当于眼睛,它的大小就是视野范围,卷积核的权重则是眼睛每一个神经元的接收权重
由于视野有限,所以需要通过逐步移动来查看所有内容,其中眼睛移动的步幅就是卷积的步幅
因此,卷积核也称为接受器,而卷积核的大小则称为接受野
CNN卷积运算的数学意义
卷积层的数学意义就是将每个像素整合周边的信息,使得像素之间产生信息共享
其中,卷积核的大小就是信息共享的范围,卷积核的权重就是信息共享的权重
如果从卷积输出结果的视角来看,每个卷积结果都融合了某一块输入的信息
而如果从输入的视角来看,则每个输入像素的信息,都通过卷积传播到某一块输出之中
如果经过多层卷积,一个单独的像素信息,将不断扩散到更大的范围中去,使得信息共享更加充分
本节讲解多输入、或多输出通道的CNN卷积运算是什么
CNN卷积的输入输出通道
CNN卷积-多输入通道
CNN的卷积运算支持多通道输入,此时卷积核为三维矩阵,第三维与输入通道保持一致
如图所示,输入共有3个通道,则卷积核对应地也有3个通道,
然后每次卷积运算时,将卷积核窗口覆盖的输入元素进行加权合并,作为输出
CNN卷积-多输出通道
CNN的卷积运算也支持多通道输出,如果输入也是多通道,那么此时卷积核就是四维矩阵
如图所示,多通道输出卷积只需要理解为多个独立的卷积核就可以了
需要输出多少个输出通道,就使用多少个卷积核,每个卷积核用来计算一个输出通道的结果
本节讲解卷积的常见参数与在pytorch中如何实现CNN的卷积
卷积的常用参数
下面介绍卷积中常用的一些参数,可以通过这些参数的意义来了解卷积的相关拓展
卷积的参数
卷积层一般可以设置如下的参数:
👉卷积核的大小:卷积窗口的大小,一般设为正方形,即长宽一致
👉卷积核的通道数:卷积核的通道数必须与输入的通道数一致
👉卷积核个数:卷积核的个数就是输出的通道数
👉步幅:窗口移动的步长,一般设为1
👉填充像素:卷积计算前,对输入的上下左右的填充像素
👉是否带阈值:如果带阈值,则卷积结果需要再加上一个阈值参数
卷积核与阈值都是模型的待训练参数
pytorch中卷积计算例子
pytorch中使用torch.nn.Conv2d函数来实现卷积的计算
以上述卷积为例,在pytorch中可以如下实现:
import torch
X = torch.tensor([[[[1,3,1,2],[2,6,8,5],[4,2,1,0]]]], dtype=torch.float32) # 输入数据
c = torch.nn.Conv2d(1, 1, kernel_size=(2,2),bias = False) # 初始化卷积类
c.weight.data =torch.tensor([[[[1,2],[2,0]]]], dtype=torch.float32) # 设置权重
out = c(X) # 对输入进行卷积计算
#-------------打印结果-----------------------
print('输入数据:',X)
print('卷积核:',c.weight.data)
print('卷积结果:',out)
代码运行结果如下:
好了,以上就是CNN的卷积计算的全部内容了~
End