Batch-Normalization
Batch-Normal的作用:数据的全局缩放,实现均值为0,数据都规整在0附近。
上图中,图1为Batch-Normal,N方向代表样本,H和W代表图片的高和宽。batch-norm操作首先求得H和N方向的像素点的均值
μ
\mu
μ和方差
σ
2
\sigma^2
σ2,然后利用公式
x
^
i
=
x
i
−
μ
B
(
σ
B
2
)
(
l
)
+
ε
\hat{x}_i=\frac {x_i-\mu_B}{\sqrt{(\sigma_B^2)^{(l)}+\varepsilon}}
x^i=(σB2)(l)+εxi−μB求出每个蓝色层中各各像素点Normal化之后的值。之后在由如下公式反向传播训练参数
y
^
i
=
w
x
^
i
+
b
(
梯
度
下
降
更
新
w
、
b
)
\hat{y}_i={w\hat{x}_i+b (梯度下降更新w、b)}
y^i=wx^i+b(梯度下降更新w、b)
例如:
"""Batch-Norm(全局缩放:均值为0,都在0附近)"""
import torch
import torch.nn as nn
import torch.nn.functional as F
x=torch.rand(100,16,784)
layer=nn.BatchNorm1d(16)
out=layer(x)#一次前向运算
print(out)
print(layer.running_mean)#m每个batch的均值
print(layer.running_var)#每个batch的方差
运行结果:(out未截全)
注意:Batch-Normalization可以使训练的收敛速度、精度提升,更利于训练,使训练更稳定,可以避免使用sigmoid函数时出现梯度为0或者梯度离散的情况
各种卷积神经网络的准确率与计算量
ResNet和Inception现在最常用,还有最近的Xception等等