Normalization
类tf_keras.layers.Normalization(
axis=-1, mean=None, variance=None, invert=False, **kwargs
)
一个用于标准化连续特征的预处理层。
此层将输入数据偏移并缩放至以 0 为中心、标准差为 1 的分布。它通过预先计算数据的均值和方差,并在运行时调用 (input - mean) / sqrt(var)
来实现这一点。
该层的均值和方差值必须在构造时提供,或者通过 adapt()
学习。adapt()
将计算数据的均值和方差,并将它们存储为层的权重。应在 fit()
、evaluate()
或 predict()
之前调用 adapt()
。
有关预处理层的概述和完整列表,请参阅预处理指南。
参数
(None, 5)
且 axis=1
,则该层将为最后一个轴跟踪 5 个单独的均值和方差值。如果 axis
设置为 None
,则该层将通过标量均值和方差对输入中的所有元素进行标准化。当 -1
时,输入的最后一个轴被假定为特征维度,并按索引进行标准化。请注意,在仅轴为批处理轴的批处理标量输入的特定情况下,默认情况下将分别对批处理中的每个索引进行标准化。在这种情况下,请考虑传递 axis=None
。默认为 -1
。build()
方法时将引发错误。build()
方法时将引发错误。示例
通过分析 adapt()
中的数据集来计算全局均值和方差。
>>> adapt_data = np.array([1., 2., 3., 4., 5.], dtype='float32')
>>> input_data = np.array([1., 2., 3.], dtype='float32')
>>> layer = tf.keras.layers.Normalization(axis=None)
>>> layer.adapt(adapt_data)
>>> layer(input_data)
<tf.Tensor: shape=(3,), dtype=float32, numpy=
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 = tf.keras.layers.Normalization(axis=-1)
>>> layer.adapt(adapt_data)
>>> layer(input_data)
<tf.Tensor: shape=(1, 3), dtype=float32, numpy=
array([-1., -1., -1.], dtype=float32)>
直接传递均值和方差。
>>> input_data = np.array([[1.], [2.], [3.]], dtype='float32')
>>> layer = tf.keras.layers.Normalization(mean=3., variance=2.)
>>> layer(input_data)
<tf.Tensor: shape=(3, 1), dtype=float32, numpy=
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 = tf.keras.layers.Normalization(axis=-1, invert=True)
>>> layer.adapt(adapt_data)
>>> layer(input_data)
<tf.Tensor: shape=(1, 3), dtype=float32, numpy=
array([2., 10., 8.], dtype=float32)>