Tensorflow学习笔记No.6
数据的批标准化
本篇主要讲述什么是标准化,为什么要标准化,以及如何进行标准化(添加BN层)。
1.什么是标准化
传统机器学习中标准化也叫做归一化。
一般是将数据映射到指定的范围,用于去除不同维度数据的量纲以及量纲单位(说白了就是让数据尽可能处于某个范围内)。
数据标准化让机器学习模型看到的不同样本彼此之间更加相似,这有助于模型的学习与对新数据的泛化。
常见的数据标准化形式:
标准化:
将数据减去其平均值使其中心值为0,然后将数据除以其标准差使其标准差为1。
归一化:
将数据减去最小值除以最大时,使取值范围压缩到0~1之间。
批标准化:
Batch Normalization(BN),批标准化
和普通的数据标准化类似,是将分散的数据统一的一种做法,也是优化神经网络的一种方法。
不仅在数据输入之前对数据做标准化,在网络模型的每一次变换之后都应该考虑数据的标准化。
即使在训练过程中,均值和方差随着时间发生变化,它也可以适应性的将数据标准化。
2.为什么要做批标准化
批标准化解决的问题是梯度消失与梯度爆炸。
批标准化是一种训练优化方法。
梯度消失与梯度爆炸:
对于激活函数,之前一直使用Sigmoid函数,其函数图像成一个S型,如下所示,它会使得输出在[0, 1]之间:
批标准化的好处:
数据预处理可以加速收敛,同理,在神经网络中使用批标准化也可以加速收敛,而且还有更多的优点。
1.具有正则化的效果(抑制过拟合)。
2.提高模型泛化能力。
3.允许更高的学习率从而加速收敛。
4.批标准化有助于梯度的传播,因此能够使用更深的网络进行训练。对于特别深的神经网络,只有包含多个Batch Normalization(BN)层才能进行训练。
3.tensorflow实现批标准化
Batch Normalization通常在卷积层或者全连接层之后使用(原始论文中一般是应用于卷积层或全连接层之后,在激活函数之前。但是,实际上放在激活函数之后效果可能更好)。
使用tf.keras.layers.Batchnormalization()来实现。
tf.keras.layers.Batchnormalization()不仅可以处理训练数据的均值和方差,也可以在预测时,根据训练数据均值和方差的期望值对测试数据进行处理。
代码:
1 model.add(tf.keras.layers.Conv2D(64, (3, 3))) 2 model.add(tf.keras.layers.BatchNormalization()) 3 model.add(tf.keras.layers.Activation('relu')) 4 #两种BN层插入方式 5 model.add(tf.keras.layers.Conv2D(64, (3, 3), activation = 'relu')) 6 model.add(tf.keras.layers.BatchNormalization())