TensorFlow实战——CNN

来源:互联网 发布:软件质量保证方法 编辑:程序博客网 时间:2024/05/17 09:36

全连接神经网络存在以下三个问题:
1. 参数太多(每个节点都要和下一层的所有节点连接)
2. 容易过拟合
3. 不能很好的抽取局部的特征(如一张有两只猫的图片,它偏向于抽取整张图的特征,而不是图中部分区域的特征)

鉴于以上的问题,我们介绍卷积神经网络(CNN)。先介绍CNN中的池化层和卷积层。我们根据下图来讲解:

这里写图片描述

过滤器

池化层和卷积层都会有过滤器,过滤器会有个窗口(如上图中,黄色的框框),它会把上一层的数据过滤到一下层(如上图中,将左边的矩阵过滤生成右边的矩阵。)此外,过滤器能设置一下层的深度。(后续会讲解)

为了让image长宽不变,我们可以在边缘添加值为0的一些行与列,从而使得过滤后的行与列不变。
若不填充,那么

=CEILING((+1)/2)
=CEILING((+1)/2)

卷积层

上次其实就是卷积层中某一个深度上的过滤。我们设想数据是一张5*5*3的RGB图片,该卷积层的过滤器,窗口为3*3,深度为10。设Wij为将上一层中深度i的image过滤到一下层中深度j上的image的参数矩阵,假设(如上图黄色框框的红色数字):

W00=101010101

=11+10+11+00+11+10+01+00+11=4

后面的类似计算。我们得到右边的矩阵R00。通用的,我们可以利用W10W20,计算出R10R20

而下一层深度0上的Image的就是:

Image0=R00+R10+R20+B0

上式中B0是下一层深度0上偏置矩阵,要注意的是该矩阵的值都是相同的。所以,偏置参数的个数为下一层的深度数

池化层

理解的卷积层,池化层就很容易理解了。池化层有两点不同。

  • 没有W参数矩阵。也就是没有黄色框框的红色数字部分。那它怎么过滤呢?很简单,选框框中最大的数字,或者求个平均值等方式,就求出右边矩阵中的值了。
  • 池化层不改变前后层的深度。也就是说,上一层第 i 深度的image直接过滤出下一层第 i 深度的image。

卷积神经网络

卷积神经网络的架构为:

>(Conv+>Pool)+>FC+

+表示1~n?表示0~n

VGGNet模型

这里写图片描述

LeNet模型

这里写图片描述

Inception-v3 模型

这里写图片描述

这里写图片描述

原创粉丝点击