Hashing
classkeras.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, ...,)
的 int32
或 int64
张量.
输出形状:
形状为 (batch_size, ...)
的 int32
张量.
参考: