軟體極大類別交叉熵

tflearn.objectives.softmax_categorical_crossentropy (y_pred, y_true)

計算 y_pred(Logits)與 y_true(標籤)之間的軟體極大交叉熵。

在類別相互排他的離散分類工作中,測量機率誤差(每個詞條恰好存在一個類別中)。例如,每個 CIFAR-10 圖像只標註一個且只有一個標籤:圖像可以是一隻狗或一輛卡車,但不可能同時是兩者。

警告:這個運算需要未縮放的 Logits,因為它會對 y_pred 執行 softmax 以提升效率。請勿使用 softmax 的輸出呼叫這個運算,因為這會產生不正確的結果。

y_predy_true 必須具有相同的形狀 [batch_size, num_classes] 和相同的資料類型(float32float64)。此外, y_true (標籤)必須是二元陣列(例如,在總計 5 個不同類別中第 2 個類別將定義為 [0., 1., 0., 0., 0.])。

引數

  • y_pred張量。預測值。
  • y_true張量。目標(標籤),一個機率分配。

類別交叉熵

tflearn.objectives.categorical_crossentropy (y_pred, y_true)

計算 y_pred(Logits)與 y_true(標籤)之間的交叉熵。

在類別相互排他的離散分類工作中,測量機率誤差(每個詞條恰好存在一個類別中)。例如,每個 CIFAR-10 圖像只標註一個且只有一個標籤:圖像可以是一隻狗或一輛卡車,但不可能同時是兩者。

y_predy_true 必須具有相同的形狀 [batch_size, num_classes] 和相同的資料類型(float32float64)。此外, y_true (標籤)必須是二元陣列(例如,在總計 5 個不同類別中第 2 個類別將定義為 [0., 1., 0., 0., 0.])。

引數

  • y_pred張量。預測值。
  • y_true張量。目標(標籤),一個機率分配。

二元交叉熵

tflearn.objectives.binary_crossentropy (y_pred, y_true)

計算 y_pred(Logits)與 y_true(標籤)之間的 sigmod 交叉熵。

在每個類別相互獨立且不排他的離散分類工作中,測量機率誤差。例如,可以執行多標籤分類,其中一張圖片可以同時包含大象和狗。

為簡潔,令 x = logitsz = targets。邏輯損失為

x - x * z + log(1 + exp(-x))

為了確保穩定且避免溢位,實作使用

max(x, 0) - x * z + log(1 + exp(-abs(x)))

y_predy_true 必須具有相同的型態和形狀。

引數

  • y_predTensor,為 float 型態。預測值。
  • y_trueTensor,為 float 型態。目標 (標籤)。

加權交叉熵

tflearn.objectives.weighted_crossentropy (y_pred, y_true, weight)

計算 y_pred (logits) 和 y_true (標籤) 之間的加權 sigmoid 交叉熵。

計算加權交叉熵。

這類似於 sigmoid_cross_entropy_with_logits(),但因為 pos_weight,可藉由相對於負面錯誤加重或減輕正面錯誤的成本,來權衡召回率和精準度。

通常的交叉熵成本定義為

targets * -log(sigmoid(logits)) + (1 - targets) * -log(1 - sigmoid(logits))

參數 pos_weight 用作正面目標的乘數

targets * -log(sigmoid(logits)) * pos_weight + (1 - targets) * -log(1 - sigmoid(logits))

為簡潔起見,設 l = (1 + (q - 1) * z),為了確保穩定且避免溢位,實作使用

  qz * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
= qz * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
= qz * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
= qz * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
= (1 - z) * x + (qz +  1 - z) * log(1 + exp(-x))
= (1 - z) * x + (1 + (q - 1) * z) * log(1 + exp(-x))

設定 l = (1 + (q - 1) * z),為了確保穩定且避免溢位,實作使用

(1 - z) * x + l * (log(1 + exp(-abs(x))) + max(-x, 0))

logits 和 targets 必須具有相同的型態和形狀。

引數

  • y_predTensor,為 float 型態。預測值。
  • y_trueTensor,為 float 型態。目標 (標籤)。
  • weight:一個係數,用於正面範例中。

均方損失

tflearn.objectives.mean_square (y_pred, y_true)

引數

  • y_predTensor,為 float 型態。預測值。
  • y_trueTensor,為 float 型態。目標 (標籤)。

鉸鏈損失

tflearn.objectives.hinge_loss (y_pred, y_true)

引數

  • y_predTensor,為 float 型態。預測值。
  • y_trueTensor,為 float 型態。目標 (標籤)。

ROC AUC 分數

tflearn.objectives.roc_auc_score (y_pred, y_true)

近似曲線下面積分數,使用基於 Wilcoxon-Mann-Whitney U 統計量的近似值。

Yan, L., Dodier, R., Mozer, M. C., & Wolniewicz, R. (2003)。Optimizing Classifier Performance via an Approximation to the Wilcoxon-Mann-Whitney Statistic。

衡量一整組閾值範圍中的整體效能。

引數

  • y_pred張量。預測值。
  • y_true張量。目標(標籤),一個機率分配。

微弱交叉熵 2d

tflearn.objectives.weak_cross_entropy_2d (y_pred, y_true, num_classes=None, epsilon=0.0001, head=None)

使用 weak softmax 交叉熵損失計算語意分割。

給定預測值 y_pred 的形狀為 2d 的影像,以及對應的 y_true,會計算廣泛使用的語意分割損失。目前不支援使用 tf.nn.softmax_cross_entropy_with_logits。請參閱 https://github.com/tensorflow/tensorflow/issues/2327#issuecomment-224491229

引數

  • y_predtensor, float - [batch_size, width, height, num_classes]。
  • y_true標籤張量, int32 - [batch_size, width, height, num_classes]。資料的真實情況。
  • num_classesint。類別數量。
  • epsilonfloat。要加入 y_pred 的小數目。
  • headnumpy array - [num_classes]。對每個類別的損失加權。

傳回值

浮動類型損失張量。