Обработка переполнения numpy.exp при использовании функции в 2d-массиве - PullRequest
3 голосов
/ 14 апреля 2019

У меня есть двумерный массив, в котором я хочу использовать свою функцию sigmoid (x):

    def sigmoid(x):
        return 1 / (1 + np.exp(-x))

Моя проблема в том, что у меня слишком большие входные данные, например 3000, и я получаю это предупреждение:

RuntimeWarning: overflow encountered in exp
  return 1 / (1 + np.exp(-x/8.))

Я пытался просто присвоить значения для входов по определенному числу, например 700 -> 1 и -700 -> 0 , однако это очень медленно, потому что я должен обойти весь массив, который способ.

Я также изучил np.logandexp(x1, x2), но не могу заставить его работать ...

Edit: Тип данных float64 от

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Вы можете использовать функцию SciPy expit() , которая довольно хорошо себя ведет:

In [114]: from scipy.special import expit

# sample input array
In [115]: x = np.arange(50000, dtype=np.float64)

In [116]: sigm = expit(x)

# sanity check for no `np.inf`
In [117]: expit(70000.0)
Out[117]: 1.0
0 голосов
/ 14 апреля 2019

Вы можете преобразовать свой ввод в пространство журнала и запустить sigmoid после этого, это значительно уменьшит большие значения.

...