这个还是18年做的,当时被老师逼着三天速成,也是无奈的很呀,哭唧唧。但是现在想想还是老师逼迫的时候效率高哈哈哈哈哈,感谢努力push我们的老师~
CNN原理
卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,算是多层感知机的一个变种。由生物学家休博尔和维瑟尔在早期关于猫视觉皮层的研究发展而来。它最大的优势和特点就是采用了局部链接和权值共享的方式减少权值数量,让其容易优化,也减小了过拟合风险。CNN主要由卷积层、池化层、全连接层构成,我们依次来介绍:
卷积层
在卷积层中,我们通过卷积核依次与原样本依次对应相乘(矩阵点乘)提取特征,过程如下,比如:
f e a t u r e − m a p ( 1 , 1 ) = i m a g e ( 1 : 2 , 1 : 2 ) ⋅ F i l t e r 1 = 1 ∗ 1 + 0 ∗ ( − 1 ) + 1 ∗ 1 + 1 ∗ ( − 1 ) = 1 feature-map(1,1)=image(1:2,1:2)\cdot Filter1=1*1+0*(-1)+1*1+1*(-1)=1 feature−map(1,1)=image(1:2,1:2)⋅Filter1=1∗1+0∗(−1)+1∗1+1∗(−1)=1
f e a t u r e − m a p ( 1 , 2 ) = i m a g e ( 1 : 2 , 2 : 3 ) ⋅ F i l t e r 1 = 0 ∗ 1 + 1 ∗ ( − 1 ) + 1 ∗ 1 + 1 ∗ ( − 1 ) = − 1 feature-map(1,2)=image(1:2,2:3)\cdot Filter1=0*1+1*(-1)+1*1+1*(-1)=-1 feature−map(1,2)=image(1:2,2:3)⋅Filter1=0∗1+1∗(−1)+1∗1+1∗(−1)=−1
- 从这个简单的小例子中我们可以看到,同一层的神经元可以共享卷积核,那么对于高位数据的处理将会变得非常简单。并且使用卷积核后图片的尺寸变小,方便后续计算,并且我们不需要手动去选取特征,只用设计好卷积核的尺寸,数量,滑动的步长和初始化权重就可以让它自己去训练了。
- 我们这里计算卷积的方式只是其中不中,不是所有的都必须这样算,卷积核在数字信号处理里也叫滤波器,包括均值滤波器,高斯滤波器,拉普拉斯滤波器等等。但不论是什么滤波器,本质只是一种数学运算,无非就是计算更复杂一点。
- 关于卷积核数目问题,一般来说,越接近输入层的卷积核数目越小,主要是为了提取一些简单的共性特征,比如提取横线、竖线这些特征;而越到后面,我们希望提取的特征越细致,比如半圆、折线这些,卷积核的数目也就设置的更多。
- 关于卷积核大小问题,卷积核的大小不是越大越好的!我们可以来做个比较,A是三层的卷积层,每层卷积层设置卷积核大小为33,步长为1,B是单层卷积层,卷积核大小为77。那么第一层我们看到的视野就是 ( 3 ∗ 3 ) (3*3) (3∗3)大小,第二层看到为 ( 1 + 3 + 1 ) ∗ ( 1 + 3 + 1 ) = 5 ∗ 5 (1+3+1)*(1+3+1)=5*5 (1+3+1)∗