HashedCrossing 层

[源代码]

HashedCrossing

keras.layers.HashedCrossing(
    num_bins, output_mode="int", sparse=False, name=None, dtype=None, **kwargs
)

使用“哈希技巧”交叉特征的预处理层。

该层使用“哈希技巧”对分类特征进行交叉。从概念上讲,该转换可以视为:hash(concatenate(features)) % num_bins

此层目前仅执行标量输入和标量输入批次的交叉。有效的输入形状为 (batch_size, 1)(batch_size,)()

注意:此层封装了 tf.keras.layers.HashedCrossing。除了 TensorFlow 之外,它不能用作任何后端模型的已编译计算图的一部分。但是,在使用 eager 执行时,它可以与任何后端一起使用。它也可以始终用作任何后端(模型外部)的输入预处理管道的一部分,这是我们推荐使用此层的方式。

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

参数

  • num_bins:哈希桶的数量。
  • output_mode:指定层的输出。值可以是 "int""one_hot",如下配置该层:
    • "int":直接返回整数桶索引。
    • "one_hot":将输入中的每个单独元素编码为一个与 num_bins 大小相同的数组,其中包含输入所在桶索引位置的 1。默认为 "int"
  • sparse:布尔值。仅适用于 "one_hot" 模式,并且仅在使用 TensorFlow 后端时有效。如果为 True,则返回 SparseTensor 而不是密集 Tensor。默认为 False
  • **kwargs:用于构造层的关键字参数。

示例

交叉两个标量特征。

>>> layer = keras.layers.HashedCrossing(
...     num_bins=5)
>>> feat1 = np.array(['A', 'B', 'A', 'B', 'A'])
>>> feat2 = np.array([101, 101, 101, 102, 102])
>>> layer((feat1, feat2))
array([1, 4, 1, 1, 3])

交叉并进行独热编码两个标量特征。

>>> layer = keras.layers.HashedCrossing(
...     num_bins=5, output_mode='one_hot')
>>> feat1 = np.array(['A', 'B', 'A', 'B', 'A'])
>>> feat2 = np.array([101, 101, 101, 102, 102])
>>> layer((feat1, feat2))
array([[0., 1., 0., 0., 0.],
        [0., 0., 0., 0., 1.],
        [0., 1., 0., 0., 0.],
        [0., 1., 0., 0., 0.],
        [0., 0., 0., 1., 0.]], dtype=float32)