層歸一化層(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_initializer
Beta 權重的初始化程序。默認為零。 -
gamma_initializer
伽馬權重的初始化器。默認為一個。 -
beta_regularizer
beta 權重的可選正則化器。默認情況下無。 -
gamma_regularizer
伽馬權重的可選正則化器。默認情況下無。 -
beta_constraint
Beta 權重的可選約束。默認情況下無。 -
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 + beta
gamma
和 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。