2017-12-14 13 views
0

actionを出力し、不適切な候補をフィルタリングするためにfilterを使用する次のモデルを再生しています。 https://arxiv.org/abs/1702.03274PyTorchの最終レイヤのマスク固有の要素

このモデルでは、最後のsoftmaxレイヤーの後に出力がフィルタリングされます。 action_size==3と仮定しよう。したがって、高密度の&のasoftmaxレイヤーの出力は以下のようになります。

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

しかしpytorchで、logsoftmaxNLLLossで好ましいです。だから私の出力は以下のようになります。これは意味をなさない。

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

したがって、pytorochは推奨しません。vanilla Softmax。特定のアクションを排除するためにマスクを適用するにはどうすればよいですか? バニラソフトマックスでカテゴリクロスエントロピーロス関数がありますか?

このモジュールは、Softmaxとそれ自身の間でLogを計算することを期待するNLLLossでは直接動作しません。代わりにLogsoftmaxを使用してください(より速く、より良い数値プロパティがあります)。 http://pytorch.org/docs/master/nn.html#torch.nn.Softmax

答えて

0

LogSoftmaxの出力は、単にSoftmaxの出力のログです。つまり、torch.exp(output_from_logsoftmax)を呼び出してSoftmaxと同じ値を得ることができます。

あなたの質問を正しく読んでいるなら、LogSoftmaxを計算し、それをNLLLossに送り、それを累乗してフィルタリングで使用するようにしてください。

関連する問題