美文网首页
cnn的理解

cnn的理解

作者: cotecc | 来源:发表于2018-01-06 21:05 被阅读0次

http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_pros.html

http://nooverfit.com/wp/category/tensorflow/

todo

卷积核的个数与卷积核的大小概念
同一层,同时使用33, 44, 5*5 三种大小的卷积核?效果意义?

一、函数定义:

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的第四维。每个卷积得到的值等于前三维对应数值的点乘之和,所以通道与卷积核个数-out_channels不是一个概念。

strides:卷积时在input图像上每一维的步长,是长为4的向量[1,height_stride,width_stride,1],1代表移动一步

padding:
string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不同的卷积方式(后面会介绍)。前者代表通过补0使,卷积提取的特征与原来的patch一致;VALID代表不填充

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

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

二、计算流程

情况a,现在有一张 3×3 单通道的图像(对应的shape:[1,3,3,1]),用一个1×1的卷积核(对应的shape:[1,1,1,1],形如[[[[2.5]]]])去做卷积,最后会得到一张3×3的feature map(图像上从左到右,从上到下每次取一个元素,与卷积核计算乘积)。

input = tf.ones([1,3,3,1],"float")
filter = tf.ones([1,1,1,1])*2.5
op2 = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='VALID')
print sess.run(input)
print sess.run(filter)
print(sess.run(op2))

2.增加图片的通道数,使用一张3×3 五通道的图像(对应的shape:[1,3,3,5]),用一个1×1的卷积核(对应的shape:[1,1,1,1])去做卷积,仍然是一张3×3的feature map,这就相当于每一个像素点,卷积核都与该像素点的每一个通道做点积

卷积层的理解


神经网络结构-卷积采样全连接.png

卷积层负责提取特征(how?原理),采样层负责特征选择(pooling保留邻域内最大特征值),全连接层负责分类(如softmax映射到概率分布,最大的概率值推测为分类结果)

卷积层:假设输入是一张图像3232大小,卷积层只有一个卷积核(55大小),从图像左上角开始,每次取出一个55的patch,与卷积核一一对应算 卷积得到一个特征值,然后移动一个步长(stride),再次得到新的特征值,最终构成一个特征图(2828,32-5+1)。

卷积层.png

采样层:pooling,一般是最大采样(maxpooling),假如从特征图左上角开始,每次取22的矩阵进行maxpooling,得到4个值中的最大值,完成特征提取(也是特征压缩,2828压缩到14*14的)。

maxpooling.png

多轮卷积-采样,是为了学习到更抽象的特征表达(也可以理解为弱分类器进行级联加强分类能力),比如第一层卷积可以提取出图像的纹理、色彩、边缘(采样保留重要特征),第二轮便可以在基础特征上抽象出更为复杂的特征(长边,折线等)。最终全连接层根据提取的特征进行分类。

卷积神经网络的出现,以参数少,训练快,得分高,易迁移的特点全面碾压之前的简单神经网络。(?为什么有这些优点,待深究)

疑问:

  1. 卷积核是什么,为什么可以提取特征?
    -- 卷积核放在神经网络里,就代表对应的权重(weight)

  2. 为什么cnn在图像识别、语音识别,自然语言处理上较为成功?
    -- 都可以将复杂任务分解为细粒度较简单的子任务,且子任务间有顺序、位置、逻辑联系。比如数字7识别,可以分解为识别一条横线和一条竖线,且横线和竖线间有相对位置联系。
    同时局部与局部之间关联性不大,也就是局部的变化,很少影响到另外一个局部。(横线部分稍微倾斜扭曲,并不影响竖线的识别)。

  3. 采样层的逻辑?maxpooling的逻辑?
    1)比如手写数字像素图,我们肉眼不关心空白的地方,也不关心数字中间黑色填充的地方,更关心的是黑白相交的边缘(想象一个数字的描边版)。计算机也如此,主要提取边缘特征(不是图片边缘的意思),不重要的区域特征可以丢弃或者较少保留,这样就可以减少参数。
    2)依然以22 maxpooling为例,若采样层之前是一个边缘检测的滤波器,22矩阵中最大的值就代表在这个区域,该位置最符合边缘特征。

Maxpooling 就是在这个区域内选出最能代表边缘的值,也就是9,然后丢掉那些没多大用的信息

全连接nn.png
  1. 全连接层神经网络:比如输入[batch,784], 隐层a[784,1024],隐层b[1024,512]。我们大概会得到7841024512个参数,这些参数量非常巨大!模型复杂,计算慢,容易过拟合。

相关文章

  • cnn的理解

    http://wiki.jikexueyuan.com/project/tensorflow-zh/tutoria...

  • CNN的理解

    cnn映射如下: y=f(ai, ...), ai1=f1(bj..), ai2=f2(bk,..); 其中bj....

  • 2018-01-02 初学CNN

    初学CNN,应当从生物学方面理解CNN的结构和工作模式。

  • CNN理解笔记

    转载:https://blog.csdn.net/Chrls_Wang/article/details/51706...

  • 彻底理解CNN

    待续

  • 基于pytorch的CNN计算简介

    1. CNN简介 本文主要介绍利用pytorch对CNN的计算有一个直观的认识,在此认为你已经对CNN有了一些理解...

  • Tensorflow CNN卷积的理解

    Tensorflow中的卷积函数 tf.nn.conv2d(input, filter, strides, pad...

  • 理解CNN中的channels

    定义 一般来讲,在深度学习框架的Conv1d或Conv2d中,channels是一个必填的参数。TensorFlo...

  • CNN原理解析

    预备知识一般来说,分类和识别都需要提取相应的特征来做决策,传统的机器学习在特征提取方面需要比较精细的设计,并且需要...

  • CNN 卷积和池化

    如何理解卷积神经网络(CNN)中的卷积和池化?- 知乎 CNN 其实可以看作 DNN 的一种特殊形式。它跟传统 D...

网友评论

      本文标题:cnn的理解

      本文链接:https://www.haomeiwen.com/subject/eeodnxtx.html