哈希层

[source]

Hashing class

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 哈希函数.它还支持两个无符号整数数字的元组/列表,详见参考论文.默认为 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 张量.

参考: