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ć?
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
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
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