2015-09-11 4 views
5

Quelqu'un at-il eu de la chance avec l'écriture d'une fonction de perte AUC personnalisée pour Keras en utilisant Theano?Ajouter AUC comme fonction de perte pour keras

La documentation est ici: http://keras.io/objectives/

Exemple de code est ici: https://github.com/fchollet/keras/blob/master/keras/objectives.py

j'ai vu il y a une mise en œuvre pylearn2, (ce qui est vraiment une enveloppe autour sklearn) mais a été incapable de porter ce à utiliser dans Keras

https://github.com/lisa-lab/pylearn2/blob/master/pylearn2/train_extensions/roc_auc.py

donc je suppose que ma question est, quelqu'un at-il pu écrire cette fonction? et seriez-vous prêt à partager?

+0

Vous pouvez facilement enrouler le RocAUCOp défini dans la bibliothèque pylearn2. En accord avec les signatures keras, cela ressemblerait à (non testé) 'def roc_auc (y_true, y_hat): retourne RocAucScoreOp() (y_true, y_hat)' – user2805751

+2

J'ai essayé d'implémenter leur suggestion de wrapping [le RocAucScoreOp de pylearn2.] (Https : //github.com/lisa-lab/pylearn2/blob/master/pylearn2/train_extensions/roc_auc.py) En essayant de passer cela comme la fonction de perte à model.compile j'ai eu l'erreur suivante:> AttributeError: 'RocAucScoreOp' L'objet n'a pas d'attribut 'grad' La documentation du code source autour de RocAucScoreOp dans pylearn2 suggère qu'il est uniquement destiné à être utilisé sur le canal de surveillance, plutôt que comme la fonction objectif/perte pour l'optimisation. Il semble que, à moins qu'il y ait un moyen de définir un gradient, Keras ne peut pas l'utiliser – kwarnick

+1

La version de pylearn2 est fondamentalement un rappel pour calculer AUC. Vous ne pourrez pas utiliser AUC comme objectif de modélisation d'un réseau (dans Keras ou ailleurs) car il n'est pas différentiable. – DanB

Répondre

5

L'AUC n'est pas différentiable, donc vous ne pouvez pas l'utiliser comme une fonction de perte sans modification. Il y a eu some work sur les algorithmes pour maximiser AUC, mais je recommanderais simplement d'utiliser la perte de probabilité de l'entropie croisée/log régulière.