來自 (Ioffe et al., 2015) 的批量歸一化層。
繼承自:BatchNormalization
、Layer
、Layer
、Module
用法
tf.compat.v1.layers.BatchNormalization(
axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True,
beta_initializer=tf.compat.v1.zeros_initializer(),
gamma_initializer=tf.compat.v1.ones_initializer(),
moving_mean_initializer=tf.compat.v1.zeros_initializer(),
moving_variance_initializer=tf.compat.v1.ones_initializer(),
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
一個int
或int
列表,一個或多個軸應該被規範化,通常是特征軸/軸。例如,在帶有data_format="channels_first"
的Conv2D
層之後,設置axis=1
。如果提供了軸列表,則axis
中的每個軸將同時進行歸一化。默認為-1
,它使用最後一個軸。注意:當使用 multi-axis 批範數時,beta
,gamma
,moving_mean
和moving_variance
變量與輸入張量的等級相同,所有縮減(非軸)維度中的維度大小為 1)。 -
momentum
移動平均線的動量。 -
epsilon
小浮點數添加到方差中以避免除以零。 -
center
如果為 True,則將beta
的偏移量添加到歸一化張量。如果為 False,則忽略beta
。 -
scale
如果為真,乘以gamma
。如果為 False,則不使用gamma
。當下一層是線性的(例如nn.relu
)時,可以禁用此函數,因為縮放可以由下一層完成。 -
beta_initializer
Beta 權重的初始化程序。 -
gamma_initializer
伽馬權重的初始化器。 -
moving_mean_initializer
移動均值的初始化器。 -
moving_variance_initializer
移動方差的初始化程序。 -
beta_regularizer
beta 權重的可選正則化器。 -
gamma_regularizer
伽馬權重的可選正則化器。 -
beta_constraint
由Optimizer
更新後應用於beta
權重的可選投影函數(例如,用於實現層權重的範數約束或值約束)。該函數必須將未投影變量作為輸入,並且必須返回投影變量(必須具有相同的形狀)。在進行異步分布式訓練時使用約束是不安全的。 -
gamma_constraint
在被Optimizer
更新後,將應用於gamma
權重的可選投影函數。 -
renorm
是否使用 Batch Renormalization (Ioffe, 2017)。這在訓練期間增加了額外的變量。對於此參數的任一值,推斷都是相同的。 -
renorm_clipping
可以將鍵 'rmax'、'rmin'、'dmax' 映射到標量Tensors
的字典,用於裁剪 renorm 校正。校正(r, d)
用作corrected_value = normalized_value * r + d
,r
被剪裁為 [rmin, rmax],d
被剪裁為 [-dmax, dmax]。缺少的rmax、rmin、dmax分別設置為 inf, 0、 inf,。 -
renorm_momentum
用於使用 renorm 更新移動均值和標準差的動量。與momentum
不同,這會影響訓練,並且既不能太小(會增加噪音)也不能太大(會給出過時的估計)。請注意,momentum
仍用於獲取推理的均值和方差。 -
fused
如果None
或True
,請盡可能使用更快的融合實現。如果False
,使用係統推薦的實現。 -
trainable
布爾值,如果True
還將變量添加到圖形集合GraphKeys.TRAINABLE_VARIABLES
(請參閱 tf.Variable)。 -
virtual_batch_size
一個int
。默認情況下,virtual_batch_size
是None
,這意味著在整個批次中執行批次標準化。當virtual_batch_size
不是None
時,改為執行“Ghost Batch Normalization”,它會創建虛擬的 sub-batches,每個都分別進行標準化(使用共享的 gamma、beta 和移動統計信息)。執行過程中必須除以實際的batch size。 -
adjustment
一個函數采用包含輸入張量的(動態)形狀的Tensor
並返回一對(比例,偏差)以應用於歸一化值(在 gamma 和 beta 之前),僅在訓練期間。例如,如果 axis==-1,adjustment = lambda shape:( tf.random.uniform(shape[-1:], 0.93, 1.07), tf.random.uniform(shape[-1:], -0.1, 0.1))
會將歸一化值向上或向下縮放最多 7%,然後將結果最多移動 0.1(每個特征都有獨立的縮放和偏差,但在所有示例中共享) ,最後應用 gamma 和/或 beta。如果None
,則不應用任何調整。如果指定了virtual_batch_size,則無法指定。 -
name
一個字符串,圖層的名稱。
屬性
-
graph
-
scope_name
遷移到 TF2
警告:這個 API 是為 TensorFlow v1 設計的。繼續閱讀有關如何從該 API 遷移到本機 TensorFlow v2 等效項的詳細信息。見TensorFlow v1 到 TensorFlow v2 遷移指南有關如何遷移其餘代碼的說明。
此 API 是一個遺留 api,僅與 Eager Execution 和 tf.function
兼容,如果您將其與 tf.compat.v1.keras.utils.track_tf1_style_variables
結合使用
請參閱遷移指南的 tf.layers 模型映射部分,了解如何在 TF2 中將 TensorFlow v1 模型與 Keras 一起使用。
對應的 TensorFlow v2 層是 tf.keras.layers.BatchNormalization
。
到原生 TF2 的結構映射
支持的參數均未更改名稱。
前:
bn = tf.compat.v1.layers.BatchNormalization()
後:
bn = tf.keras.layers.BatchNormalization()
如何映射參數
TF1 參數名稱 | TF2 參數名稱 | 注意 |
---|---|---|
name |
name |
圖層基類 |
trainable |
trainable |
圖層基類 |
axis |
axis |
- |
momentum |
momentum |
- |
epsilon |
epsilon |
- |
center |
center |
- |
scale |
scale |
- |
beta_initializer |
beta_initializer |
- |
gamma_initializer |
gamma_initializer |
- |
moving_mean_initializer |
moving_mean_initializer |
- |
beta_regularizer |
`beta_regularizer' | - |
gamma_regularizer |
`gamma_regularizer' | - |
beta_constraint |
`beta_constraint' | - |
gamma_constraint |
`gamma_constraint' | - |
renorm |
不支持 | - |
renorm_clipping |
不支持 | - |
renorm_momentum |
不支持 | - |
fused |
不支持 | - |
virtual_batch_size |
不支持 | - |
adjustment |
不支持 | - |
Keras API 處理 moving_mean 和 moving_variance 的 BatchNormalization 更新,作為其 fit()
和 evaluate()
循環的一部分。但是,如果自定義訓練循環與 Model
的實例一起使用,則需要明確包含這些更新。這是一個如何完成的簡單示例:
# model is an instance of Model that contains BatchNormalization layer.
update_ops = model.get_updates_for(None) + model.get_updates_for(features)
train_op = optimizer.minimize(loss)
train_op = tf.group([train_op, update_ops])
參考:
Batch Normalization - 通過減少內部協變量偏移來加速深度網絡訓練:Ioffe 等人,2015 (pdf) Batch Renormalization - Towards Reducing Minibatch Dependence in Batch-Normalized 模型:Ioffe,2017 (pdf)
相關用法
- Python tf.compat.v1.layers.conv3d用法及代碼示例
- Python tf.compat.v1.layers.Conv3D用法及代碼示例
- Python tf.compat.v1.layers.dense用法及代碼示例
- Python tf.compat.v1.layers.AveragePooling3D用法及代碼示例
- Python tf.compat.v1.layers.Conv2DTranspose用法及代碼示例
- Python tf.compat.v1.layers.max_pooling3d用法及代碼示例
- Python tf.compat.v1.layers.average_pooling1d用法及代碼示例
- Python tf.compat.v1.layers.experimental.keras_style_scope用法及代碼示例
- Python tf.compat.v1.layers.flatten用法及代碼示例
- Python tf.compat.v1.layers.conv1d用法及代碼示例
- Python tf.compat.v1.layers.experimental.set_keras_style用法及代碼示例
- Python tf.compat.v1.layers.conv2d_transpose用法及代碼示例
- Python tf.compat.v1.layers.dropout用法及代碼示例
- Python tf.compat.v1.layers.batch_normalization用法及代碼示例
- Python tf.compat.v1.layers.average_pooling2d用法及代碼示例
- Python tf.compat.v1.layers.MaxPooling1D用法及代碼示例
- Python tf.compat.v1.layers.conv2d用法及代碼示例
- Python tf.compat.v1.layers.Conv2D用法及代碼示例
- Python tf.compat.v1.layers.AveragePooling1D用法及代碼示例
- Python tf.compat.v1.layers.max_pooling1d用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.layers.BatchNormalization。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。