离散化层

[source]

Discretization

tf_keras.layers.Discretization(
    bin_boundaries=None,
    num_bins=None,
    epsilon=0.01,
    output_mode="int",
    sparse=False,
    **kwargs
)

一个通过范围将连续特征分桶的预处理层。

该层会将输入数据的每个元素放入几个连续范围中的一个,并输出一个整数索引,指示每个元素所在的范围。

有关预处理层的概述和完整列表,请参阅预处理指南

输入形状

任意维度为 2 或更高的 tf.Tensortf.RaggedTensor

输出形状

与输入形状相同。

参数

  • bin_boundaries:分箱边界列表。最左边和最右边的分箱始终会扩展到 -infinf,因此 bin_boundaries=[0., 1., 2.] 会生成分箱 (-inf, 0.)[0., 1.)[1., 2.)[2., +inf)。如果设置了此选项,则不应调用 adapt()
  • num_bins:要计算的整数分箱数。如果设置了此选项,则应调用 adapt() 以学习分箱边界。
  • epsilon:误差容忍度,通常是一个接近零的小数(例如 0.01)。更高的 epsilon 值会增加分位数近似,从而导致分桶更不均匀,但可以提高性能和资源消耗。
  • output_mode:层输出的规格。值可以是 "int""one_hot""multi_hot""count",配置层如下:
    • "int":直接返回离散化的分箱索引。
    • "one_hot":将输入的每个单独元素编码为与 num_bins 大小相同的数组,在输入元素所在分箱索引处包含 1。如果最后一个维度的大小为 1,则在该维度上编码。如果最后一个维度的大小不为 1,则会为编码后的输出附加一个新的维度。
    • "multi_hot":将输入的每个样本编码为与 num_bins 大小相同的单个数组,对于样本中存在的每个分箱索引,该数组包含 1。将最后一个维度视为样本维度;如果输入形状为 (..., sample_length),则输出形状为 (..., num_tokens)
    • "count":与 "multi_hot" 类似,但整数数组包含分箱索引在样本中出现的次数计数。默认为 "int"
  • sparse:布尔值。仅适用于 "one_hot""multi_hot""count" 输出模式。如果为 True,则返回 SparseTensor 而不是稠密 Tensor。默认为 False

示例

根据提供的分桶对浮点值进行分桶。

>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = tf.keras.layers.Discretization(bin_boundaries=[0., 1., 2.])
>>> layer(input)
<tf.Tensor: shape=(2, 4), dtype=int64, numpy=
array([[0, 2, 3, 1],
       [1, 3, 2, 1]])>

根据要计算的分桶数对浮点值进行分桶。

>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = tf.keras.layers.Discretization(num_bins=4, epsilon=0.01)
>>> layer.adapt(input)
>>> layer(input)
<tf.Tensor: shape=(2, 4), dtype=int64, numpy=
array([[0, 2, 3, 2],
       [1, 3, 3, 1]])>