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。 但是,当 eager 模式运行时,它可以与任何后端一起使用。 它也始终可以用作任何后端的输入预处理管道的一部分(在模型本身之外),这是我们建议使用此层的方式。
注意: 此层可以安全地在 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]])
参数
mask_value
箱,因此如果设置了 mask_value
,则有效箱数为 (num_bins - 1)
。None
表示不会添加掩码项,并且哈希将从索引 0 开始。默认为 None
。None
,则使用 FarmHash64 哈希函数。 它还支持 2 个无符号整数数字的元组/列表,有关详细信息,请参阅参考论文。 默认为 None
。"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 数组包含箱索引在样本中出现的次数的计数。 默认为 "int"
。"one_hot"
、"multi_hot"
和 "count"
输出模式。 仅 TensorFlow 后端支持。 如果为 True
,则返回 SparseTensor
而不是密集 Tensor
。 默认为 False
。输入形状
单个字符串、字符串列表或形状为 (batch_size, ...,)
的 int32
或 int64
张量。
输出形状
形状为 (batch_size, ...)
的 int32
张量。
参考