Normalization
類別keras.layers.Normalization(axis=-1, mean=None, variance=None, invert=False, **kwargs)
一個用於標準化連續特徵的預處理層。
此層會將輸入平移和縮放到一個以 0 為中心、標準差為 1 的分佈中。它通過預先計算數據的平均值和變異數,並在運行時調用 (input - mean) / sqrt(var)
來實現。
此層的平均值和變異數值必須在建構時提供,或通過 adapt()
學習。adapt()
將計算數據的平均值和變異數,並將它們存儲為層的權重。adapt()
應在 fit()
、evaluate()
或 predict()
之前調用。
參數
(None, 5)
且 axis=1
,則此層將追蹤最後一個軸的 5 個單獨的平均值和變異數值。如果 axis
設定為 None
,則此層將通過純量平均值和變異數來標準化輸入中的所有元素。當為 `-1` 時,輸入的最後一個軸會被假定為特徵維度,並針對每個索引進行標準化。請注意,在批次純量輸入的特定情況下,其中唯一的軸是批次軸,預設會單獨標準化批次中的每個索引。在這種情況下,請考慮傳遞 axis=None
。預設值為 `-1`。build()
方法時,將引發錯誤。build()
方法時,將引發錯誤。True
,則此層會將反向轉換應用於其輸入:它會將標準化輸入轉回其原始形式。範例
通過分析 adapt()
中的資料集來計算全域平均值和變異數。
>>> adapt_data = np.array([1., 2., 3., 4., 5.], dtype='float32')
>>> input_data = np.array([1., 2., 3.], dtype='float32')
>>> layer = keras.layers.Normalization(axis=None)
>>> layer.adapt(adapt_data)
>>> layer(input_data)
array([-1.4142135, -0.70710677, 0.], dtype=float32)
計算最後一個軸上每個索引的平均值和變異數。
>>> adapt_data = np.array([[0., 7., 4.],
... [2., 9., 6.],
... [0., 7., 4.],
... [2., 9., 6.]], dtype='float32')
>>> input_data = np.array([[0., 7., 4.]], dtype='float32')
>>> layer = keras.layers.Normalization(axis=-1)
>>> layer.adapt(adapt_data)
>>> layer(input_data)
array([-1., -1., -1.], dtype=float32)
直接傳遞平均值和變異數。
>>> input_data = np.array([[1.], [2.], [3.]], dtype='float32')
>>> layer = keras.layers.Normalization(mean=3., variance=2.)
>>> layer(input_data)
array([[-1.4142135 ],
[-0.70710677],
[ 0. ]], dtype=float32)
使用此層來反標準化輸入(在調整層之後)。
>>> adapt_data = np.array([[0., 7., 4.],
... [2., 9., 6.],
... [0., 7., 4.],
... [2., 9., 6.]], dtype='float32')
>>> input_data = np.array([[1., 2., 3.]], dtype='float32')
>>> layer = keras.layers.Normalization(axis=-1, invert=True)
>>> layer.adapt(adapt_data)
>>> layer(input_data)
array([2., 10., 8.], dtype=float32)