2017-02-09 2 views
2

Ich versuche ein rekurrentes neuronales Netzwerk zu implementieren, wobei sigmoid als Aktivierungsfunktion ausgewählt wird.Was ist der schnellste Weg, Sigmoid zu berechnen?

Mein erster Prototyp ist in python geschrieben und ich finde sigmoid ist irgendwie der Flaschenhals des Programms, entfallen ~ 30% der gesamten Laufzeit.

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

Also habe ich versucht, eine weitere Implementierung

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

und überraschend fand es 50% schneller als der erste Ansatz ist.

Ich habe auch versucht, einen dritten Ansatz

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

, die etwas langsamer als der erste Ansatz ist.

Später habe ich alle 3 Implementierungen in C++ getestet. Die ersten beiden Ansätze haben kaum einen Unterschied, und tanh ist leicht (~ 5%) schneller. Warum passiert das? Ich denke, numpy wurde in C++ geschrieben.

Antwort

Verwandte Themen