本文共 1354 字,大约阅读时间需要 4 分钟。
昨天尝试了一下使用mnist数据集,里面提到了CNN(卷积神经网络),以前也见过并使用过,今天就好好记录一下,学习资源来自这位作者写的很好
- CNN出现的原因
我们在做的人工智能,抽象的说,就两个方面,回归和分类,直观的就有模式识别,机器视觉等实实在在的应用,很多时候我们需要用到图像,作为人工智能的运用对象,从图像里面取识别内容,但是图像有个特点,数据量大,现今一张很普通的相机拍出的图片就上百万像素,这就给人工只能的训练提出了极大的挑战,解决这个问题只有两个办法,一是提升硬件运算能力,就出现了各是各样的显卡,一个是优化算法,CNN就走了后面这一条路
- CNN减少运算的原因
在普通的神经网络里面,我们得知SGD是一种能减少运算的方法,CNN与此相似,它是将全连接减少为句不感知
左边的图片采用的连接方式是全连接方式,图片上每一个像素都连接到输入层的神经元上,我们假如这是1000*1000的图片,而我们又提供1000*1000的输入层神经元时,就有1000000*1000000个权重值用于训练,这不是现在的硬件可以接受的,所以有些人就提出了减少神经元的个数,让10*10大小的过滤器去提取图像的特征,如果过滤器的步距也取10,那么就只需要100*100个这样的过滤器就解决了问题,生成的也不过就是100*100的特征图像,在这里我们默认了原图每10*10的小区域的权重值是相同的,所以理论的权值数量是10*10,对比一下1000000*100000,嗯,是不是少了很多
- 过滤器可以被使用的假设
1 底层的特征是局部性的,也就是,这个过滤器过滤出来的内容能代表这一块区域的特征
2 图像上的不同片段,不同图像上的小片段的特征是类似的
这类比于生物的视觉神经元只响应特定区域的刺激
- 卷积层与多核卷积
一种过滤器对应一个卷积核和一类特征,但是一幅图片可以有多种类型的特征,就比如求取边缘一样,垂直梯度需要一个卷积核,竖直梯度需要另外一个卷积核,这就形成了两个卷积核,有时候我们的图片是多通道的,我们的卷积核就应该具有处理多个通道的能力,另外,在卷积之后的下一步是加上偏置,再下一步就是利用激活函数计算出该层的激活值,利用卷积核对图像进行卷积操作,并进行激活,就形成了我们的卷积层,值得一提的时,因为我们可能用到多核卷积,所以我们得到的输出也可能是多通道的
- 池化层
池化层出现的原因有两个,一是,我们的卷积之后,仍然还保留着大量的数据,不便训练,另外还有一个原因是池化的合理性,我们可以对不同位置的特征进行聚合统计,可以代表这个区域的总体特征水平
- 卷积层与池化层的实现细节
padding:我们在对6*6的图片做卷积的时候,如果卷积核是3*3,步距是1,那么将生成一个4*4的图像,如果引入多层卷积,最终图像会很小,并且边缘的像素只被卷积运算了一次,一个解决办法是加入padding,对边缘进行补充。padding有两种模式,same即输入输出相同,valid即不加padding,在步距为1的情况下,输入为n*n的图像,卷积核大小为f*f,输出就为(n-f+1)*(n-f*1),
stride:即为步长,即卷积核在图像上的移动距离
- CNN的训练
训练的核心算法依然是BP算法,即优化器仍然可以使用nn的优化器
转载地址:https://blog.csdn.net/zhouzhouasishuijiao/article/details/85238795 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!