卷积神经网络的理解

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

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

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

上图中:左边是全链接,右边是局部链接。函数

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

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

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

1)tf卷积函数

惯例先展现函数:code

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

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

  • 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形式),以后可进行代价函数(交叉熵)计算,更新权值和偏置项。

 卷积->激活->池化

相关文章
相关标签/搜索