离散化层

[source]

Discretization class

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

一个预处理层,用于将连续特征分桶到不同的区间.

该层会将输入数据的每个元素放入若干个连续区间之一,并输出一个整数索引,指示每个元素被放入的区间.

注意: 该层在 tf.data 管道中使用是安全的(无论使用哪个后端).

输入形状: 任何二维或更高维的数组.

输出形状: 与输入形状相同.

参数: 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" 输出模式.仅支持 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]])