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]])
参数
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"。"one_hot"、"multi_hot" 和 "count" 输出模式。仅受 TensorFlow 后端支持。如果为 True,则返回 SparseTensor 而不是密集 Tensor。默认为 False。输入形状
单个字符串、字符串列表或形状为 (batch_size, ...,) 的 int32 或 int64 张量。
输出形状
形状为 (batch_size, ...) 的 int32 张量。
参考