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://zhuanlan.zhihu.com/p/56225304
https://tensorflow.google.cn/api_docs/python/tf/keras/layers/BatchNormalization

你可能感兴趣的:(深度学习,tensorflow,机器学习,python)