2017-02-09 5 views
2

Je suis en train de mettre en place un réseau de neurones récurrent où sigmoid est choisi pour être la fonction d'activation.Quel est le moyen le plus rapide de calculer sigmoïde?

Mon premier prototype est écrit dans python et je trouve sigmoid est en quelque sorte le goulot d'étranglement du programme représente environ 30% du temps total de course.

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

J'ai donc essayé une autre implémentation

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

et trouvé étonnamment, il est 50% plus rapide que la première approche.

J'ai essayé une troisième approche

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

, ce qui est légèrement plus lent que la première approche.

plus tard je l'ai testé les 3 implémentations en C++. Les deux première approche n'a guère de différence, et tanh est légèrement (~ 5%) plus rapide. Pourquoi cela arrive-t-il? Je pense que numpy a été écrit en C++.

Répondre