CNN-卷积神经网络

【详解】CNN的卷积计算详解

作者 : 老饼 发表日期 : 2024-01-18 11:22:13 更新日期 : 2024-02-20 12:13:27
本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com


卷积计算是CNN中最基本的计算,它是卷积层最重要的组成部分,

本文讲解CNN的卷积计算,包括基础卷积计算、多通道卷积计算以及pytorch中的卷积计算

通过本文,可以较详细地了解CNN的卷积计算的意义以及卷积的具体计算过程




     01. CNN卷积计算与意义    



本节介绍CNN基础卷积的计算与意义



     CNN的基础卷积计算    


卷积层是卷积神经网络中最基础的层,基础卷积的计算就是通过一个卷积核对输入进行卷积计算
 一个卷积计算结果示例如下:
 
 上述卷积结果的具体计算过程如下:
  
卷积层中的卷积核就是一个矩阵,直观来看它就是一个窗口,卷积窗口一般为正方形,即长宽一致,
卷积运算通过从左到右,从上往下移动卷积核窗口,将窗口覆盖的每一小块输入进行加权,作为输出





     卷积层的意义     


卷积层的生物意义
卷积核在生物上的意义就相当于动物的眼睛(接受器),
 
卷积核的大小就相当于眼睛的视野范围(接受野),卷积核的权重就相当于眼睛每一处的接收权重
由于视野有限,所以需要通过逐步移动来查看所有内容,其中眼睛移动的步幅就是卷积的步幅
 
 卷积层的数学意义
卷积层的数学意义就是将每个像素整合周边的信息,使得像素之间产生信息共享
其中,卷积核的大小就是信息共享的范围,卷积核的权重就是信息共享的权重   
 
对于一个单独的像素,经过多层卷积,它的信息将不断扩散到更大的范围中去
如果卷积的步幅为1,则输出时不发生降维,此时相当于纯粹地将输入图像的信息进行共享 
如果卷积的步幅>1,则输出会发生降维,此时相当于信息共享的同时,进行采样降维
 一般卷积层的步幅都为1,即只负责信息的共享,降维则由池化层等降维功能层来更"专业"地负责






    02. CNN的多通道卷积    



本节讲解CNN中的多输入通道与多输出通道卷积




     卷积的输入输出通道    


多输入通道卷积
卷积计算支持多通道的输入,当输入为k个通道的时,卷积核为3维矩阵,第3维与输入通道保持一致
 
多输出通道卷积
卷积计算也支持多通道输出,需要输出多少个通道,就使用多少个卷积核就可以了
 









     03. 卷积的参数与实现    



本节讲解卷积的常见参数与在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 






联系老饼