2017-02-27 27 views
2

tf.nn.weighted_cross_entropy_with_logits()を使用する前にtf.nn.softmax()を使用してログのsoftmaxを取得する必要がありますか?softmaxとtf.nn.weighted_cross_entropy_with_logitsの使用

私は不均衡なセットに対してバイナリ分類を行い、後者のクラスがデータ中で不十分であることを補うためにpos_weight値を[1.0,15.0]に設定しました。

他の同様のオペレーターtf.nn.softmax_cross_entropy_with_logits()は、あらかじめsoftmaxを使用しないと明示していますが、重み付きバージョンは指定していません。私は、モデルを学習しないうちにソフトマックスを使うとき(例えば、AUCが0.500に収束する)の有無にかかわらず試しました。

私のモデルの最後の層は、[batch_size, 2]テンソルでelu活性化を使用しています。私のラベルはファーストクラスの場合は[1, 0]、2番目の場合は[0, 1]と書かれています。

答えて

1

tf.nn.weighted_cross_entropy_with_logits()を使用する前にtf.nn.softmax()を使用してロギングのsoftmaxを取得する必要がありますか?

weighted_cross_entropy_with_logitsは、ターゲットにシグモイドを適用するので、そうしないでください。

あなたはcodeでそれを見ることができます:FYI

def weighted_cross_entropy_with_logits(targets, logits, pos_weight, name=None): 
    """Computes a weighted cross entropy. 

    For brevity, let `x = logits`, `z = targets`, `q = pos_weight`. 

    The loss is: 
    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)) 

    Setting `l = (1 + (q - 1) * z)`, to ensure stability and avoid overflow, 
    the implementation uses 
    (1 - z) * x + l * (log(1 + exp(-abs(x))) + max(-x, 0)) 

    """ 
    # The logistic loss formula from above is 
    # (1 - z) * x + (1 + (q - 1) * z) * log(1 + exp(-x)) 
    # For x < 0, a more numerically stable formula is 
    # (1 - z) * x + (1 + (q - 1) * z) * log(1 + exp(x)) - l * x 
    # To avoid branching, we use the combined version 
    # (1 - z) * x + l * (log(1 + exp(-abs(x))) + max(-x, 0)) 
    log_weight = 1 + (pos_weight - 1) * targets 
    return math_ops.add(
     (1 - targets) * logits, 
     log_weight * (math_ops.log1p(math_ops.exp(-math_ops.abs(logits))) + 
         nn_ops.relu(-logits)), 
     name=name) 

Softmax vs Sigmoid function in Logistic classifier?

関連する問題