2017-02-09 8 views
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++로 작성되었다고 생각하고 있습니다.

답변