層歸一化層(Ba et al., 2016)。
用法
tf.keras.layers.LayerNormalization(
    axis=-1, epsilon=0.001, center=True, scale=True,
    beta_initializer='zeros', gamma_initializer='ones',
    beta_regularizer=None, gamma_regularizer=None, beta_constraint=None,
    gamma_constraint=None, **kwargs
)參數
- 
axis整數或列表/元組。要標準化的軸或軸。通常這是特征軸/軸。 left-out 軸通常是批處理軸/軸。此參數默認為-1,即輸入中的最後一個維度。
- 
epsilon小浮點數添加到方差中以避免除以零。默認為 1e-3
- 
center如果為 True,則將beta的偏移量添加到歸一化張量。如果為 False,則忽略beta。默認為真。
- 
scale如果為真,乘以gamma。如果為 False,則不使用gamma。默認為真。當下一層是線性的(例如nn.relu)時,可以禁用此函數,因為縮放將由下一層完成。
- 
beta_initializerBeta 權重的初始化程序。默認為零。
- 
gamma_initializer伽馬權重的初始化器。默認為一個。
- 
beta_regularizerbeta 權重的可選正則化器。默認情況下無。
- 
gamma_regularizer伽馬權重的可選正則化器。默認情況下無。
- 
beta_constraintBeta 權重的可選約束。默認情況下無。
- 
gamma_constraint伽馬權重的可選約束。默認情況下無。
在一個批次中獨立地對每個給定示例的前一層的激活進行歸一化,而不是像 Batch Normalization 那樣跨批次進行歸一化。即應用一個變換,保持每個示例中的平均激活接近 0,激活標準偏差接近 1。
給定張量 inputs ,計算矩並在 axis 中指定的軸上執行歸一化。
例子:
data = tf.constant(np.arange(10).reshape(5, 2) * 10, dtype=tf.float32)
print(data)
tf.Tensor(
[[ 0. 10.]
 [20. 30.]
 [40. 50.]
 [60. 70.]
 [80. 90.]], shape=(5, 2), dtype=float32)layer = tf.keras.layers.LayerNormalization(axis=1)
output = layer(data)
print(output)
tf.Tensor(
[[-1. 1.]
 [-1. 1.]
 [-1. 1.]
 [-1. 1.]
 [-1. 1.]], shape=(5, 2), dtype=float32)請注意,使用層歸一化,歸一化發生在每個示例中的軸上,而不是批處理中的不同示例。
如果啟用了 scale 或 center,則該層將通過使用可訓練變量 gamma 廣播它們來縮放標準化輸出,並通過使用可訓練變量 beta 廣播來居中輸出。 gamma 將默認為一個張量,beta 將默認為一個零張量,因此在訓練開始之前居中和縮放是no-ops。
因此,啟用縮放和居中後,歸一化方程如下:
讓小批量的中間激活為 inputs 。
對於inputs 中具有k 特征的每個樣本x_i,我們計算樣本的均值和方差:
mean_i = sum(x_i[j] for j in range(k)) / k
var_i = sum((x_i[j] - mean_i) ** 2 for j in range(k)) / k然後計算歸一化的 x_i_normalized ,包括一個小因子 epsilon 以實現數值穩定性。
x_i_normalized = (x_i - mean_i) / sqrt(var_i + epsilon)最後 x_i_normalized 由 gamma 和 beta 線性變換,它們是學習參數:
output_i = x_i_normalized * gamma + betagamma 和 beta 將跨越 axis 中指定的 inputs 的軸,並且必須完全定義這部分輸入的形狀。
例如:
layer = tf.keras.layers.LayerNormalization(axis=[1, 2, 3])
layer.build([5, 20, 30, 40])
print(layer.beta.shape)
(20, 30, 40)
print(layer.gamma.shape)
(20, 30, 40)請注意,層規範化的其他實現可能會選擇在一組單獨的軸上定義 gamma 和 beta,而這些軸與被規範化的軸不同。例如,組大小為 1 的組標準化(Wu et al. 2018)對應於跨高度、寬度和通道標準化的層標準化,並且 gamma 和 beta 僅跨越通道維度。因此,此層規範化實現將不匹配組大小設置為 1 的組規範化層。
輸入形狀:
隨意的。將此層用作模型中的第一層時,請使用關鍵字參數input_shape(整數元組,不包括樣本軸)。
輸出形狀:
與輸入的形狀相同。
參考:
相關用法
- Python tf.keras.layers.Layer用法及代碼示例
- Python tf.keras.layers.Layer.add_loss用法及代碼示例
- Python tf.keras.layers.Layer.add_metric用法及代碼示例
- Python tf.keras.layers.Layer.set_weights用法及代碼示例
- Python tf.keras.layers.Layer.get_weights用法及代碼示例
- Python tf.keras.layers.Lambda用法及代碼示例
- Python tf.keras.layers.LocallyConnected1D用法及代碼示例
- Python tf.keras.layers.LSTMCell用法及代碼示例
- Python tf.keras.layers.LSTM用法及代碼示例
- Python tf.keras.layers.LeakyReLU用法及代碼示例
- Python tf.keras.layers.LocallyConnected2D用法及代碼示例
- Python tf.keras.layers.InputLayer用法及代碼示例
- Python tf.keras.layers.serialize用法及代碼示例
- Python tf.keras.layers.Dropout用法及代碼示例
- Python tf.keras.layers.maximum用法及代碼示例
- Python tf.keras.layers.Conv2D用法及代碼示例
- Python tf.keras.layers.RepeatVector用法及代碼示例
- Python tf.keras.layers.Multiply用法及代碼示例
- Python tf.keras.layers.Activation用法及代碼示例
- Python tf.keras.layers.Conv1D用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.keras.layers.LayerNormalization。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
