总结:
CNN所有步骤:
对于多个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