當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。