當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.compat.v1.layers.BatchNormalization用法及代碼示例


來自 (Ioffe et al., 2015) 的批量歸一化層。

繼承自:BatchNormalizationLayerLayerModule

用法

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 一個 intint 列表,一個或多個軸應該被規範化,通常是特征軸/軸。例如,在帶有 data_format="channels_first"Conv2D 層之後,設置 axis=1 。如果提供了軸列表,則 axis 中的每個軸將同時進行歸一化。默認為-1,它使用最後一個軸。注意:當使用 multi-axis 批範數時,beta , gamma , moving_meanmoving_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 + dr 被剪裁為 [rmin, rmax],d 被剪裁為 [-dmax, dmax]。缺少的rmax、rmin、dmax分別設置為 inf, 0、 inf,。
  • renorm_momentum 用於使用 renorm 更新移動均值和標準差的動量。與 momentum 不同,這會影響訓練,並且既不能太小(會增加噪音)也不能太大(會給出過時的估計)。請注意,momentum 仍用於獲取推理的均值和方差。
  • fused 如果 NoneTrue ,請盡可能使用更快的融合實現。如果 False ,使用係統推薦的實現。
  • trainable 布爾值,如果 True 還將變量添加到圖形集合 GraphKeys.TRAINABLE_VARIABLES(請參閱 tf.Variable)。
  • virtual_batch_size 一個 int 。默認情況下,virtual_batch_sizeNone ,這意味著在整個批次中執行批次標準化。當 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)

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.layers.BatchNormalization。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。