Hashing
类tf_keras.layers.Hashing(
num_bins, mask_value=None, salt=None, output_mode="int", sparse=False, **kwargs
)
一个哈希并将分类特征分桶的预处理层。
此层将分类输入转换为哈希输出。它按元素将整数或字符串转换为固定范围内的整数。稳定的哈希函数使用 tensorflow::ops::Fingerprint
在所有平台之间产生一致的输出。
默认情况下,此层使用 FarmHash64,它通过彻底混合输入位,在不同平台之间提供一致的哈希输出,并且无论设备和上下文如何,在调用之间保持稳定。
如果你想混淆哈希输出,你还可以在构造函数中传递一个随机的 salt
参数。在这种情况下,该层将使用 SipHash64 哈希函数,其中 salt
值作为哈希函数的额外输入。
有关预处理层的概述和完整列表,请参阅预处理指南。
示例 (FarmHash64)
>>> layer = tf.keras.layers.Hashing(num_bins=3)
>>> inp = [['A'], ['B'], ['C'], ['D'], ['E']]
>>> layer(inp)
<tf.Tensor: shape=(5, 1), dtype=int64, numpy=
array([[1],
[0],
[1],
[1],
[2]])>
示例 (FarmHash64) 带掩码值
>>> layer = tf.keras.layers.Hashing(num_bins=3, mask_value='')
>>> inp = [['A'], ['B'], [''], ['C'], ['D']]
>>> layer(inp)
<tf.Tensor: shape=(5, 1), dtype=int64, numpy=
array([[1],
[1],
[0],
[2],
[2]])>
示例 (SipHash64)
>>> layer = tf.keras.layers.Hashing(num_bins=3, salt=[133, 137])
>>> inp = [['A'], ['B'], ['C'], ['D'], ['E']]
>>> layer(inp)
<tf.Tensor: shape=(5, 1), dtype=int64, numpy=
array([[1],
[2],
[1],
[0],
[2]])>
示例 (Siphash64) 使用单个整数(与 salt=[133, 133]
相同)
>>> layer = tf.keras.layers.Hashing(num_bins=3, salt=133)
>>> inp = [['A'], ['B'], ['C'], ['D'], ['E']]
>>> layer(inp)
<tf.Tensor: shape=(5, 1), dtype=int64, numpy=
array([[0],
[0],
[2],
[1],
[0]])>
参数
mask_value
对应的桶,因此如果设置了 mask_value
,则有效桶的数量为 (num_bins - 1)
。None
表示不添加掩码项,哈希将从索引 0 开始。默认为 None
。None
。如果传入,将使用 SipHash64 哈希函数,这些值将用作额外输入(在密码学中称为“salt”)。这些值应非零。如果为 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"
。"one_hot"
、"multi_hot"
和 "count"
输出模式。如果为 True,则返回 SparseTensor
而不是稠密 Tensor
。默认为 False
。输入形状
单个或列表形式的 string、int32 或 int64 Tensor
、SparseTensor
或 RaggedTensor
,形状为 (batch_size, ...,)
输出形状
一个 int64 Tensor
、SparseTensor
或 RaggedTensor
,形状为 (batch_size, ...)
。如果任何输入是 RaggedTensor
,则输出是 RaggedTensor
;否则,如果任何输入是 SparseTensor
,则输出是 SparseTensor
;否则,输出是 Tensor
。
参考