2
我想實現一個循環神經網絡,其中sigmoid
被選爲激活函數。什麼是計算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
,它比第一種方式稍微慢一些。
後來我用C++測試了所有3個實現。前兩種方法幾乎沒有任何區別,並且tanh
略快(〜5%)。爲什麼會發生?我在想,numpy
是用C++編寫的。