zoukankan      html  css  js  c++  java
  • 4.tensorflow——CNN

    1.CNN结构:X-->CONV(relu)-->MAXPOOL-->CONV(relu)-->FC(relu)-->FC(softmax)-->Y

    1.1 卷积层:提取特征,改变特征图的个数

    • 卷积
    • tensorflow卷积函数,tf.nn.conv2d(input=x,filter=W_conv1,strides=[1,1,1,1],padding='SAME')

    1.2 池化层:缩小图片,不改变特征图个数

    • 针对卷积层输出的特征图结果,为了提取一定区域的主要特征,并减少参数数量,防止模型过拟合。
    • 除了MaxPooling,还有AveragePooling,顾名思义就是取那个区域的平均值。
    • tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
    • 池化带来的结果就是:图片缩小啦

    1.3 全链层:特征组合

    • 先将多维的数据进行“扁平化”,也就是把 (height,width,channel)的数据压缩成长度为 height × width × channel 的一维数组,然后再与 FC层连接,这之后就跟普通的神经网络无异了
     

    1.4 输出分类

    2.相关辅助操作

    • tf.truncated_normal(),截断正态分布随机数,https://blog.csdn.net/justgg/article/details/94362621

    其他补充知识

    1.卷积

    • 滤波器(filter,也称为kernel),大小3×3。
    • 用这个filter,往我们的图片上“盖”,覆盖一块跟filter一样大的区域之后,对应元素相乘,然后求和。计算一个区域之后,就向其他区域挪动,接着计算,直到把原图片的每一个角落都覆盖到了为止。这个过程就是 “卷积”
    • 通过设计特定的filter,让它去跟图片做卷积,就可以识别出图片中的某些特征,比如边界。
    • CNN(convolutional neural network),主要就是通过一个个的filter,不断地提取特征,从局部的特征到总体的特征,从而进行图像识别等等功能。
    • 这些filter及每个filter中的各个数字,就是参数,可以通过大量的数据,来 让机器自己去“学习”这些参数嘛。这,就是CNN的原理。

    2.padding 填白

    • 每次卷积,图像都缩小,这样卷不了几次就没了;
    • 相比于图片中间的点,图片边缘的点在卷积中被计算的次数很少。这样的话,边缘的信息就易于丢失。
    • 采用padding的方法。我们每次卷积前,先给图片周围都补一圈空白,让卷积之后图片跟原来一样大,同时,原来的边缘也被计算了更多次。

    3.对多通道(channels)图片的卷积

    • 输入图片是三维的(即增多了一个channels),比如是(8,8,3)
    • filter的维度:(3,3,3),最后一维要跟输入的channel维度一致。这个时候的卷积,是三个channel的所有元素对应相乘后求和,也就是之前是9个(3X3)乘积的和,现在是27个(3X3X3)乘积的和。
    • 如果用4个filter,则输出的维度则会变为(6,6,4)

    4.激活函数

     5.softmax

    • Softmax函数常用来最后的一层,并作为输出层进行多分类判别。

    6.损失函数

    •  

     卷积神经网络的精髓

     1.CNN,无非就是把FC改成了CONV和POOL,就是把传统的由一个个神经元组成的layer,变成了由filters组成的layer。

    • 参数共享机制(parameters sharing)

    那这一层我们需要多少个参数呢?需要 64×9 = 576个参数(先不考虑偏置项b)。因为每一个链接都需要一个权重w。

    • 因为,对于不同的区域,我们都共享同一个filter,因此就共享这同一组参数。
    • filter是用来检测特征的,那一个特征一般情况下很可能在不止一个地方出现,比如“竖直边界”,就可能在一幅图中多出出现,那么 我们共享同一个filter不仅是合理的,而且是应该这么做的。
    • 由此可见,参数共享机制,让我们的网络的参数数量大大地减少。这样,我们可以用较少的参数,训练出更加好的模型,典型的事半功倍,而且可以有效地 避免过拟合
      同样,由于filter的参数共享,即使图片进行了一定的平移操作,我们照样可以识别出特征,这叫做 “平移不变性”

    2.连接的稀疏性(sparsity of connections)

    • 由卷积的操作可知,输出图像中的任何一个单元,只跟输入图像的一部分有关系:

    • 传统神经网络中,由于都是全连接,所以输出的任何一个单元,都要受输入的所有的单元的影响。这样无形中会对图像的识别效果大打折扣。比较,每一个区域都有自己的专属特征,我们不希望它受到其他区域的影响。

    1.lrn层https://blog.csdn.net/banana1006034246/article/details/75204013

    2.数据集:www.cs.toronto.edu/~kriz/cifar.html

    参考:https://www.jianshu.com/p/c0215d26d20a

  • 相关阅读:
    关于js继承学习系列之一:开篇有益[转]
    关于js继承学习系列之五:其他方式及总结[转]
    NPOI 单元格格式集合
    js的排序方法集合
    关于js继承学习系列之四:组合继承(Combination Inheritance)[转]
    关于js继承学习系列之二:原型链(Prototype Chaining)[转]
    JS的函数重载
    转发与重定向的区别(jekyll迁移)
    解决ajax异步更新后控件的click事件失效的方法(jekyll迁移)
    jdk11源码Integer.numberOfLeadingZeros(int i)(jekyll迁移)
  • 原文地址:https://www.cnblogs.com/yrm1160029237/p/11869080.html
Copyright © 2011-2022 走看看