卷积神经网络(CNN)学习笔记
Posted Vinicier
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卷积神经网络(CNN)学习笔记相关的知识,希望对你有一定的参考价值。
卷积神经网络(CNN)
Keywords:
常用网络:LeNet5 、AlexNet VGGNet、 GoogleNet、 ResNet、DenseNet
filter size
stripe
padding
参数共享机制
fine tuning
输入层、卷积层、激励层、池化层、全连接层、Softmax 输出层
一般CNN结构依次为:
一个CNN 层级结构示意图:
卷积层:一组固定的权重和不同窗口内数据做内积,就是卷积。
激励层:
激励函数:
Sigmoid : f(x)=11+e(−x) 函数很容易饱和, |x|≥10 梯度近似于0
Tanh : f(x)=ex−e−xex+e−x 相比Sigmoid 优点是对称中心在原点,缺陷是跟Sigmoid 相似,容易饱和。
ReLU: f(x)=max0,x 收敛快(相比Sigmoid 大致提高6倍),求梯度简单,但比较脆弱
Leaky ReLU: f(x)=maxαx,x 不会饱和,计算速度也很快
ELU:指数线性单元,所有ReLU的优点都有,不会挂,输出均值趋于0,但是有指数存在,计算量略大。
Maxout:两条直线拼接,计算是线性,不会饱和不会挂,缺点是增加了参数。
工业上主流用的还是ReLU(或类ReLU)激励层。
池化层(Pooling layer)
pooling:原理是图像具有局部特征不变性,所以可以采用池化操作。
- Max pooling
- Average pooling
Max pooling 示意图
downsampling
全连接层 (Full connect layer):所有神经元之间都有权重连接,试图尽可能将池化下采样中的信息恢复出来。如果一开始都用全连接层,参数太多,训练量太大,无法有效计算。
CNN 训练算法:
CNN 优缺点:
优点:
- 共享卷积核,对高维数据处理无压力;
- 无需手动选取特征,训练好权重,即获得特征
- 分类效果好
缺点:
- 需要调参,需要大样本量,训练最好要GPU
- 物理含义不明确
常见的CNN 框架
LeNet
AlexNet
GoogleNet
VGGNet
ResNet
DenseNet
Fine tuning:
Mini-batch SGD:
不断循环:
- 采样一个batch 数据(如32张图片,可以做镜像对称);
- 前向计算得到损失loss
- 反向传播计算梯度(一个batch上的)
- 用这部分梯度迭代更新权重参数
CNN训练图像数据预处理: 去均值,但是不要做标准化、PCA和白化。
均值是训练集样本数据的均值,训练集和测试集均需要减去训练集样本均值。
权重初始化
权重初始化,不能全部初始化为0。可采用正态随机初始化
W = np.random.randn(m,n)*0.01 # W初始化,m是输入层神经元个数,n是输出层神经元个数
权重 W 的取值过小,会导致深层的激励为0
Xavier Initialization:
import numpy as np
W = np.random.randn(fan_in,fan_out)/np.sqrt(fan_in)
ReLU activation function:
import numpy as np
W = np.random.randn(node_in, node_out) / np.sqrt(node_in / 2)
Batch Normalization Layer (Google 提出)可以有效降低深度网络对weight初始化的依赖,防止“梯度弥散”:
import tensorflow as tf # tensorflow
# put this before nonlinear transformation
layer = tf.contrib.layers.batch_norm(layer, center=True, scale=True,
is_training=True)
通常在全连接层后,激励层前做。因为全连接层对所有的神经元关联,波动性大。其对激励过后的结果进行约束,使激励后的结果呈现高斯分布。 是对SGD 反向传播训练权重W的约束
Training时
Batch normalization 的好处:
- 梯度传递(计算)更为顺畅;
- 学习率设高一点也没关系;
- 对初始值的依赖减少了!!!
- 这里也可以看作是一种正则化,减少了对Dropout的需求。
以上是关于卷积神经网络(CNN)学习笔记的主要内容,如果未能解决你的问题,请参考以下文章