2017-08-09 13 views
0

私のシナリオに合わせてケラスを使用する方法に問題があります。出力レイヤーでは、各アイテムの確率を出力します。私は上位N個のアイテム(すなわち確率が最も高いアイテム)をとり、それらが真理値のサブセットであるかどうかを確認したい(アイテムのセットを持つ)。このシナリオでは、負の対数尤度をコンパイルする必要があります。私はそれをどうやってやってもいいか尋ねてもいいですか?ケラス - ソフトマックストップN - ロス機能

ご協力いただきありがとうございます。

`

nn = Sequential() 
nn.add(Dense(self.num_hidden_units, input_dim = input_num, init="uniform")) 
nn.add(Activation('tanh')) 
nn.add(Dense(self.num_items, init="uniform")) 
nn.add(Activation('softmax')) 

`

+0

マルチラベルまたはマルチクラスのシナリオですか?つまり、あなたのラベルは相互に排他的ですか? – yuval

+0

出力は、発生する各アイテムの確率であり、各クラスを言うことができます。しかし、私が言及したように、それらは相互に排他的ではありません。出力で上位Nを取り、それらが真理値セットのサブセットであるかどうかを確認したいと思います。しかし、この場合、どのように負の対数尤度を適用するのかはわかりません。私は、複数のクラスから1つのクラスを予測していないので、カテゴリクロスエントロピーを使用することはできません。返信いただきありがとうございます! – soulless

答えて

0

私が正しく理解していれば、あなたはmulti-label classification政権です。この場合の共通目的関数は、sigmoidの活性化を上回るバイナリクロスエントロピー損失です。あなたのケースで確率がkerasに損失を適用するための使用例

1に合計する必要はありませんので、あなたは、シグモイドとソフトマックス活性化を置き換える必要があり

注:

model.compile(loss='binary_crossentropy', optimizer='sgd') 
+0

私はバイナリクロスエントロピーがバイナリ分類のためだと考えました。マルチラベルの分類では、バイナリクロスエントロピーも使用しますか? また、ソフトマックスではなく、なぜシグモイドですか?違いがあるの? – soulless

+0

マルチラベルでは、クラスが存在するかどうか、つまりバイナリを予測するのが好きです。複数のクラスが同時に存在することができるので、softmaxの代わりにsigmoidを使用する必要があります。これは、クラスが相互に排他的である場合に適しているからです。例えば。画像に鳥と犬がある場合、理想的なシグモイド分類子はoutput_dog = 1、output_bird = 1、他のすべての出力= 0となります。最も近いsoftmaxはoutput_dog = 0.5、output_bird = 0.5、その他出力= 0 – yuval

+0

ああ....私はあなたが何を意味するかを完全に得ます。相互に排他的な場合はどうなりますか?その損失はどうあるべきですか? PS私は、実際にこのペーパーを実装しようとしています - http://ceur-ws.org/Vol-1441/recsys2015_poster15.pdf、構造がかなりシンプルであるため、次のバスケットの推奨事項を実践しています。しかし、私はケラーを使って負の対数尤度をどのように使用すればよいのかは分かりません – soulless

関連する問題