2015-09-11 16 views
5

誰もケアがテアノを使用してカスタムAUC損失関数を書くことに運があったのですか?ケラスの損失関数としてAUCを追加

ドキュメントはここにある:http://keras.io/objectives/

サンプル・コードはここにある:私は(本当にsklearnのラッパーである)pylearn2での実装は、ありましたが、ポートにこれを使用することができませんでしたhttps://github.com/fchollet/keras/blob/master/keras/objectives.py

Keras

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

にだから私は私の質問は、誰もがこの関数を記述することができたと思い?あなたは共有したいと思いますか?

+0

pylearn2ライブラリで定義されているRocAUCOpを簡単にラップすることができます。 kerasシグネチャに沿って、それが(未テスト) 'デフroc_auc(y_true、y_hat)のようになります。RocAucScoreOp()(y_true、y_hat)' – user2805751

+2

を返す私はラップの彼らの提案実装してみました(HTTPS [pylearn2からRocAucScoreOpを。] :>はAttributeError:「RocAucScoreOp」model.compileする損失関数としてこれを渡ししようとすると//github.com/lisa-lab/pylearn2/blob/master/pylearn2/train_extensions/roc_auc.py)私は、次のエラーを得ましたオブジェクトに属性 'grad'はありません。pylearn2のRocAucScoreOpに関するソースコードのドキュメントは、最適化の目的関数/損失関数ではなく、監視チャネルでのみ使用することを意図していることを示しています。勾配を定義する方法がない限り、Kerasはそれを使用できません。 – kwarnick

+1

pylearn2バージョンは基本的にAUCを計算するためのコールバックです。あなたは、AUCをネットワークのモデリング目的(Kerasまたは他の場所)として使用することはできません。 – DanB

答えて

5

AUCは微分可能ではないので、あなたは、いくつかの変更を加えることなく損失関数として使用することはできません。 AUCを最大化するアルゴリズムについてはsome workがありますが、通常のクロスエントロピー/対数尤度損失を使用することをお勧めします。

関連する問題