神经网络(二)
2018-11-21 本文已影响210人
Daily_Note
神经网络
1. 神经网络基础
2. MNIST数据集浅层神经网络分析
3. 卷积神经网络
4. 卷积神经网络MNIST数字图片识别
3. 卷积神经网络
深度的神经网络
- 深度神经网络与更常见的单一隐藏层神经网络的区别在于深度,深度学习网络中,每一个节点层在前一层输出的基础上识别一组特定的特征。随着神经网络深度增加,节点所能识别的特征也就越来越复杂。
- 卷积神经网络与简单全连接神经网络的比较
- 全连接神经网络的缺点
- 参数太多
- 没有利用像素之间位置信息
- 层数限制
- 全连接神经网络的缺点
- 卷积神经网络的发展历史
-
卷积神经网络的表现:
CNN错误率.png
在10和11年时,错误率很高,12年时,卷积神经网络的出现,错误率下降了很多,接下来的几年错误率一直在降低,在15年已经超过了人类水平。
-
1989年,LeCun发明了卷积神经网络的雏形LeNet,将LeNet改造之后,AlexNet有了历史性的突破,准确率直线上升,各种各样的神经网络都出现了。
卷积神经网络.png
- 神经网络的结构分析
- 神经网络的基本组成包括输入层、隐藏层、输出层。而卷积神经网络的特点在于隐藏层分为卷积层和池化层(又叫下采样层)。
- 卷积层:通过在原始图像上平移来提取特征
- 池化层:通过特征后稀疏参数来减少学习的参数,降低网络的复杂度,(最大池化和平均池化)- CNN的结构:
-
卷积层过滤器(相当于观察窗口,里面有权重,移动来观察)
- 个数
- 大小(一般为奇数1 * 1、3 * 3、5 * 5)
- 步长(移动的像素数量),太大观察的太粗略,一般为1
- 移动过程中越过图片大小:
- 不越过,直接停止观看
- 就直接超过,用0填充周围
- 移动过程中越过图片大小:
- 零填充:卷积核在提取特征映射时的动作称之为padding(零填充),由于移动步长不一定能整除整张图的像素宽度。其中有两种方式,SAME和VALID
- SAME:越过边缘取样,取出的面积和输入图像的像素宽度一致。
- VALID:不越过边缘取样,取样的面积小于输入的图像的像素宽度。
- 卷积层输出深度、输出宽度
- 深度由过滤器个数决定
- 宽度:
- 输入体积大小H1 * W1 * D1
- 四个超参数:
- Filter数量K
- Filter大小F
- 步长S
- 零填充大小P
- 输出体积大小H2 * W2 * D2
- H2 = (H1-F+2P)/S+1
- W2 = (W1-F+2P)/S+1
- D2 = K
-
卷积计算过程(一个通道一个Filter一个步长):
image.png - 从最左上方开始计算,filter覆盖3*3的方块大小,进行卷积计算(对应的位置相乘在相加),得出的数填在红色方块的一个块里,依次移动计算填入红色方块。
-
当步长为2时:
image.png
-
激活函数
- Relu函数:
f(x) = max(0,x)
- sigmoid函数的缺点:
- 采用sigmoid等函数,反向传播求误差梯度时,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
- 对于深度网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(求不出权重和偏置)。
- 激活函数API:
- tf.nn.rule(features,name=None)
- features:卷积后加上偏置的结果
- return:结果
- tf.nn.rule(features,name=None)
-
池化(Pooling)层
-
Pooling层主要作用是特征提取,通过去掉Feature Map中不重要 的样本,进一步减少参数的数量。Pooling的方法有很多种,最常用的是Max Pooling。Max Pooling的计算方法与卷积层计算法类似,也是用一个小的filter,只不过是选择方框中最大的值,填入最后的结果表中。图下图所示:
image.png -
池化API
- tf.nn.max_pool(value,ksize=,strides=,padding=,name=None)输入上执行最大池数
- value:4-D Tensor形状[batch,height,width,channels]
- ksize:池化窗口大小[1,ksize,ksize,1]
- strides:步长大小,[1,strides,strides,1]
- padding:"SAME","VALID",使用的填充算法的类型,使用“SAME”。
- tf.nn.max_pool(value,ksize=,strides=,padding=,name=None)输入上执行最大池数
-
-
全连接层
- 前面的卷积和池化相当于做特征工程,后面的全连接相当于做特征加权。最后的全连接层在整个卷积神经网络中起到“分类器”的作用。
-
- CNN的结构:
- 卷积网络API介绍
- tf.nn.conv2d(input, filter,strides=,padding=,name=None)计算给定4-Dinput和fileter张量的2维卷积
- input:给定的输入张量,具有[batch,height,width,channel],类型为float32, 64。
- filter:指定过滤器的大小,[filter_height,filter_width, in_channels, out_channels]
- strides:strides=[1, stride,stride, 1]步长
- padding:“SAME”,“VALID”,使用的填充算法的类型,使用“SAME”。其中“VALID”表示滑动超出部分舍弃,“SAME”表示填充,使得变化后height,width一样大。
- tf.nn.conv2d(input, filter,strides=,padding=,name=None)计算给定4-Dinput和fileter张量的2维卷积