加重クロスエントロピー損失関数:tf.nn.weighted_cross_entropy_with_logits
Weighted Cross Entropy Loss Function
tf.nn.weighted_cross_entropy_with_logits関数
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の値は、偽陰性カウントを減らし、それによって再現率を上げます。逆に、pos_weightsを設定する<1 will reduce false positive counts and improve accuracy. It can be seen from the following that pos_weight is introduced as the multiplication coefficient of the positive target term in the loss expression:
targets * -log(sigmoid(logits)) * pos_weight + (1 - targets) * -log(1 - sigmoid(logits))
簡単にするために、x =ロジット、z =ターゲット、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)を設定し、次のコンテンツを使用して達成します。
(1 - z) * x + l * (log(1 + exp(-abs(x))) + max(-x, 0))
ロジットとターゲットは同じタイプと形状である必要があります。
パラメータ:
- ターゲット:ロジットと同じタイプと形状のテンソル。
- ロジット:テンソル。タイプはfloat32またはfloat64です。
- pos_weight:陽性サンプルで使用される係数。
- name:操作の名前(オプション)。
戻り値:
コンポーネント加重ロジスティック損失を持つロジットと同じ形状のテンソル。
考えられる例外:
- ValueError:ロジットとターゲットの形状が同じでない場合。