2017-12-14 1 views
0

Ich reproduzieren jetzt das folgende Modell, das eine action ausgibt und filter zum Filtern ungeeigneter Kandidaten verwendet. https://arxiv.org/abs/1702.03274Maske bestimmte Elemente in einer letzten Schicht in PyTorch

In diesem Modell wird die Ausgabe nach der letzten softmax-Schicht gefiltert. Nehmen wir an, action_size==3. So ist die Ausgabe nach dichter & asoftmax Schicht wie folgt.

output: [0.1, 0.7, 0.2] 
filter: [0, 1, 1] 
output*filter: [0, 0.7, 0.2] 

Aber in pytorch wird logsoftmax mit NLLLoss bevorzugt. Also meine Ausgabe ist wie folgt. Das ergibt keinen Sinn.

output: [-5.4, -0.2, -4.9] 
filter: [0, 1, 1] 
output*filter: [0, -0.2, -4.9] 

So hat pytoroch nicht vanilla Softmax empfehlen. Wie sollte ich Maske anwenden, um bestimmte Aktionen zu eliminieren? Oder gibt es kategorische Cross Entropy Loss Funktionen mit Vanille Softmax?

Dieses Modul funktioniert nicht direkt mit NLLLoss, das erwartet, dass das Protokoll zwischen dem Softmax und sich selbst berechnet wird. Verwenden Sie stattdessen Logsoftmax (es ist schneller und hat bessere numerische Eigenschaften). http://pytorch.org/docs/master/nn.html#torch.nn.Softmax

Antwort

0

Der Ausgang des LogSoftmax ist einfach das Protokoll der Ausgabe von Softmax. Das heißt, Sie können einfach torch.exp(output_from_logsoftmax) aufrufen, um die gleichen Werte wie von Softmax zu erhalten.

Also, wenn ich Ihre Frage richtig lese, würden Sie LogSoftmax berechnen, und dann füttern Sie das in NLLLoss und potenzieren auch, dass in Ihrer Filterung zu verwenden.

Verwandte Themen