Pytorch Softmax выдает nan и отрицательные значения в качестве выходных данных

#python #pytorch #softmax

#python #pytorch #softmax

Вопрос:

Я использую softmax в конце моей модели.

Однако после некоторого обучения softmax выдает отрицательную вероятность.В некоторых ситуациях я также сталкивался с nan как с вероятностью.

одно из решений, которое я нашел при поиске, — использовать нормализованный softmax … однако я не могу найти для этого никакого применения pytorch.

Может кто-нибудь, пожалуйста, помочь сообщить, доступен ли нормализованный softmax или как этого добиться, чтобы прямое и обратное распространение было плавным.

Пожалуйста, обратите внимание, что я уже использую torch.nn.utils.clip_grad_norm_(model.parameters(), 40), чтобы избежать взрывных градиентов

Я использую pytorch 1.6.0

Комментарии:

1. Вы случайно не используете log_softmax? «Нормализованный softmax» не имеет особого смысла, поскольку SoftMax сам по себе уже обеспечивает форму нормализации. Если вы получаете значения NaN, это, вероятно, вызвано на более ранней стадии в вашей сети, в этом случае может помочь использование отладчика в IDE.

2. Привет, да, я использую log_softmax, а также softmax .. Я внедряю A3C… Сейчас я пытаюсь использовать sigmoid перед использованием softmax и увижу результаты

3. @user2783767 какую реализацию softmax вы используете? вы используете реализацию pytorch или свою собственную?

4. Привет. Я использую реализацию pytorch

Ответ №1:

Softmax всегда будет возвращать положительные результаты, но он будет отслеживать другие результаты:

 m = nn.Softmax(dim=1)
input = torch.randn(2, 3)
print(input)
output = m(input)
output
  

Выход:

 tensor([[ 0.0983,  0.4150, -1.1342],
        [ 0.3411,  0.5553,  0.0182]])

tensor([[0.3754, 0.5152, 0.1094],
        [0.3375, 0.4181, 0.2444]])
  

Вы отслеживаете строки.
Обратите внимание, как для

0.0983, 0.4150, -1.1342 Вы получите 0.3411, 0.5553, 0.0182

Говоря, что 0.4150 это самое большое значение.

Жесткий max (как мы знаем, это max()) просто вернет максимальное значение.

Итак, если у вас есть отрицательные результаты для softmax, это невозможно, возможно, вы столкнулись с каким-то сбоем реализации.