2015-09-11 14 views
5

Czy ktoś miał szczęście pisząc niestandardową funkcję utraty AUC dla Keras za pomocą Theano?Dodaj AUC jako funkcję utraty dla kable

Dokumentacja jest tutaj: http://keras.io/objectives/

Przykładowy kod jest tutaj: https://github.com/fchollet/keras/blob/master/keras/objectives.py

Widziałem tam jest implementacją w pylearn2, (który jest naprawdę owinięcie wokół sklearn), ale nie był w stanie do portu, aby używać w Keras

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

więc myślę, że moje pytanie brzmi, czy ktoś był w stanie napisać tej funkcji? i czy chciałbyś się podzielić?

+0

Możesz łatwo owinąć RocAUCOp zdefiniowany w bibliotece pylearn2. Zgodnie z sygnaturami kerasów, wyglądałoby to jak (untestowane) 'def roc_auc (y_true, y_hat): return RocAucScoreOp() (y_true, y_hat)' – user2805751

+2

Próbowałem implementować ich sugestię zawijania [RocAucScoreOp z pylearn2.] (Https : //github.com/lisa-lab/pylearn2/blob/master/pylearn2/train_extensions/roc_auc.py) Próbując przekazać to jako funkcję utraty do modelu.compile, otrzymałem następujący błąd:> AttributeError: 'RocAucScoreOp' obiekt nie ma atrybutu "grad" Dokumentacja kodu źródłowego wokół RocAucScoreOp w pylearn2 sugeruje, że jest on przeznaczony tylko do wykorzystania w kanale monitorującym, a nie jako funkcja celu/straty do optymalizacji. Wygląda na to, że jeśli nie ma sposobu na zdefiniowanie gradientu, Keras nie może go użyć. – kwarnick

+1

Wersja pylearn2 to po prostu wywołanie zwrotne do obliczenia AUC. Nie będziesz w stanie wykorzystać AUC jako celu modelowania sieci (w Keras lub gdziekolwiek indziej), ponieważ nie jest on różny. – DanB

Odpowiedz

5

AUC nie jest różniczkowalna, więc nie można go używać jako funkcji straty bez modyfikacji. Było some work o algorytmach maksymalizacji AUC, ale polecam tylko użycie zwykłej utraty entropii/logu.

Powiązane problemy