首页 > 编程语言 > 详细

Python_DL_麦子学院(算法与应用_进阶)_23~25_CNN(Convolution Neural Network)

时间:2020-06-15 20:51:59      阅读:69      评论:0      收藏:0      [点我收藏+]

 

总结:

 CNN所有步骤:

  1. local receiptive fields将这25个像素点(local receiptive fields)与w相乘加权求和之后加上b,就得到a,再利用激励函数对a进行激励,最后得到 了下一层神经元的值。       技术分享图片技术分享图片,w:5x5
  2.  我们假设共享权重和偏向,所以每次学习的特征都是一样的,只是每次小方块向右或向下的位置不一样。所以对于第一个隐藏层,所有神经元探测到同样的特征只是位置不同。 
  3. Feature map:从输入层转化到输出层,我们有不同的feature来进行转化。我们将5X5的小方块,及w和b(模子),对应一个feature map。3个不同的5x5的小块,及w和b,就对应着3个feature map对于28x28输入层的神经网络,假设我们有3个不同的feature map,在输出层,我们有3个24x24的神经元。即有几个feature map 就可以得到几个24x24的神经网络。                                              技术分享图片
  4. Pooling/max-pooling:对于第一个隐藏层24x24的维度,我们再做一个2x2的pooling,即利用这个2x2的值来求最大值。即看看着4个值哪个最大,把它放入到这个max-pooling中。反复进行,就得到一个12x12的max-pooling units,它的意义就是将信息浓缩。                                 技术分享图片

        技术分享图片

     对于多个feature maps,我们要做多个max-pooling: 

    技术分享图片

CNN所有步骤结合在一起:

技术分享图片 

28x28的原始输入层,根据feature map,把输入图片变成3个24x24的图片,再通过pooling,得到3个12x12的图片,最后就是10个神经元。还是用Backpropagation,gradient descent解决

 

 

7.1 Convolution Neural Network 算法

前面我们利用 CNN,GPU,Deep network, dropout, ensembles,结果达到接近人眼识别水平:99。67%的正确率。其中很多对于人眼都不容易识别。

技术分享图片

之前的神经网络是相邻层之间所有的神经元都两两相连。 输入层:凸显像素值(1维数据),输出层:0~9.

技术分享图片 

CNN结构很不一样,输入时一个二维的神经元(28X28):

技术分享图片

1) local receptive fields: 

技术分享图片 

在输入为28X28二维神经元中,我们定义一个nxn大小的local receptive fields,如5x5的小方块。这5x5=25个神经元,都和下一层中的某个神经元连接起来。

 技术分享图片  -5x5的小方块向右移动-》技术分享图片

首先我们在左上角选中5x5的单位,连接下一层隐藏层的第一个神经元连接起来(将这25个像素点与w相乘加权求和之后加上b加权求和就得到a,再利用激励函数对a进行激励,最后得到 了下一层神经元的值)。我们把local receptive field向右移动一格,构建另外一个神经元。不断向右向下移动,生成下一个隐藏层的所有神经元24x24。

stride:每次移动多少。如果向右移动一个像素,那么stride等于1. 

2) 共享权重和偏向(shared weights and biases)

技术分享图片,w:5x5

将这25个像素点与w相乘加权求和之后加上b,就得到a,再利用激励函数对a进行激励,最后得到 了下一层神经元的值。我们假设共享权重和偏向,所以每次学习的特征都是一样的,只是每次小方块向右或向下的位置不一样。所以对于第一个隐藏层,所有神经元探测到同样的特征,只是位置不同。 

这样学习的过程的好处:我们保留图像原始的形状特征。

3) Feature map

Feature map:从输入层转化到输出层,我们有不同的feature来进行转化。我们将5X5的小方块,对应一个feature map。3个不同的5x5的小块,就对应着3个feature map。对于28x28输入层的神经网络,假设我们有3个不同的feature map,在输出层,我们有3个24x24的神经元。即有几个feature map 就可以得到几个24x24的神经网络。

技术分享图片 

以上3个feature map是,每个是5x5。通常一些表现较好的方法都使用更多的feature map。 

 技术分享图片

以上是学习出的,根据5x5的feature map。线色代表更小的权重(负数),更深的颜色代表更大的权重。 

共享的权重和偏向(weights,bias)大大减少了参数的数量。之前的神经网络有784个像素值,隐藏层有30个神经元,那么一共就要有784*30=23520个weights,还要加上30个b,总共23550个参数。而对于每一个feature map,需要5x5=25个权重参数,假设1个偏向,26个,如果有20个feature maps,总共26x20=520个参数就可以定义CNN。所以使用共享的w和b,我们可以减少40倍的参数。

技术分享图片

技术分享图片也可以简写成:技术分享图片(这是第一个隐藏层) 

4) Pooling

Pooling layers:是浓缩神经网络的代表性,可以减少尺寸:

max-pooling:对于第一个隐藏层24x24的维度,我们再做一个2x2的pooling,即利用这个2x2的值来求最大值。即看看着4个值哪个最大,把它放入到这个max-pooling中。反复进行,就得到一个12x12的max-pooling units,它的意义就是将信息浓缩。

 技术分享图片

    技术分享图片 

 对于多个feature maps,我们要做多个max-pooling: 

技术分享图片

重要特征点找到之后,绝对位置并步重要,相对位置更加重要

其他polling:L2 pooling,平方和开方 

5) 以上所有步骤结合在一起:

技术分享图片 

28x28的原始输入层,根据feature map,把输入图片变成3个24x24的图片,再通过pooling,得到3个12x12的图片,最后就是10个神经元。还是用Backpropagation,gradient descent解决

 

 

7.2 Convolution Neural Network实现

技术分享图片 

通过某个初始化的weights和bias,对输入层的每一个local receiptive field(在实际交易中,通常使用大于3x3的的小方块。)进行更新,得到一个24x24的feature map,利用另外的w和b,得到另外一个feature map,在这里我们有20不同的feature(w和b),就有20个24x24的feature maps,称为convolutional layer,再做pooling(在feature map做2x2的max-pooling(取max值)),得到20张12x12维的图片,称为pooling layer。接下来,利用100个神经元与pooling layer做fully connect.。输出层是10个神经元。 

 

实例:3个隐藏层,每个隐藏层有100个神经元,训练60给epochs,学习率=0.1,mini-batch size:10

代码:network3.py

 

Python_DL_麦子学院(算法与应用_进阶)_23~25_CNN(Convolution Neural Network)

原文:https://www.cnblogs.com/tlfox2006/p/13136777.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!