Normalization 类keras.layers.Normalization(axis=-1, mean=None, variance=None, invert=False, **kwargs)
对连续特征进行归一化的预处理层。
此层会将输入值调整并缩放到一个均值为 0、标准差为 1 的分布。它通过预先计算数据的均值和方差,并在运行时调用 (input - mean) / sqrt(var) 来实现。
该层的均值和方差值必须在构造时提供,或者通过 adapt() 方法学习。adapt() 将计算数据的均值和方差,并将其存储为该层的权重。在调用 fit()、evaluate() 或 predict() 之前,应该调用 adapt()。
注意:该层可以在 tf.data 或 grain 管道中使用(无论您使用的是哪个后端),且是安全的。
参数
(None, 5) 且 axis=1,该层将为最后一个轴跟踪 5 个独立的均值和方差值。如果 axis 设置为 None,该层将使用标量均值和方差对输入中的所有元素进行归一化。当为 -1 时,输入的最后一个轴被假定为特征维度,并按索引进行归一化。请注意,在仅包含批次轴的批次标量输入的情况下,默认情况下将单独归一化批次中的每个索引。在这种情况下,请考虑传递 axis=None。默认为 -1。build() 方法时将引发错误。mean 和 variance 必须一起指定。build() 方法时将引发错误。mean 和 variance 必须一起指定。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)