CategoryEncoding 层

[源代码]

CategoryEncoding

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

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

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

注意:此层可以在 tf.data 管道中使用(与您使用的后端无关)。

示例

独热编码数据

>>> layer = keras.layers.CategoryEncoding(
...           num_tokens=4, output_mode="one_hot")
>>> layer([3, 2, 0, 1])
array([[0., 0., 0., 1.],
        [0., 0., 1., 0.],
        [1., 0., 0., 0.],
        [0., 1., 0., 0.]]>

多热编码数据

>>> layer = keras.layers.CategoryEncoding(
...           num_tokens=4, output_mode="multi_hot")
>>> layer([[0, 1], [0, 0], [1, 2], [3, 1]])
array([[1., 1., 0., 0.],
        [1., 0., 0., 0.],
        [0., 1., 1., 0.],
        [0., 1., 0., 1.]]>

"count"模式下使用加权输入

>>> layer = 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)
  array([[0.1, 0.2, 0. , 0. ],
         [0.2, 0. , 0. , 0. ],
         [0. , 0.2, 0.3, 0. ],
         [0. , 0.2, 0. , 0.4]]>

参数

  • 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:是否返回稀疏张量;适用于支持稀疏张量的后端。

调用参数

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