tf中的batchnorm
目录
- tf中的batchnorm
- 1. 使用batchnorm目的
- 2. 常见Normalization([N, C, H*W])
- 3. Batch normalization
- 4. TensorFlow中Batch normalization实现
- 5. 使用Batch normalization好处
1. 使用batchnorm目的
- 在使用sigmoid函数时,在函数两端的梯度几乎为0,位于这部分区间的数据参数更新很慢。利用
normalization可以把之前数据的分布平移缩放到0附近,这样有利于数据参数更新 - image Normalization(图片数据规整化)
def normalize(x, mean, std):
x = x - mean
x = x / std
return x
2. 常见Normalization([N, C, H*W])
- Batch Norm:在C(通道维)计算均值和方差用于Normalization
- Layer Norm:在N(实例维)计算均值和方差用于Normalization
- Instance Norm:在N上的每个C上计算均值和方差用于Normalization
3. Batch normalization
- 通过计算出的均值和方差将数据规整化
z
ˇ
i
=
z
i
−
μ
σ
check z^i = frac{z^i -mu}{sigma}
zˇi=σzi−μ
- 通过学习而得的参数(学习而得的均值和方差)将数据规整化,使其服从N(
β
beta
β
,
γ
, gamma
,γ)分布
z
^
i
=
γ
⨀
z
ˇ
i
+
β
hat z^i = gamma bigodot check z^i+beta
z^i=γ⨀zˇi+β
4. TensorFlow中Batch normalization实现
- 使用函数net = layers.BatchNormalization()实现,其中默认的四个参数分别如下所示
axis=-1 表示在哪个轴上做normalization
center=True 表示是否使用
β
beta
β参数
scale=True 表示是否使用
γ
gamma
γ参数
trainable=True 表示
β
beta
β,
γ
gamma
γ参数是否需要反向传播
5. 使用Batch normalization好处
- 收敛速度更快
- 得到更好的结果
- 模型更稳定(减少因学习率导致梯度导致参数不更新的可能),可以使用更大的学习率