zoukankan      html  css  js  c++  java
  • 卷积神经网络的理解

    CNN中减少参数的2两个规则:

    1、局部感知。生物学中,视觉皮层的神经元是局部感知信息的,只响应某些特定区域的刺激;图像的空间联系中,局部的像素联系较为紧密,距离较远的像素相关性较弱。

      这个对应于算法中卷积核的大小,mnist手写识别在28*28的像素中取patch为5*5。

    上图中:左边是全连接,右边是局部连接。

    2、权值共享。每个神经元对应的参数(权值)都相等。隐含的原理是:图像的一部分的统计特性与其他部分是一样的。那么在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,都能使用同样的学习特征。

    注:卷积可参考数字图像处理中的滤波处理,滤波就是对于大矩阵中的每个像素, 计算它周围像素滤波器(卷积核)矩阵对应位置元素的乘积, 然后把结果相加到一起, 最终得到的值就作为该像素的新值, 这样就完成了一次滤波。该过程也叫卷积,区别在于,图像卷积计算,需要先翻转卷积核, 也就是绕卷积核中心旋转 180度。

    以下转自http://blog.csdn.net/mao_xiao_feng/article/details/78004522

    1)tf卷积函数

    惯例先展示函数:

    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

    除去name参数用以指定该操作的name,与方法有关的一共五个参数:

    • input: 
      指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一

    • filter: 
      相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,有一个地方需要注意,第三维in_channels,就是参数input的第四维

    • strides:卷积时在图像每一维的滑动步长,这是一个一维的向量,长度4

    • padding: 
      string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不同的卷积方式(“SAME”允许卷积核停留在图像边缘,保证输入与输出大小相同;“valid”则卷积核不能停留在图像边缘,输出图像会变小,若输入5*5,使用3*3卷积核,则输出3*3)

    • use_cudnn_on_gpu: 
      bool类型,是否使用cudnn加速,默认为true

    结果返回一个Tensor,这个输出,就是我们常说的feature map。

    2)tf最大值池化函数

    tf.nn.max_pool(value, ksize, strides, padding, name=None)

    参数是四个,和卷积很类似:

     第一个参数value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape

    第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1

    第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]

    第四个参数padding:和卷积类似,可以取'VALID' 或者'SAME'

    返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式。

    总结:卷积或池化后特征图谱的大小主要取决于滑动步长(strides)和padding(边距处理方式)。strides=1,padding=‘SAME’,则输入与输出大小相同;strides=2或padding=‘valid’都会使输出图像变小。

    其他:

    输出图像的尺寸

    输出图像的空间尺寸可以计算为([W-F + 2P] / S)+1。在这里,W 是输入尺寸,F 是过滤器的尺寸,P 是填充数量,S 是步幅数字。假如我们有一张 28*28*3 的输入图像(彩色3通道),我们使用 32 个尺寸为 5*5*3 的过滤器,单步幅和用零填充(‘SAME’)。

    那么 W=28,F=5,P=4,S=1。输出深度等于应用的滤波器的数量,即 32,输出尺寸大小为 ([28-5+4]/1)+1 = 28。因此输出尺寸是 28*28*10。

    而池化的时候一般步长会是2,这样,图像会被缩小。

    另,卷积层和池化层,是用来提取特征(初识卷积层提取一般特征(边缘检测或线条),后面的卷积层用来提取复杂一些的特征),并减少原始图像的参数。全连接层用来输出分类,softmax用来将分类结果转化为与真实分类同样的形式(one-hot形式),之后可进行代价函数(交叉熵)计算,更新权值和偏置项。

     卷积->激活->池化

     

  • 相关阅读:
    Linux 下面安装 nginx 以及进行TCP反向代理、负载均衡的过程
    AMD全新32核线程撕裂者GeekBench跑分曝光:超2950X近一倍
    Win7 & VS2013 编译 WebKit 总结
    窗宽窗位与其处理方法
    编写Delphi控件属性Stored和Default的理解及应用
    vSphere、Hyper-V与XenServer 你选哪个?
    写给那些常年战痘的痘友们~~~
    怎么解决xp系统不能安装NET Framework4.0?
    Kali Linux渗透基础知识整理(四):维持访问
    解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
  • 原文地址:https://www.cnblogs.com/xiaoxiong-kankan/p/8043452.html
Copyright © 2011-2022 走看看