CategoryEncoding 层

[源代码]

CategoryEncoding

tf_keras.layers.CategoryEncoding(
    num_tokens=None, output_mode="multi_hot", sparse=False, **kwargs
)

一个用于编码整数特征的预处理层。

当已知总词汇量时,该层提供了将数据浓缩为分类编码的选项。它接受整数值作为输入,并输出这些输入的密集或稀疏表示。对于总词汇量未知的整数输入,请改用 tf.keras.layers.IntegerLookup

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

示例

One-hot 编码数据

>>> layer = tf.keras.layers.CategoryEncoding(
...           num_tokens=4, output_mode="one_hot")
>>> layer([3, 2, 0, 1])
<tf.Tensor: shape=(4, 4), dtype=float32, numpy=
  array([[0., 0., 0., 1.],
         [0., 0., 1., 0.],
         [1., 0., 0., 0.],
         [0., 1., 0., 0.]], dtype=float32)>

Multi-hot 编码数据

>>> layer = tf.keras.layers.CategoryEncoding(
...           num_tokens=4, output_mode="multi_hot")
>>> layer([[0, 1], [0, 0], [1, 2], [3, 1]])
<tf.Tensor: shape=(4, 4), dtype=float32, numpy=
  array([[1., 1., 0., 0.],
         [1., 0., 0., 0.],
         [0., 1., 1., 0.],
         [0., 1., 0., 1.]], dtype=float32)>

"count" 模式下使用带权重的输入

>>> layer = tf.keras.layers.CategoryEncoding(
...           num_tokens=4, output_mode="count")
>>> count_weights = np.array([[.1, .2], [.1, .1], [.2, .3], [.4, .2]])
>>> layer([[0, 1], [0, 0], [1, 2], [3, 1]], count_weights=count_weights)
<tf.Tensor: shape=(4, 4), dtype=float64, numpy=
  array([[0.1, 0.2, 0. , 0. ],
         [0.2, 0. , 0. , 0. ],
         [0. , 0.2, 0.3, 0. ],
         [0. , 0.2, 0. , 0.4]], dtype=float32)>

参数

  • num_tokens: 该层应支持的总词汇量。该层的所有输入都必须是范围在 0 <= value < num_tokens 的整数,否则会抛出错误。
  • output_mode: 该层输出的指定方式。可取值为 "one_hot", "multi_hot""count",按下述方式配置层:
    • "one_hot": 将输入中的每个单独元素编码成一个大小为 num_tokens 的数组,在元素对应的索引处包含 1。如果最后一个维度的大小为 1,则在该维度上进行编码。如果最后一个维度的大小不为 1,则会为编码后的输出追加一个新的维度。
    • "multi_hot": 将输入中的每个样本编码成一个大小为 num_tokens 的数组,对于样本中存在的每个词汇项,在对应位置包含 1。将最后一个维度视为样本维度,如果输入形状为 (..., sample_length),则输出形状为 (..., num_tokens)
    • "count": 类似于 "multi_hot",但整数数组包含该索引处的词汇在样本中出现的次数计数。对于所有输出模式,目前仅支持秩为 2 或以下的输出。默认为 "multi_hot"
  • sparse: 布尔值。如果为 True,则返回 SparseTensor 而非密集 Tensor。默认为 False

调用参数

  • inputs: 整数输入的一维或二维张量。
  • count_weights: 一个与 inputs 形状相同的张量,在 count 模式下求和时,指示每个样本值的权重。在 "multi_hot""one_hot" 模式下不使用。