一:引言
我们传统的神经网络和卷积神经网络有什么区别?
下图所示,左图就是我们传统的神经网络(NN)(想了解NN的小伙伴可以先划到最后的参考文章部分),右图就是卷积神经网络(Convolutional Neural Network)(CNN),我们在这张图中可以明显地看出,左图看上去像二维的,右图好像是一个三维的图,举个例子,比如在传统神经网络输入的一张图有784个像素点,所以输入层就有784个神经元,但在我们的CNN中输入的就是原始的图像28*28*1(是三维的),它是一个三维的矩阵。我们可以看到右图中又定义三维名称‘height*width*depth’简称‘h*w*d’,接下来我们就围绕着卷积层和深度到底怎么变换展开。
二:大体介绍CNN:
如下图所示就是CNN的整体架构,和我们讲述NN的文章相同,这次也是从整体架构入手,帮助大家了解CNN,总共有四个部分:输入层 ,卷积层 ,池化层 ,全连接层 。
三:详细介绍CNN:
(1):输入层:
输入层就是和上文的例子相同,如图中的最左边的图片假设就是我们需要输入的,假设是‘28*28*3’,分别对应‘h*w*d’,其中对于图片输入来说通常是以RGB三通道的形式输入,所以d通常是3,如下图中的第二张图片就是后面三个通道图片相叠加而来
(2):卷积层(核心):
卷积层是如何工作的呢?我们先给定一个简单的例子,如下图所示:
假设我们输入的是5*5*1的图像,中间的那个3*3*1是我们定义的一个卷积核(简单来说可以看做一个矩阵形式运算器),通过原始输入图像和卷积核做运算可以得到绿色部分的结果,怎么样的运算呢?实际很简单就是我们看左图中深色部分,处于中间的数字是图像的像素,处于右下角的数字是我们卷积核的数字,只要对应相乘再相加就可以得到结果。例如图中‘3*0+1*1+2*2+2*2+0*2+0*0+2*0+0*1+0*2=9’
那如果我们的d大于一的时候又是如何计算的?
如下动图:
图中最左边的三个输入矩阵就是我们的相当于输入d=3时有三个通道图,每个通道图都有一个属于自己通道的卷积核,我们可以看到输出(output)的只有两个特征图意味着我们设置的输出的d=2,有几个输出通道就有几层卷积核(比如图中就有FilterW0和FilterW1),这意味着我们的卷积核数量就是输入d的个数乘以输出d的个数(图中就是2*3=6个),其中每一层通道图的计算与上文中提到的一层计算相同,再把每一个通道输出的输出再加起来就是绿色的输出数字啦!。
(3):池化层:
池化层部分就比较简单了如下图所示:
如图中就是一个max-pooling(最大池化)的一个操作,就是把选中的区域中的最大值给挑出来,比如粉红色区域的‘1,1,5,6’四个数字最大值就是6,还有一种比较常见的是mean-pooling(平均池化)就是把区域内的数字加起来做个平均值,比如蓝色区域就是(1+0+3+4)/4=2。
(4):全连接层(FC)
全连接层的理解就是相当于在最后面加一层或多层传统神经网络(NN)层,我们在连接全连接层前,需要把我们的CNN的三维矩阵进行展平成二维,比如说从池化层出来的是‘5*5*3’的图像,在输入到全连接层展平成1*75以满足全连接层的输入模式。
四:最后呈现
如下图:
五:参考文章:
CNN笔记:通俗理解卷积神经网络_v_JULY_v的博客-CSDN博客_卷积神经网络通俗理解
CNN部分不愧是计算机博士唐宇迪居然半天教会了我大学4年没学会的深度学习经典算法解析入门到实战课程,看不懂你打我!!!_哔哩哔哩_bilibili
传统神经网络:
神经网络整体架构及细节(详细简单)_小林学编程的博客-CSDN博客
来源地址:https://blog.csdn.net/weixin_57643648/article/details/123990029