当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Python tf.keras.layers.Hashing用法及代码示例

一个预处理层,对分类特征进行散列和分箱。

继承自:LayerModule

用法

tf.keras.layers.Hashing(
    num_bins, mask_value=None, salt=None, output_mode='int', sparse=False,
    **kwargs
)

参数

  • num_bins 哈希箱的数量。请注意,这包括mask_value bin,因此如果设置了mask_value,则有效的 bin 数为 (num_bins - 1)
  • mask_value 表示掩码输入的值,映射到索引 0。默认为无,这意味着不会添加掩码项,散列将从索引 0 开始。
  • salt 单个无符号整数或无。如果通过,则使用的散列函数将是 SipHash64,这些值用作附加输入(在密码学中称为 "salt")。这些应该是非零的。默认为None(在这种情况下,使用 FarmHash64 哈希函数)。它还支持 2 个无符号整数的元组/列表,有关详细信息,请参阅参考论文。
  • output_mode 层输出的规范。默认为"int".值可以是"int","one_hot","multi_hot", 或者"count"配置层如下:
    • "int" :直接返回整数 bin 索引。
    • "one_hot" :将输入中的每个单独元素编码为与 num_bins 大小相同的数组,在输入的 bin 索引处包含 1。如果最后一个维度是大小 1,将在该维度上进行编码。如果最后一个维度不是大小 1,将为编码输出附加一个新维度。
    • "multi_hot" :将输入中的每个样本编码为与 num_bins 大小相同的单个数组,其中包含样本中存在的每个 bin 索引索引的 1。将最后一个维度视为样本维度,如果输入形状为 (..., sample_length) ,则输出形状将为 (..., num_tokens)
    • "count" :与 "multi_hot" 一样,但 int 数组包含 bin 索引在样本中出现的次数的计数。
  • sparse 布尔值。仅适用于 "one_hot" , "multi_hot""count" 输出模式。如果为 True,则返回 SparseTensor 而不是密集的 Tensor 。默认为假。
  • **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]])>

输入形状:

单个或字符串列表,int32 或 int64 Tensor , SparseTensorRaggedTensor,形状为 (batch_size, ...,)

输出形状:

形状为 (batch_size, ...) 的 int64 Tensor , SparseTensorRaggedTensor。如果任何输入为 RaggedTensor 则输出为 RaggedTensor ,否则如果任何输入为 SparseTensor 则输出为 SparseTensor ,否则输出为 Tensor

参考:

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.layers.Hashing。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。