离散化层

[源文件]

Discretization

keras.layers.Discretization(
    bin_boundaries=None,
    num_bins=None,
    epsilon=0.01,
    output_mode="int",
    sparse=False,
    dtype=None,
    name=None,
)

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

该层会将输入的每个数据元素放入多个连续范围中的一个,并输出一个整数索引,表示该元素被放入哪个范围。

注意:该层可以安全地在 tf.data 流水线中使用(无论你使用的是哪个后端)。

输入形状

维度为 2 或更高的任意数组。

输出形状

与输入形状相同。

参数

  • bin_boundaries: 桶边界列表。最左侧和最右侧的桶总是扩展到 -infinf,因此 bin_boundaries=[0., 1., 2.] 生成的桶为 (-inf, 0.)[0., 1.)[1., 2.)[2., +inf)。如果设置此选项,则不应调用 adapt() 方法。
  • num_bins: 要计算的桶的整数数量。如果设置此选项,则不应设置 bin_boundaries,并且应调用 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" 输出模式。仅支持 TensorFlow 后端。如果为 True,则返回 SparseTensor 而不是密集 Tensor。默认为 False

示例

根据提供的桶对浮点值进行离散化。

>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = Discretization(bin_boundaries=[0., 1., 2.])
>>> layer(input)
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 = Discretization(num_bins=4, epsilon=0.01)
>>> layer.adapt(input)
>>> layer(input)
array([[0, 2, 3, 2],
       [1, 3, 3, 1]])