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


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


批量標準化層的函數接口from_config(Ioffe 等人,2015)。

用法

tf.compat.v1.layers.batch_normalization(
    inputs, 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, training=False, trainable=True, name=None, reuse=None,
    renorm=False, renorm_clipping=None, renorm_momentum=0.99, fused=None,
    virtual_batch_size=None, adjustment=None
)

參數

  • inputs 張量輸入。
  • axis 一個 int ,應該標準化的軸(通常是特征軸)。例如,在帶有 data_format="channels_first"Convolution2D 層之後,在 BatchNormalization 中設置 axis=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 權重的可選投影函數。
  • training Python 布爾值或 TensorFlow 布爾標量張量(例如占位符)。是在訓練模式(使用當前批次的統計數據歸一化)還是在推理模式(使用移動統計數據歸一化)返回輸出。NOTE:確保正確設置此參數,否則您的訓練/推理將無法正常工作。
  • trainable 布爾值,如果 True 還將變量添加到圖形集合 GraphKeys.TRAINABLE_VARIABLES(請參閱 tf.Variable)。
  • name 字符串,圖層的名稱。
  • reuse 布爾值,是否重用前一層同名的權重。
  • 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 ,使用係統推薦的實現。
  • 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,則無法指定。

返回

  • 輸出張量。

拋出

  • ValueError 如果啟用了即刻執行。

遷移到 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

tf.control_dependencies(tf.GraphKeys.UPDATE_OPS) 的批量更新模式不應在原生 TF2 中使用。有關詳細信息,請參閱 tf.keras.layers.BatchNormalization 文檔。

到原生 TF2 的結構映射

支持的參數均未更改名稱。

前:

x_norm = tf.compat.v1.layers.batch_normalization(x)

後:

要使用 TF1 函數層遷移代碼,請使用 Keras 函數 API:

x = tf.keras.Input(shape=(28, 28, 1),)
 y = tf.keras.layers.BatchNormalization()(x)
 model = tf.keras.Model(x, y)

如何映射參數

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 不支持 -

注意:訓練時,moving_mean和moving_variance需要更新。默認情況下,更新操作放置在 tf.GraphKeys.UPDATE_OPS 中,因此它們需要與 train_op 一起執行。此外,請務必在獲取 update_ops 集合之前添加任何 batch_normalization 操作。否則,update_ops 將為空,訓練/推理將無法正常工作。例如:

x_norm = tf.compat.v1.layers.batch_normalization(x, training=training)

  # ...

  update_ops = tf.compat.v1.get_collection(tf.GraphKeys.UPDATE_OPS)
  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.batch_normalization。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。