맛동산

Softmax 함수 구현 본문

파이썬/딥러닝 구현

Softmax 함수 구현

오지고지리고알파고포켓몬고 2017. 5. 22. 21:45

 
import numpy as np

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a-c)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a

    return y

a = np.array([0.3,2.9,4.0])

y3 = softmax(a)
print(y3)
print(np.sum(y3))

 

 

소프트맥스 함수의 출력의 총합이 1
소프트맥스 함수를 적용해도 각 원소의 대소 관계는 변하지 않음
* 단조증가함수 -> a<=b일때 f(a)<=f(b)

-> 분류를 수행할 때 출력층에서 가장 큰 값을 선택하는 행위를 함(y1=0.75, y2=0.25라면 75% 확률로 y1이라는 결과 도출)

 

추론 단계에서는 출력층의 소프트맥스 함수를 생략하는 것이 일반적
신경망을 학습시킬 때는 출력층에서 소프트맥스 함수 사용

어차피 a_n에서 2번째 원소가 가장 크면 y에서 가장 큰 원소도 2번째 원소임, 신경망을 이용한 분류에서는 일반적으로 가장 큰 출력을 내는 뉴런에 해당하는 클래스로만 인식
-> 결과적으로 신경망으로 분류할 때는 출력층의 소프트맥스 함수 생략 가능, 현업에서도 지수 함수 계산에 드는 자원 낭비를 줄이고자 출력층의 소프트맥스 함수는 생략하는 것이 일반적

 

출력층의 뉴런 수는 풀려는 문제에 맞게 적절히 정해야함. '분류'에서는 분류하고 싶은 클래스 수로 설정하는 것이 일반적

'파이썬 > 딥러닝 구현' 카테고리의 다른 글

정규화  (0) 2017.05.29
np.max vs np.argmax  (0) 2017.05.29
note1  (0) 2017.05.19
3층 신경망 구현  (0) 2017.05.19
[여담] word2vec, seq2seq, tensorflow문서 한글번역본  (0) 2017.05.19
Comments