目录
1 理论
1.1 从前定义的标准化
我们先说什么是标准化,在传统机器学习中标准化也叫归一化,是将一组数据映射到某一范围的过程,这一步的目的是去除不同数据取值范围的影响,比如有的数据取值范围[0,9],这个时候我们除9就是对其进行归一化,有的数据取值范围[0,255],这个时候我们除255就是对其进行归一化
1.2 现在定义的标准化与批标准化
那么在现在的定义中,归一化与标准化产生了区别,标准化的运算方法是对所有值减均值,然后除方差,归一化的运算方法就是上面提到的运算方法
之后我们再说批标准化,批标准化不仅对输入前的数据做标准化,而且还在每一次变化后(比如卷积)再次进行标准化
批标准化解决了梯度消失与梯度爆炸的问题,本质上是一种优化方法
- 梯度消失:梯度过小
- 梯度爆炸:梯度过大
1.3 批标准化的好处
批标准化有这样几个好处
有了上面这三个好处,我们的神经网络的深度就可以更深,有些公认效果好的网络(如Resnet50)就使用了批标准化的方法
1.4 批标准化在代码中的使用方式
在代码中这样使用,它是神经网络中的一层
1.5 批标准化的执行过程
1.5.1 训练中的执行过程
批标准化的实现过程是这样的
1.5.2 预测中的执行过程
1.6 批标准化的参数
- training
训练模式用True,预测模式用False
2 代码实现
我们使用之前卫星图片分类的训练代码,在其中加入批标准化(BN)层
我们有两种添加方式,一种在激活之前加
另一种在激活之后加
下面这个是我们上次的summary,批标准化层可以在有训练参数的地方添加,不能在没有训练参数的地方添加,最后的输出层最好也不要添加
上一次的模型结果已经很好了,在这里就不训练了