批标准化层 tf.keras.layers.Batchnormalization()解析

作者:壮壮不太胖^QwQ 时间:2023-06-18 23:35:17 

批标准化层 tf.keras.layers.Batchnormalization()

tf.keras.layers.Batchnormalization()

重要参数:

  • training:布尔值,指示图层应在训练模式还是在推理模式下运行。

  • training=True:该图层将使用当前批输入的均值和方差对其输入进行标准化。

  • training=False:该层将使用在训练期间学习的移动统计数据的均值和方差来标准化其输入。

BatchNormalization 广泛用于 Keras 内置的许多高级卷积神经网络架构,比如 ResNet50、Inception V3 和 Xception。

BatchNormalization 层通常在卷积层或密集连接层之后使用。

批标准化的实现过程

  • 求每一个训练批次数据的均值

  • 求每一个训练批次数据的方差

  • 数据进行标准化

  • 训练参数γ,β

  • 输出y通过γ与β的线性变换得到原来的数值

在训练的正向传播中,不会改变当前输出,只记录下γ与β。在反向传播的时候,根据求得的γ与β通过链式求导方式,求出学习速率以至改变权值。

对于预测阶段时所使用的均值和方差,其实也是来源于训练集。比如我们在模型训练时我们就记录下每个batch下的均值和方差,待训练完毕后,我们求整个训练样本的均值和方差期望值,作为我们进行预测时进行BN的的均值和方差。

批标准化的使用位置

原始论文讲在CNN中一般应作用与非线性激活函数之前,但是,实际上放在激活函数之后效果可能会更好。

# 放在非线性激活函数之前
model.add(tf.keras.layers.Conv2D(64, (3, 3)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Activation('relu'))

# 放在激活函数之后
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.BatchNormalization())

tf.keras.layers.BatchNormalization使用细节

关于keras中的BatchNormalization使用,官方文档说的足够详细。本文的目的旨在说明在BatchNormalization的使用过程中容易被忽略的细节。

在BatchNormalization的Arguments参数中有trainable属性;以及在Call arguments参数中有training。两个都是bool类型。第一次看到有两个参数的时候,我有点懵,为什么需要两个?

后来在查阅资料后发现了两者的不同作用。

1,trainable是Argument参数,类似于c++中构造函数的参数一样,是构建一个BatchNormalization层时就需要传入的,至于它的作用在下面会讲到。

2,training参数时Call argument(调用参数),是运行过程中需要传入的,用来控制模型在那个模式(train还是interfere)下运行。关于这个参数,如果使用模型调用fit()的话,是可以不给的(官方推荐是不给),因为在fit()的时候,模型会自己根据相应的阶段(是train阶段还是inference阶段)决定training值,这是由learning——phase机制实现的。

重点

关于trainable=False:如果设置trainable=False,那么这一层的BatchNormalization层就会被冻结(freeze),它的trainable weights(可训练参数)(就是gamma和beta)就不会被更新。

注意:freeze mode和inference mode是两个概念。

但是,在BatchNormalization层中,如果把某一层BatchNormalization层设置为trainable=False,那么这一层BatchNormalization层将一inference mode运行,也就是说(meaning that it will use the moving mean and the moving variance to normalize the current batch, rather than using the mean and variance of the current batch).

来源:https://blog.csdn.net/weixin_46072771/article/details/108591263

标签:tf,keras,layers,Batchnormalization
0
投稿

猜你喜欢

  • 一文搞懂 parseInt()函数异常行为

    2024-04-30 08:57:11
  • 基于Python实现自动关机小工具

    2023-05-07 23:48:47
  • 详解vue-cli下ESlint 配置说明

    2024-05-02 16:34:31
  • 详解nodejs内置模块

    2024-05-03 15:54:20
  • 用ASP和SQL实现基于Web日历源码

    2010-04-24 15:52:00
  • Python 下载Bing壁纸的示例

    2023-11-20 00:14:41
  • Python项目管理Git常用命令详图讲解

    2021-01-24 13:41:38
  • Bootstrap风格的zTree右键菜单

    2024-05-02 17:32:42
  • python通过ElementTree操作XML

    2021-01-09 09:12:20
  • 在keras中实现查看其训练loss值

    2021-03-05 05:29:44
  • JavaScript常见数组方法之如何转置矩阵

    2024-04-17 10:37:41
  • ASP如何操作Excel(读取,输出)

    2007-08-21 19:57:00
  • MySQL如何利用DCL管理用户和控制权限

    2024-01-14 13:33:21
  • Python线程编程之Thread详解

    2022-04-10 17:37:01
  • 机器学习之KNN算法原理及Python实现方法详解

    2023-05-17 00:38:43
  • ASP|HTML]单引与双引号

    2008-03-12 11:42:00
  • python装饰器初探(推荐)

    2023-01-19 14:40:27
  • oracle使用instr或like方法判断是否包含字符串

    2024-01-15 14:59:44
  • Pytorch使用MNIST数据集实现基础GAN和DCGAN详解

    2021-11-17 02:14:33
  • golang 中strings包的Replace的使用说明

    2024-02-09 16:02:04
  • asp之家 网络编程 m.aspxhome.com