軟體極大類別交叉熵
tflearn.objectives.softmax_categorical_crossentropy (y_pred, y_true)
計算 y_pred(Logits)與 y_true(標籤)之間的軟體極大交叉熵。
在類別相互排他的離散分類工作中,測量機率誤差(每個詞條恰好存在一個類別中)。例如,每個 CIFAR-10 圖像只標註一個且只有一個標籤:圖像可以是一隻狗或一輛卡車,但不可能同時是兩者。
警告:這個運算需要未縮放的 Logits,因為它會對 y_pred
執行 softmax
以提升效率。請勿使用 softmax
的輸出呼叫這個運算,因為這會產生不正確的結果。
y_pred
和 y_true
必須具有相同的形狀 [batch_size, num_classes]
和相同的資料類型(float32
或 float64
)。此外, 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_pred
和 y_true
必須具有相同的形狀 [batch_size, num_classes]
和相同的資料類型(float32
或 float64
)。此外, 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 = logits
,z = targets
。邏輯損失為
x - x * z + log(1 + exp(-x))
為了確保穩定且避免溢位,實作使用
max(x, 0) - x * z + log(1 + exp(-abs(x)))
y_pred
和 y_true
必須具有相同的型態和形狀。
引數
- y_pred:
Tensor
,為float
型態。預測值。 - y_true:
Tensor
,為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_pred:
Tensor
,為float
型態。預測值。 - y_true:
Tensor
,為float
型態。目標 (標籤)。 - weight:一個係數,用於正面範例中。
均方損失
tflearn.objectives.mean_square (y_pred, y_true)
引數
- y_pred:
Tensor
,為float
型態。預測值。 - y_true:
Tensor
,為float
型態。目標 (標籤)。
鉸鏈損失
tflearn.objectives.hinge_loss (y_pred, y_true)
引數
- y_pred:
Tensor
,為float
型態。預測值。 - y_true:
Tensor
,為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_pred:
tensor, float
- [batch_size, width, height, num_classes]。 - y_true:
標籤張量, int32
- [batch_size, width, height, num_classes]。資料的真實情況。 - num_classes:
int
。類別數量。 - epsilon:
float
。要加入y_pred
的小數目。 - head:
numpy array
- [num_classes]。對每個類別的損失加權。
傳回值
浮動類型損失張量。