математика pytorch с показателями меньше 1 возвращает нано - PullRequest
0 голосов
/ 10 ноября 2019

torch.pow () возвращает nan, когда ему дан аргумент экспоненты в диапазоне от -1 до 1

a = torch.randn(1,3)
a

>> tensor([[-1.7871, -0.5375, -0.1164]])

torch.pow(a, 2)      #or a**2

>> tensor([[3.1938, 0.2889, 0.0136]])

torch.pow(a,0.5)     #or a**0.5

>> tensor([[nan, nan, nan]])

ожидаемый результат:

tensor([[-1.3368, -0.7331, -0.3412]])

Редактировать: получается, что **работает так же, как. a**2 делает то же самое с тензором, что и torch.pow(a,2). a**0.5 возвращает nan как torch.pow.

1 Ответ

1 голос
/ 10 ноября 2019

Проблема в том, что квадратный корень из отрицательного числа является нереальным комплексным числом.

Если вы хотите сохранить знак и взять квадратный корень из его абсолютного значения, следующий код сделает трюк

torch.sign(a) * torch.pow(torch.abs(a), 0.5)
...