雜湊層

[原始碼]

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]])>

引數

  • num_bins:雜湊分箱的數量。請注意,這包含 mask_value 分箱,因此如果設定了 mask_value,則有效的分箱數量為 (num_bins - 1)
  • mask_value:代表遮罩輸入的值,會被對應到索引 0。None 表示不會新增遮罩項,且雜湊將從索引 0 開始。預設為 None
  • salt:一個單一的無號整數或 None。如果傳遞,將使用 SipHash64 雜湊函數,這些值將作為額外輸入(在密碼學中稱為「鹽」)。這些值應該是非零的。如果為 None,則使用 FarmHash64 雜湊函數。它也支援由 2 個無號整數組成的 tuple/list,詳細資訊請參閱參考論文。預設為 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" 輸出模式。如果為 True,則會回傳 SparseTensor 而非密集的 Tensor。預設為 False
  • **kwargs:建構層的關鍵字引數。

輸入形狀

單一或字串、int32 或 int64 TensorSparseTensorRaggedTensor 的列表,形狀為 (batch_size, ...,)

輸出形狀

形狀為 (batch_size, ...) 的 int64 TensorSparseTensorRaggedTensor。如果任何輸入為 RaggedTensor,則輸出為 RaggedTensor;否則,如果任何輸入為 SparseTensor,則輸出為 SparseTensor;否則,輸出為 Tensor

參考