大家好,我技术人Howzit,这是深度学习入门系列第十三篇,欢迎大家一起交流!
深度学习入门系列1:多层感知器概述
深度学习入门系列2:用TensorFlow构建你的第一个神经网络
深度学习入门系列3:深度学习模型的性能评价方法
深度学习入门系列4:用scikit-learn找到最好的模型
深度学习入门系列5项目实战:用深度学习识别鸢尾花种类
深度学习入门系列6项目实战:声纳回声识别
深度学习入门系列7项目实战:波士顿房屋价格回归
深度学习入门系列8:用序列化保存模型便于继续训练
深度学习入门系列9:用检查点保存训练期间最好的模型
深度学习入门系列10:从绘制记录中理解训练期间的模型行为
深度学习入门系列11:用Dropout正则减少过拟合
深度学习入门系列12:使用学习规划来提升性能
深度学习入门系列13:卷积神经网络概述
深度学习入门系列14项目实战:基于CNN的手写数字识别
深度学习入门系列15:用图像增强改善模型性能
深度学习入门系列16项目实战:图像中目标识别
深度学习入门系列17项目实战:从电影评论预测情感
待更新……
深度学习入门系列18:递归神经网络
深度学习入门系列19:理解LSTM递归神经网络
深度学习入门系列20:项目:用爱丽丝梦游仙境生成文本
让我们开始吧
给定每张标准大小为32×32像素的灰阶图像数据集,传统前向计算神经网络需要1024(32*32)的输入权重(加上一个常量 )。这很公平,但是把图片像素矩阵扁平化为一个长的像素向量破坏了图片的空间结构。除非所有的图像被完美重新设定大小,否则神经网络很难处理这个问题。
卷积神经网络通过输入小方块数据学习内部特征表示期望保存像素间空间关系。这些特征在整个图像中被学习和使用,允许图像中的对象在场景转移和移动,网络仍然可以检测到。正是由于这个原因,网络对于在照片中识别对象,挑选出具有不同方向的手指,面部,对象等非常有用。总之,下面是使用卷积神经网络的优点:
在卷积神经网络中有三种类型层:
1.卷积层
2.pooling层。
3.全连接层。
卷积层有过滤器和特征图组成。
过滤器本质上是该层的神经元。他像神经元一样的有权重的输入和输出值。它的输入大小是个固定大小正方形块称之为片或者感知区域。如果卷积层是一个输入层,那么输入片将是像素值。如果在网络结构更深处,卷积层的输入来自上一层的特征图。
特征图是在上一层应用过滤器得到的结果。给定过滤器会在上一层走一遍,每次一个像素。每个位置产生一个神经元激活,输出成特征图。你能看到,如果感知区域从激活函数到激活函数被移动一个像素,那么这个区域就会被闪一个输入值(区域宽度为-1)的激活函数覆盖。
每次激活时,过滤器在上一层的输入的移动距离称之为步长,如果上一层的大小不能被过滤器感知区域大小和步长大小整除,那么感知区域可能尝试读取输入特征图的边缘。在这种情况下,像零填充技术被用于对要读取的感知区域进行填充模拟输入值0。
池化层对上一层特征图进行下采样。池化层紧跟着一个或多个卷积层,目的是合并已学习和上一层特征图表示的特征。正因如此,池化被认为是压缩或者返回特征表示的一种技术,一般用于减少模型的训练数据过拟合。
他们也具有感知场,通常要比卷积层小。 同样,每次激活使接收场移动的步幅或输入数量通常等于接收场的大小,以避免任何重叠。池化层通常非常简单,去输入的平均值或者最大值,目的是创建自己的特征图。
全连接层是正常的平面前馈神经网络层。这些层会有一个非线性几号函数或者softmax激活函数,为了输出类的预测概率。通过卷积神经网络和池化层进行特诊提取和融合之后,在网络末端使用全连接层。他们用于创建最终的非线性特征结合,通过神经网络做预测。
你现在了解卷积层,池化层和全连接层。通过研究如何让这三层连接起来,让我们了解更多具体的实现。
假定我们有灰度图片数据集,而且每张图片有相同的大小,且长宽为32×32。像素值在0-255之间。如32×32×1矩阵或者1024像素值。像素输入数据用一个三维矩阵表示,width×height ×channels。如果我们在例子中用彩色的图片,我们有三个通道分别为红,绿和蓝像素,如32×32×3。
我们定义了一个卷积层,它有10个过滤器,有个长宽为5个像素的感知场以及步长设置为1。因为每层每次从5×5(25个值)中获得输入,我们能够计算每次输入需要25+1个输入权重(加上一个偏置常数)。在整个图片上以步长为1拖动5×5感知场产生28 ×28个输出值或者784个不同的激活值
我们有10个过滤器,因此是10个不同的28 × 28特征图或者7840个输出值创建一张图片。最后,我们知道每个过滤器有26个输出值,10个过滤器和每层要计算28×28个输出值,因此卷积层中我们总共有26×26×28×或者203840链接。我们想用传统的神经网络术语来表述它。卷积层还利用非线性传递函数作为激活函数的一部分,而整流器激活函数是常用的默认设置。
我们用一个宽度和高度为2的输入值感知场来定义池化层。我们也使用步长为2来确保没有重叠。这样产生的特征图大小为输入特征图的一半。从10个不同28×28个特征图输入到10个不同的14×14个特征图输出。我们对每个感知场将使用一个max()操作符,以至于激活函数的值是输入值的最大值。
最后,我们方形的特征图平面化为一个传统的平面全连接层。我们定义了200个隐藏神经元全连接层,每个都有10 * 14 * 14输入连接,或者1960+1个权重。这层总共有392200连接和权重学习。我们直接使用sigmoid和softmax函数来输出类的概率。
既然我们知道了卷积神经网络块的构建并如何将他们组合在一起,那么我们可以看看一些最佳做法,以在应用它们时加以考虑。
感知场维度 图片默认的2D,如句子中的单词维度为1D,视频为3D,添加了时间维度。
感知场大小 区域应尽可能的小,但是也要足够大到覆盖输入数据特征。通常,小图片使用3×3,大点图片使用5 * 5 和 7* 7。
步长:默认使用1,它很容易理解并且你不需要填充就可以处理你图片边缘的感知场。对于大图片需要增加到2或者更大。
过滤器个数: 过滤器是特征检测器。一般在输入层使用较少的过滤器,随着层数加深不断递增
填充 设置为零并在读取非输入数据时称为零填充。当你不能或者不想标准化输入图片大小或者当你想使用不能整除的感知场和步长大小时是有用的。
池化 池化是一个解构和泛化的过程,用于减少过拟合。感知场几乎总是设置2×2 且步长为2,丢弃来自上一层输出的75%。(设置DropOut(0.25))
数据预处理 考虑到标准化输入数据,如图片和像素值得维度
模式结构 在你的神经网络结构中模式化层是常事。在池化层之后有可能一个,或者两个甚至更多个卷积层,这些结构被重复一次或者更多次。最后,全连接层在输出层经常使用,可以堆一层,两层或者更多层。
Dropout CNNs甚至使用了池化层也有可能过拟合。在全连接层和池化层后使用Dropout
在这节课,你已经学习了卷积神经网络,已经学到:
你现在了解关于卷积神经网络。在接下来的部分,你将要学习如何用keras开始自己的第一个卷积神经网络,解决数字识别问题。