Comment puis-je mettre en œuvre pondérée de la croix entropie dans tensorflow à l'aide de sparse_softmax_cross_entropy_with_logits
Je commence à utiliser tensorflow (venant de Caffe), et je suis en utilisant la perte sparse_softmax_cross_entropy_with_logits
. La fonction accepte des labels comme 0,1,...C-1
au lieu de onehot encodages. Maintenant, je veux utiliser une pondération en fonction de la classe de l'étiquette; je sais que cela peut être fait peut-être avec une multiplication de matrice si j'utilise softmax_cross_entropy_with_logits
(un hot d'encodage), Est-il possible de faire la même chose avec sparse_softmax_cross_entropy_with_logits
?
OriginalL'auteur Roger Trullo | 2016-10-23
Vous devez vous connecter pour publier un commentaire.
weights
à my_custom_model?OriginalL'auteur mauna
Spécifiquement pour la classification binaire, il est
weighted_cross_entropy_with_logits
, qui calcule pondérée softmax de la croix de l'entropie.sparse_softmax_cross_entropy_with_logits
est-à-queue pour un haut-efficace de la non-pondérée de l'opération (voirSparseSoftmaxXentWithLogitsOp
qui utiliseSparseXentEigenImpl
sous le capot), il n'est donc pas "pluggable".En multi-cas de la classe, votre option est de passer de l'un à chaud-encodage ou de l'utilisation
tf.les pertes.sparse_softmax_cross_entropy
perte de fonction dans un hacky façon, comme l'a déjà suggéré, où vous aurez à passer les poids selon les étiquettes dans un lot en cours.OriginalL'auteur Maxim
La classe de poids sont multipliés par les logits, de sorte que fonctionne encore pour sparse_softmax_cross_entropy_with_logits. Reportez-vous à cette solution de la "Perte de fonction de classe déséquilibrée binaire classificateur en Tenseur de flux."
Comme une note de côté, vous pouvez passer les poids directement dans sparse_softmax_cross_entropy
Cette méthode est utilisée pour l'entropie croisée à l'aide de
Poids agit comme un coefficient de perte. Si un scalaire est fourni, alors la perte est tout simplement mis à l'échelle par la valeur donnée. Si le poids est un tenseur de taille [batch_size], puis la perte de poids s'appliquent à chaque échantillon correspondant.
Je ne pense pas que cette réponse est correcte. Le poids dans
tf.contrib.losses.sparse_softmax_cross_entropy
est par exemple, et non par classe.C'est correct, c'est juste ennuyeux. Vous voulez passer un poids pour chaque mise à jour et qui dépend de la classe particulière qui est dans le courant de mise à jour. Donc, si vous aviez un lot de taille 3 et les classes ont été 1,1,2. Et vous avez voulu classe de poids de 1 à 50%, puis vous utilisez cette perte de fonction et passer le poids de l'argument d'un tenseur avec les valeurs de [0.5,0.5,1.0]. Que serait un moyen efficace de poids de votre classe... Élégant? Pas de. Efficace oui.
OriginalL'auteur Alexa Greenberg