離散化層

[原始碼]

Discretization 類別

tf_keras.layers.Discretization(
    bin_boundaries=None,
    num_bins=None,
    epsilon=0.01,
    output_mode="int",
    sparse=False,
    **kwargs
)

一個透過範圍將連續特徵分桶的預處理層。

此層會將其輸入資料的每個元素放入數個連續範圍之一,並輸出一個整數索引,指示每個元素被放入哪個範圍。

有關預處理層的概述和完整列表,請參閱預處理指南

輸入形狀

任何維度為 2 或更高的tf.Tensortf.RaggedTensor

輸出形狀

與輸入形狀相同。

參數

  • bin_boundaries:分桶邊界的列表。最左邊和最右邊的桶將始終延伸到 -infinf,因此 bin_boundaries=[0., 1., 2.] 會產生桶 (-inf, 0.)[0., 1.)[1., 2.)[2., +inf)。如果設定此選項,則不應呼叫 adapt()
  • num_bins:要計算的桶的整數數量。如果設定此選項,則應呼叫 adapt() 以學習桶邊界。
  • epsilon:誤差容忍度,通常是接近零的小分數(例如 0.01)。較高的 epsilon 值會增加分位數近似值,因此會導致更多不均勻的桶,但可以提高效能和資源消耗。
  • 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

範例

根據提供的桶對浮點數值進行分桶。

>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = tf.keras.layers.Discretization(bin_boundaries=[0., 1., 2.])
>>> layer(input)
<tf.Tensor: shape=(2, 4), dtype=int64, numpy=
array([[0, 2, 3, 1],
       [1, 3, 2, 1]])>

根據要計算的桶的數量對浮點數值進行分桶。

>>> input = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])
>>> layer = tf.keras.layers.Discretization(num_bins=4, epsilon=0.01)
>>> layer.adapt(input)
>>> layer(input)
<tf.Tensor: shape=(2, 4), dtype=int64, numpy=
array([[0, 2, 3, 2],
       [1, 3, 3, 1]])>