CNN学习小结

  基本完成了CNN基础知识和框架的学习,纸上得来终觉浅,所以总结一下,输出一下,变成自己的东西.

  主要参考博客:https://blog.csdn.net/rogerchen1983/article/details/79353861

                                    https://blog.csdn.net/liufanghuangdi/article/details/81188283

                                    https://blog.csdn.net/justdoithai/article/details/51170441

         https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-06-save/

当然下面很多内容也会摘自这些博客,详细了解请点击链接.

   CNN:Convolutional Neural Networks,卷积神经网络.所以分成两部分来整理.卷积-神经网络.


                                                                             卷积


又名滤波器(filter),核(kernel),用来从图片中提取特征信息.

  • 为什么使用卷积处理一下图片,而不是像神经网络一样,直接输入像素点呢?

答:首先我们人眼看到的图像和保存在计算机中的图像分别如下所示.

如果图片发送旋转或收缩,计算机看到的世界是不是就完全不同了呢.如果使用像素比对的方式,可能同一语义图片会得出不同的结果.另外,如果图片不进行处理,直接输入到神经网络,随着图片尺寸的增大,像素点增加,参数将会变得非常多,计算量也会相当大.

在CNN中提出了"局部感受野"的概念(降低计算量的利器),卷积是对图片上小块区域的特质进行提取,也就是神经网络不再是对单独的像素点进行处理,而是对小块的像素区域进行处理.这样加强了神经网络对图片的理解.而我们人类对外界的认知一般是从局部到全局,先对局部有感知的认识,再逐步对全体有认知,这是人类的认识模式。在图像中的空间联系也是类似,局部范围内的像素之间联系较为紧密,而距离较远的像素则相关性较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。

 

  • 卷积在CNN中是如何工作的呢,产生的效果是什么样的呢

过滤器的主要作用是:提取图片中的特征.

过滤器大小一般为n*n(n<10)的像素块.仍以小狗为例,过滤器会在图片上从头到尾“滑过”一遍.每滑到一个地方就会把该处的特征提取出来.

   以灰度化图片为例:

图片:     滤波器:

   我们用橘色过滤器中的每一个值,与绿色矩形框中的对应值相乘、再相加,过程如下图所示,4即为提取出的特征(具体意义是什么呢,我也不清楚)

  

经过特征提取后,所得结果如下图所示:

经过过滤器处理后,图片变成什么样子了呢?

这次,我们回到之前的例子中。

仍以这张萌狗为例,它经过“过滤器”提取特征后,得到的是一张……哦,好吧……看起来有点儿模糊的图。

虽然图片模糊了,但是图片中的主要特征,已经被过滤器全部提取出来,单凭这么一张模糊的图,作为人类的我们,足以对它做出判断了。(谁敢说它是一只猫?!)

下面,我们再换几个过滤器试试。

这些就是经过过滤器提取后,得到的不同“特征图片”。

在原图片上施加不同的"过滤器",就会得到不同的"特征图片".这也是为什么莫烦说经过卷积后,图像的"深度"增加了.


  • 在我们的卷积神经网络中,应该选取什么样的"过滤器"呢

上面举例说明的"过滤器"内部值是固定的,但是在CNN中,filter内部的值是自己学来的,至于具体是多少,可能不像上面那么规律.

在CNN中只要指定filter的大小,个数,每次滑动步数,是否补零即可.具体怎么指定将会在下偏代码分析中说明.

  • 经过卷积后呢,貌似与原图比输入神经网络的像素点并没有减少.

这个时候,就该"池化pooling"出场了.在池化之前,还要说一嘴激活函数,其真实作用我也不太理解,只是大神们都这样说:

上面这种对应数值相乘、再相加的计算,仅仅是“线性”计算;

而在现实世界中,很多很多的数据,都是“非线性”的。

所以,在“卷积”处理的后面,我们常常引入一个“非线性”的计算,来使得数据更加接近真实世界。

在卷积中,较常用的激活函数为tf.nn.relu,至于为什么,我也不知道.

该说"池化"了.

所谓“池化”,就是在保留图片主要信息的前提下,将图片的尺寸缩小。  怎么样保存图片足要信息呢,也是分快来操作.比如2*2的像素为一块,如果采用"最大池化"的方法,则保存四个像素中的最大值.这也是较长用的池化方法.此外还有:诸如“平均池化”、“求和池化”等等,它们的运算原理基本一致。

在程序中也是定义其滑动跨步,池化方法即可.

经过一系列处理后,图片变成了什么样呢.好像还能看出来原本的样子,但计算机get到的变化可远比我们多多了.

当然,整个一波操作可以多来几次,那么图片也会边小,深度(信息)也会增多.

把大神的话也放上吧,很有价值的.看了它我才明白程序的意思

★ 在“池化”层中,仅有1个过滤器;而在“卷积”层中,可以设置多个过滤器

因为“卷积”层的过滤器,其功能是提取图片的特征,因而,我们使用不同的过滤器,可以提取不同的图片细节。

而“池化”层的过滤器,仅仅是为了缩小图片的尺寸,因而,使用一种过滤器,就可以达到这一目标,无需设置多个。

②  经过“卷积”处理后,得到的图片张数(即“图片深度”),应该等于该卷积层的过滤器个数;

而经过“池化”处理后,得到的图片张数(即“图片深度”),仍等于上一层的图片张数。

概念描述比较晦涩,直接看下图:

(点击图片,查看大图)

当仅有1个卷积层时,关于每一层的图片深度问题,尚且好理解(如上图所示)。


                        神经网络


经过上面的处理后,图片的大小变笑了,深度增加了.但这都是同一张图片的信息.所谓全链接即把多维的特征图片平铺连接成一列.

此时,将这一个个的像素值,塞到我们初中就已接触过的表达式中.x为一个一个的像素值,y为图像的标签.\Theta为我们希望计算机学到的参数.有了这个参数,我们也就可以处理新的没有标签的图片了.

在CNN中,由全连接神经网络帮我们找到这些参数值.将图片信息输入到神经网络层找到图片与标签的关系,学习到输入-输出的关系.

(全链接神经网络是指每一个输入和每一个神经元都进行连接.图示中未画出)

① “全连接神经网络”可以帮助我们学习到参数θ。有了它,下一次再给计算机“看”图片时,计算机便会自动识别出图中的景象。

② 模型得到的最终结果,表示“图片为某种类别的概率”。注意:这里的概率之和,永远为1。

例如:

即计算机“判断”,最初输入的图片为“狗”。

我们将CNNs的所有流程,整合起来,即:

 


                         结束语


至此,对CNN的理解就基本总结完了,其中有很多都摘自大神的博客,所以就把自己的总结标记成转载吧.

其实,总结到此,自己还是一知半解,一些问题待日后解答.

1.filter里面的数值是根据什么来调整的,不同filter后图片会变成什么样子呢?

2.是不是在分类中,标签要分为限定的几种,然后输出的结果会是这些标签的概率?

3.在输入CNN前,要非类的图片需要进行预处理吗,和训练集中的图片特性有什么关系?

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值