2017-08-28 3 views
1

Je comprends les gens utilisent généralement la perte et l'erreur ci-dessous pour formerDéfinir propre perte et classer erreur dans cntk

ce = cross_entropy_with_softmax(z, label_var) 
pe = classification_error(z, label_var) 
trainer = Trainer(z, (ce, pe), ...) 

Peut-on remplacer ou définir propres méthodes de perte et d'erreur? Ce dont nous avons vraiment besoin, c'est d'ajouter des poids lorsque nous calculons la perte et l'erreur. Par exemple, nous avons 4 classes, il est important (plus de poids) de ne pas mal classer la première classe comme autre classe et vice versa, mais pas aussi importante (moins de poids) si elle se classe mal parmi les 3 dernières classes. Quelle est la meilleure façon de gérer cela dans cntk?

Répondre

1

Oui, toute expression CNTK est une perte ou une erreur valide: entropie croisée Ici:

ce = C.negate (C.reduce_sum (C.element_times (cible, C.log (prédiction)), axe = -1))

+0

C'est génial! J'ai du mal à comprendre comment je peux ajouter les poids à l'exemple que vous avez fourni. Je pense à créer un tableau NxN de error_weights, où N est le nombre de classes. Cependant, je ne suis pas sûr de savoir comment créer une perte valide en utilisant error_weights, ResNet Model, z, et input label_var, qui est similaire à cross_entropy_with_softmax (z, label_var). Serait-il possible de me donner un exemple de code simple ou quelques directions que je peux suivre? Merci! –

+0

Je suppose que je peux créer une méthode ci-dessous si je peux obtenir une sortie du modèle z. Est-il possible d'obtenir une prédiction du modèle? def my_criterion (z, cible): prédiction = get_from_model (z) perte = calculer_pour_plusieurs poids (prévision, cible) perte de retour –