机器学习之深度学习学习笔记(四)
作者:互联网
文章目录
一、卷积神经网络(CNN)
CNN是专门被设计在影像上的,如图像分类
1.1 Image Classification
当我们对图像进行分类的时候,图像的大小可能是不一样的,所以我们把他们的形状变得一样再丢尽=进网络中进行训练。而对图像的表示方法,我们可以用独热向量(One-Hat-vector)表示:[0 0 0 0 0 0 1 0 0 0 …]向量的长度取决于图像种类的数量,最终结果经过softmax后变成概率分布,概率最大为最终结果。
对于一张彩色图片,有三个通道(channels),我们可以把他看成由一个三维的Tensor组成,而当图像输入时,我们常常是将tensor拉直直接作为网络的输入:
上面可以简单计算输入一共有100 * 100 * 3个,当是进入全连接网络是,因为每一个神经元与每一个输入都要有一个weight,假如第一层有1000个神经元,那么第一层总共需要1000 * 100 * 100 * 3个权重参数,数量十分具大!
参数越多,虽然会使网络的弹性越大,但也可能会导致过拟合,影响预测结果。我们可以看出全连接网络并不是很适合做影片识别,因为他每一个神经元都将图片的全部点都看过一遍,存在大量的重合部分,对于图片而言,其实他是有某一部分就能决定这张图片的种类,所以很多神经元是多余的。
1.1.1 CNN的第一种解释
我们让一个神经元只看图片的一部分特征
如上述图片的神经元只看3 * 3 * 3部分的特征,而这个区域叫做Receptive field(感受野),而这样的话神经元只需要3 * 3 * 3个weight参数,参数量减少很多。而Receptive field是可以重叠的
因为图片的所有调整我们都会看,所以只要关心感受野的高和宽进行,深度不用理,我们一般用kernel size(卷积核)去表示感受野,且我们是有一组的神经元去关照这个感受野的
看完这个范围之后,我们要移动到下一个范围,但要移动多少呢,这由stride参数决定,一般来说取1,2
当我们继续移动使,到后面就会遇到一个问题,就是感受野超过了图像的范围,我们会用padding的补值方法,以此下去,在看完横向之后,又会继续往垂直方向看
补充:虽然笔记做得是理论知识的记录,但也要回到操作上,卷积神经网络的方法是
nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)
in_channels表示输入通道
out_channels表示输出通道
kernel_size表示卷积核大小,用f表示
stride表示步长,用s表示
padding表示填充的数目,注意一般填充时是整一个图片周围的填充,而不是某一维的填充,大小用p表示
首先做实验我们知道当padding为零的时候,图像在经过卷积神经网络之后是变小的,而如果我们能使padding的值合适,图像的大小是不变的。这就涉及到p的计算和输出图像维度n的计算,如以下公式:
p = (f - 1) // 2
n’ = [(n + 2p - f) // s] + 1
接下来再看看参数共享问题,我们知道感受野是由一系列的神经元来控制的,但也有一个问题是,因为生物是有共性的,比如说鸟都有嘴,如果我们在找每一张图片的鸟嘴时,都要一组不同的参数,那这样参数太多了,因为机器是在做着相同的事情,所以我们可以使在特定感受野不同的神经元的weight参数是一样的
因为输入不一样,所以他们的输出自然也不一样。CNN的第一种解释可以这样简单的描述
1.1.2CNN的第二种解释
对于卷积神经网络,就是按照卷积核的大小在图像中抓取部分的图案然后进行分析
那又是如何抓取,首先卷积核是一个个的tensor,而他的数值是通过学习而来的,然后放到图像上,与对应的值做内积得到一个值
然后卷积核会按照stride的长度往左右上下移动,全部做内积,最终得到一个新的图像Tensor,最后再用每一个卷积核做相同的过程,得到一个特征图
我们可以得到的特征图看作一张新的图片,假如说有64个卷积核,那么新图片就有64个通道。我们用卷积核扫过整张图片的过程就是卷积(Convolution),对应的层叫做卷积层
1.1.3 两种方法的比较
1.2 池化层(pooling)
当我们把一张大的图片缩小,但是不会影响图片的性质,这就是pooling所能做的事情pooling中没有参数,他的行为是固定好的,类似激活函数,破零有许多种如:Min pooling、Mean pooling、Max poolingd等,这里记录Maxpooling
我们前面说过当经过卷积之后会产生新的tensor,我们再把得到的tensor分成分成许多的组
Max pooling做的事情就是取出最大值,然后由这些值组成新的tensor,这样就可以达到缩小图片的效果
我们一般在做完卷积之后通常会搭配pooling,或者说我们一般会交替使用convolution和pooling
对于整个的CNN神经网络结果大概是下面这样,同时,在昨晚做完卷积之后,我们会加上几层的全连接层,经过softmax得到最终结果
标签:卷积,深度,笔记,学习,pooling,图像,图片,我们,神经元 来源: https://blog.csdn.net/weixin_53598445/article/details/120462676