Python — Какой самый быстрый способ для расчета сигмоида?

Я пытаюсь реализовать рекуррентную нейронную сеть, где sigmoid выбран в качестве функции активации.

Мой первый прототип написан на python и я нахожу sigmoid является каким-то узким местом программы, составляет ~ 30% от общего времени выполнения.

# x is a fixed size vector here
def sigmoid(x):
return numpy.reciprocal(1.0 + numpy.exp(-x))

Поэтому я попробовал другую реализацию

def sigmoid(x):
y = numpy.exp(x)
return y/(1+y)

и неожиданно обнаружили, что это на 50% быстрее, чем при первом подходе.

Я также попробовал третий подход

def sigmoid(x):
return (1.0+numpy.tanh(x/2.0))/2.0

, что немного медленнее, чем первый подход.

Позже я протестировал все 3 реализации в C ++. Первые два подхода практически не имеют различий, и tanh немного (~ 5%) быстрее. Почему это происходит? я думаю numpy был написан на C ++.

3

Решение

На основе этот кажется, твоя лучшая ставка scipy.special.expit

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]