当前位置:网站首页 > C++编程 > 正文

cnn算法(cnn算法原理)



(定义测试及训练过程)

卷积神经网络通过所设计的卷积核与图像进行卷积操作,提取图像中的某些特征。通过卷积网络层数的加深,提取的特征从局部到整体,从而对物体进行识别。

图1. 图像边缘检测

假如有一张图像,想让计算机搞清楚图片上有什么物体,可以做的事情是检测图像的水平边缘与垂直边缘。

(1)卷积操作

如图1所示,是一个6*6的灰度图像,构造一个3*3的矩阵,在卷积神经网络中,通常称为filter(过滤器),对6*6的图像进行卷积操作得到4*4的矩阵。

图2. 卷积操作

如图2所示,3*3的filter与6*6的灰度图像左上角3*3区域进行卷积3*1+0*0+1*(-1)+1*1+5*0+8*(-1)+2*1+7*0+2*(-1)=-5,从而得到4*4左上角的-5。

(2)边缘提取

图3. 垂直边缘提取

为什么这种卷积操作可以得到图像的边缘?

如图3所示,原图是6*6的灰度图像,10的部分为亮区域,0的部分为暗区域。从10->0为垂直边缘。用一个3*3的过滤器,对图像进行卷积操作,得到图像中间亮,两边暗。亮暗交接处为边缘。

(3)过滤器类型

图4. 垂直过滤器与水平过滤器

通过图4的垂直过滤器与水平过滤器可实现垂直边缘与水平边缘检测。

图5. 过滤器类型

图5列出了一些常用的过滤器,如sobel算子,scharr算子等。在卷积神经网络中,把这些过滤器当成我们要学习的参数,卷积网络训练的目标就是去理解过滤器的参数。

图6. padding示意图

(1)为什么进行padding?

按照上述的描述,图片每经过一次卷积运算,会存在以下两个问题:

  • 图片会缩小导致无法进行深层卷积运算;
  • 原始图片边缘信息对输出贡献得少,输出图片丢失边缘信息。

(2)怎样进行padding?

  • 假设输入的图片大小:
  • 过滤器的大小:
  • 两个水平与垂直边缘padding大小:
  • 则经过卷积操作的输出:

图7. 卷积步长为2

  • 对于input=7*7,filter=3*3,stride=2,padding=0;
  • 经卷积操作输出:
  • 通用表示:, 表示向下取整。

以上讲述的卷积都是灰度图像的,如果想要在RGB图像上进行卷积,过滤器的大小不再是3*3,而是3*3*3,最后的3对应为通道数(channels)。卷积生成图像中,每个位置的像素值,为3*3*3的过滤器与图像相应位置相乘累加。如图8所示,过滤器依次在RGB图像上滑动,最终生成的图像大小为4*4。

图8. 单一filter彩色图像卷积

另外一个问题是,如果我们在不仅仅在图像总检测一种类型的特征,而是要同时检测垂直边缘、水平边缘、45度边缘等,也就是多个过滤器的问题。如果有两个过滤器,最终生成图像为4*4*2的立方体,这里的2来源于我们采用了2个过滤器。

图9. 多个filter彩色图像卷积

写成通用的形式:

  • 输入维度:
  • 每个滤波器的维度:
  • 权重维度:
  • 偏置维度:
  • 输出维度:
  • 其中:

图10. Max pooling示意图

在卷积神经网络中,除了使用卷积层外,还使用池化层来缩减模型大小,提高计算速度。池化层分为最大池化层(max pooling)与平均池化层(average pooling)。池化层中的max pooling是求每个过滤器滑动区域内的最大值;average pooling是求每个过滤器滑动区域内的平均值。

  • 经过padding后的输出:
  • 一般情况下padding=0,输出表示:

LeNet(LeNet-5)由两个卷积层和三个全连接层构成。

  • 这两卷积层的卷积核均为5*5,第一个卷积层的输出通道为6,第二卷积层的输出通道为16。
  • 每个池化层窗口的大小为2*2,步长为2。
  • 三个全连接层分别有120、84和10个输出。

(1)下载数据集

(2)搭建LeNet-5网络结构,并确定前向传递过程

 

(3)将定义好的网络结构部署至CPU/GPU上,并定义优化器

(4)定义训练过程

 

(5)定义测试过程

(6)执行训练与测试

 

(7)保存网络模型

到此这篇cnn算法(cnn算法原理)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 2258xt主控ce数(2258xt主控和2258的区别)2024-12-29 21:36:07
  • console线接法与usb(console线接法图解)2024-12-29 21:36:07
  • 消息认证码mac值(mac进行消息认证的过程)2024-12-29 21:36:07
  • git clone 和git checkout区别(git init和git clone)2024-12-29 21:36:07
  • codependence什么意思(coded的意思)2024-12-29 21:36:07
  • dcp7057显示纸盒无纸(dcp7060d纸盒无纸)2024-12-29 21:36:07
  • pc upc 和 apc 区别(upc与apc)2024-12-29 21:36:07
  • 怎么删除虚拟环境csdn(linux删除虚拟环境)2024-12-29 21:36:07
  • libxml2丢失(libc.so.6丢失)2024-12-29 21:36:07
  • cp910如何连接手机(cp910连不上手机)2024-12-29 21:36:07
  • 全屏图片