哈希层

[源代码]

Hashing

keras.layers.Hashing(
    num_bins, mask_value=None, salt=None, output_mode="int", sparse=False, **kwargs
)

一个用于哈希和分箱类别特征的预处理层。

此层将类别输入转换为哈希输出。它将整数或字符串逐元素转换为固定范围内的整数。稳定的哈希函数使用 tensorflow::ops::Fingerprint 在所有平台上始终如一地生成相同的输出。

此层默认使用 FarmHash64,它在不同的平台上提供一致的哈希输出,并且在调用过程中是稳定的,无论设备和上下文如何,通过彻底混合输入位。

如果您想混淆哈希输出,您也可以在构造函数中传递一个随机的 salt 参数。在这种情况下,该层将使用 SipHash64 哈希函数,其中 salt 值作为哈希函数的额外输入。

注意:此层在内部使用 TensorFlow。它不能用作具有除 TensorFlow 以外的任何后端的模型的编译计算图的一部分。但是,它可以在渴望执行时与任何后端一起使用。它也可以始终用作任何后端输入预处理管道的一部分(在模型本身之外),我们建议您使用此层的方式。

注意:此层可以在 tf.data 管道内安全使用(无论您使用哪个后端)。

示例(FarmHash64)

>>> layer = keras.layers.Hashing(num_bins=3)
>>> inp = [['A'], ['B'], ['C'], ['D'], ['E']]
>>> layer(inp)
array([[1],
        [0],
        [1],
        [1],
        [2]])>

带掩码值的示例(FarmHash64)

>>> layer = keras.layers.Hashing(num_bins=3, mask_value='')
>>> inp = [['A'], ['B'], [''], ['C'], ['D']]
>>> layer(inp)
array([[1],
        [1],
        [0],
        [2],
        [2]])

示例(SipHash64)

>>> layer = keras.layers.Hashing(num_bins=3, salt=[133, 137])
>>> inp = [['A'], ['B'], ['C'], ['D'], ['E']]
>>> layer(inp)
array([[1],
        [2],
        [1],
        [0],
        [2]])

示例(Siphash64 带单个整数,与 salt=[133, 133] 相同)

>>> layer = keras.layers.Hashing(num_bins=3, salt=133)
>>> inp = [['A'], ['B'], ['C'], ['D'], ['E']]
>>> layer(inp)
array([[0],
        [0],
        [2],
        [1],
        [0]])

参数

  • num_bins:哈希箱的数量。请注意,这包括 mask_value 箱,因此如果设置了 mask_value,则有效的箱数为 (num_bins - 1)
  • mask_value:表示掩码输入的值,这些输入映射到索引 0。None 表示不会添加掩码项,哈希将从索引 0 开始。默认为 None
  • salt:单个无符号整数或 None。如果传递,则使用的哈希函数将为 SipHash64,这些值用作附加输入(在密码学中称为“盐”)。这些值应不为零。如果为 None,则使用 FarmHash64 哈希函数。它也支持 2 个无符号整数的元组/列表,有关详细信息,请参阅参考论文。默认为 None
  • 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
  • **kwargs:构造层的关键字参数。

输入形状

单个字符串、字符串列表或形状为 (batch_size, ...,)int32int64 张量。

输出形状

形状为 (batch_size, ...)int32 张量。

参考