2017-10-01 2 views
4

Dans le backend keras nous avons un drapeau with_logits dans K.binary_crossentropy. Quelle est la différence entre la crossentropy binaire normale et la crossentropy binaire avec logits? Supposons que j'utilise un modèle seq2seq et que ma séquence de sortie soit de type 100111100011101. Que dois-je utiliser pour un LSTM ou RNN récursif pour apprendre à partir de ces données, à condition que je donne une séquence similaire dans l'entrée avec timetesps?Quelle est la différence entre la crossentropy binaire et la crossentropy binaire avec logits dans keras?

Répondre

1

Cela dépend si vous avez ou non une couche sigmoïde juste avant la fonction de perte.

S'il y a une couche sigmoïde, elle compactera les scores de classe en probabilités, dans ce cas from_logits devrait être False. La fonction de perte va transformer les probabilités en logits, parce que c'est ce que tf.nn.sigmoid_cross_entropy_with_logits attend.

Si la sortie est déjà un logit (c'est-à-dire le score brut), passez from_logits=True, aucune transformation ne sera effectuée.

Les deux options sont possibles et le choix dépend de l'architecture de votre réseau. Par ailleurs, si le terme logit semble effrayant, jetez un oeil à this question qui en discute en détail.