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