tf.keras.layers.BatchNormalization(bn层)

概述

介绍参见: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: 使用在训练期间学习到的参数进行标准化

使用注意

  1. 一般在 卷积层 使用。也有说在 全连接层 后使用
  2. 一般在 非线性激活 之前使用,也有说在 激活之后使用 效果更好
  3. 训练时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


原文出处:/show_1EF4YE1tLZ5t.html