2017-12-14 7 views
0

이제 action을 출력하고 부적절한 후보를 필터링하는 데 filter을 사용하는 다음 모델을 재생 중입니다. https://arxiv.org/abs/1702.03274PyTorch의 최종 레이어에서 마스크 특정 요소

이 모델에서 출력은 마지막 softmax 계층 이후에 필터링됩니다. action_size==3이라고 가정 해 보겠습니다. 따라서 밀도가 높은 & asoftmax layer 이후의 출력은 아래와 같습니다.

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와 함께 카테고리 크로스 엔트로피 손실 함수가 있습니까?

이 모듈은 Softmax와 자체 사이에서 로그를 계산할 것으로 기대되는 NLLLoss와는 직접적으로 작동하지 않습니다. Logsoftmax를 대신 사용하십시오 (더 빠르고 더 나은 숫자 속성을가집니다). http://pytorch.org/docs/master/nn.html#torch.nn.Softmax

답변

0

LogSoftmax의 출력은 단순히 Softmax의 출력 로그입니다. 즉, torch.exp(output_from_logsoftmax)으로 전화하면 Softmax에서와 동일한 값을 얻을 수 있습니다.

질문을 올바르게 읽는다면 LogSoftmax를 계산 한 다음 NLLLoss로 피드를 필터링하고이를 필터링에 사용하도록 지수화하십시오.