2017-08-09 2 views
0

Ich habe Probleme, keras zu verwenden, um zu meinem Szenario zu passen. In meiner Ausgabeschicht würde es die Wahrscheinlichkeiten jedes Artikels ausgeben. Ich möchte die obersten N Elemente (d. H. Mit der höchsten Wahrscheinlichkeit) nehmen und sehen, ob sie eine Teilmenge der Wahrheit sind (die eine Menge von Elementen hat). Ich muss die negative Log-Wahrscheinlichkeit für dieses Szenario kompilieren. Darf ich fragen, wie kann ich das tun?keras - softmax top N - Verlustfunktion

Vielen Dank für Ihre Hilfe im Voraus.

`

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

Ist es ein Multi-Label- oder Multi-Class-Szenario? Mit anderen Worten, schließen sich Ihre Etiketten gegenseitig aus? – yuval

+0

Die Ausgabe ist die Wahrscheinlichkeiten für jedes Element auftreten, können Sie jede Klasse sagen. Aber sie schließen sich nicht gegenseitig aus, da ich erwähnt habe, dass ich gerne das obere N in der Ausgabe nehmen und sehen möchte, ob sie eine Teilmenge der Wahrheitsmenge sind. Aber ich bin mir nicht sicher, wie ich in diesem Fall negative Log-Likelihood anwenden. Ich kann die kategorische Kreuzentropie nicht verwenden, da ich keine Klasse aus Multiclasses vorhersage. Danke für die Antwort! – soulless

Antwort

0

Wenn ich richtig verstehe, sind Sie in der multi-label classification Regime. Die gemeinsame Zielfunktion in diesem Fall ist ein binärer Kreuzentropieverlust oberhalb einer Aktivierung von sigmoid.

Beachten Sie, dass die softmax Aktivierung mit einem sigmoiden ersetzen sollte, da in der Ihrem Fall die Wahrscheinlichkeiten müssen nicht 1

für ein Anwendungsbeispiel summieren, den Verlust in keras Anwendung:

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

Ich dachte binäre Crossentropie ist für binäre Klassifizierung. Also, wenn es Multi-Label-Klassifizierung ist, verwenden wir auch binäre Crossentropie? Auch, warum Sigmoid anstelle von Softmax? Ich meine, macht es einen Unterschied? – soulless

+0

In Multilabel möchten Sie vorhersagen, ob eine Klasse existiert oder nicht, daher die Binärdatei. Da mehrere Klassen gleichzeitig existieren können, müssen Sie Sigmoid anstelle von Softmax verwenden, da Softmax für den Fall geeignet ist, dass sich die Klassen gegenseitig ausschließen. Beispielsweise. Wenn ein Bild einen Vogel und einen Hund hat, ergibt ein idealer sigmoid-Klassifikator output_dog = 1, output_bird = 1, alle anderen outputs = 0, während bei softmax der nächst erreichbare output_dog = 0,5, output_bird = 0,5, alles andere ist Ausgänge = 0 – yuval

+0

Oh .... Ich verstehe ganz, was du meinst. Was, wenn sie sich gegenseitig ausschließen? Was sollte dann der Verlust sein? PS Ich versuche tatsächlich, dieses Papier - http://ceur-ws.org/Vol-1441/recsys2015_poster15.pdf, auf der nächsten Korbempfehlung als eine Praxis zu implementieren, da seine Struktur ziemlich einfach ist. Aber ich verstehe nur nicht ganz, wie sollte ich negative Log-Likelihood mit Keras verwenden – soulless

Verwandte Themen