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
,則使用 FarmHash64 雜湊函數。它也支援由 2 個無號整數組成的 tuple/list,詳細資訊請參閱參考論文。預設為 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
。輸入形狀
單一或字串、int32 或 int64 Tensor
、SparseTensor
或 RaggedTensor
的列表,形狀為 (batch_size, ...,)
輸出形狀
形狀為 (batch_size, ...)
的 int64 Tensor
、SparseTensor
或 RaggedTensor
。如果任何輸入為 RaggedTensor
,則輸出為 RaggedTensor
;否則,如果任何輸入為 SparseTensor
,則輸出為 SparseTensor
;否則,輸出為 Tensor
。
參考