概述
介绍参见:https://www.malaoshi.top/show_1EF4YS1pjSMk.html
官方api:
https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization
BN算法的Keras实现,这个函数在后端会调用Tensorflow中的tf.nn.batch_normalization()函数,该函数是底层函数,需要自己处理 平均值 和 方差
语法
__init__(
axis=-1,
momentum=0.99,
epsilon=0.001,
center=True,
scale=True,
beta_initializer='zeros',
gamma_initializer='ones',
moving_mean_initializer='zeros',
moving_variance_initializer='ones',
beta_regularizer=None,
gamma_regularizer=None,
beta_constraint=None,
gamma_constraint=None,
renorm=False,
renorm_clipping=None,
renorm_momentum=0.99,
fused=None,
trainable=True,
virtual_batch_size=None,
adjustment=None,
name=None,
**kwargs
)
参数:
axis:的值取决于按照input的哪一个维度进行BN,例如输入为channel_last format,即[batch_size, height, width, channel],则axis应该设定为4,如果为channel_first format,则axis应该设定为1.
momentum:的值用在训练时,滑动平均的方式计算滑动平均值moving_mean和滑动方差moving_variance。 后面做更详细的说明。
epsilon:大于0的小浮点数,用于防止除0错误
center:为True时,添加位移因子beta到该BN层,否则不添加。添加beta是对BN层的变换加入位移操作。注意,beta一般设定为可训练参数,即trainable=True。
scale:为True时,添加缩放因子gamma到该BN层,否则不添加。添加gamma是对BN层的变化加入缩放操作。注意,gamma一般设定为可训练参数,即trainable=True。
beta_initializer:beta权重的初始方法
gamma_initializer: gamma的初始化方法
moving_mean_initializer: 动态均值的初始化方法
moving_variance_initializer: 动态方差的初始化方法
beta_regularizer: 可选的beta正则
gamma_regularizer: 可选的gamma正则
beta_constraint: 可选的beta约束
gamma_constraint: 可选的gamma约束
trainable:布尔值,如果True参数是可训练的
training: 布尔值
- True: 使用当前输入的均值和方差进行标准化
- False: 使用在训练期间学习到的参数进行标准化
使用注意
- 一般在 卷积层 使用。也有说在 全连接层 后使用
- 一般在 非线性激活 之前使用,也有说在 激活之后使用 效果更好
- 训练时training=True, 预测时training=False
冻结参数(注意有坑)
详见:
https://www.malaoshi.top/show_1EF5JnCCFGcd.html
感谢:
https://www.jianshu.com/p/437fb1a5823e
https://blog.csdn.net/C_chuxin/article/details/86592364