TensorFlow函數(shù)教程:tf.nn.weighted_cross_entropy_with_logits

2019-02-14 14:54 更新

tf.nn.weighted_cross_entropy_with_logits函數(shù)

tf.nn.weighted_cross_entropy_with_logits(
    targets,
    logits,
    pos_weight,
    name=None
)

定義在:tensorflow/python/ops/nn_impl.py。

計算加權交叉熵。

類似于sigmoid_cross_entropy_with_logits(),除了pos_weight,允許人們通過向上或向下加權相對于負誤差的正誤差的成本來權衡召回率和精確度。

通常的交叉熵成本定義為:

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

值pos_weights > 1減少了假陰性計數(shù),從而增加了召回率。相反設置pos_weights < 1會減少假陽性計數(shù)并提高精度。從一下內(nèi)容可以看出pos_weight是作為損失表達式中的正目標項的乘法系數(shù)引入的:

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

為了簡便起見,讓x = logits,z = targets,q = pos_weight。損失是:

  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),確保穩(wěn)定性并避免溢出,使用一下內(nèi)容來實現(xiàn):

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

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

參數(shù):

  • targets:一個Tensor,與logits具有相同的類型和形狀。
  • logits:一個Tensor,類型為float32或float64。
  • pos_weight:正樣本中使用的系數(shù)。
  • name:操作的名稱(可選)。

返回:

與具有分量加權邏輯損失的logits具有相同形狀的Tensor。

可能引發(fā)的異常:

  • ValueError:如果logits和targets沒有相同的形狀。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號