sigmoid 함수 그리기 및 역할 및 그래프 문제 해결

 math 함수를 쓰다가  TypeError: only size-1 arrays can be converted to Python scalars 가 발생 되었다.   즉 Math 함수는 list를 미리 만들어 넣고, append 해야 하는 것이고,  numpy는 arrange 해야 했다.   

내가 문제를 겪었던 사례이다. 

import numpy as np

import matplotlib.pyplot as plt

import math


def naive_sigmoid(x):

    y = (1/(1+math.exp(-x)))

    return y


x = np.arange(-5.0,5.0,0.1)

y = naive_sigmoid(x)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-627a79fe035f> in <module>
      1 x = np.arange(-5.0,5.0,0.1)
----> 2 y = naive_sigmoid(x)

<ipython-input-5-a02ef804cc67> in naive_sigmoid(x)
      1 def naive_sigmoid(x):
----> 2     y = (1/(1+math.exp(-x)))
      3     return y

TypeError: only size-1 arrays can be converted to Python scalars


이건 math라는 함수를 사용하여,  Python scalars 에러가 발생된것이다.  math는 리스트만 받는다. 


아래와 같이  np.exp(-x)로 사용하면 문제가 해결 된다. 


import numpy as np

import matplotlib.pyplot as plt

import math


def naive_sigmoid(x):

    y = (1/(1+np.exp(-x)))

    return y


x = np.arange(-5.0,5.0,0.1)

y = naive_sigmoid(x)


plt.title("sigmoid Funtion" )

plt.plot(x, y)



sigmoid graph


sigmoid 함수는 아래와 같은 성질을 가진다. 

  • sigmoid는 0~1까지의 숫자를 나타낸다. 
  • 수학공식은 아래와 같다. 
    
sigmoid 공식


  • gradient descent 단계에서 있어서, 신경망은 가중치 (W)를 업데이트 하는데, 역전파 알고리즘이 입력층으로 전달 됨에 따라 그래프가 작아서 가중치 매계변수가 업데이트 되지 않는 vanishing gradient 가 발생되는 경우가 있다.
Vanishing Gradent 


     따라서  네트워크가 복잡할때,   Activation 함수를 simoid를 사용하지 않고 Relu함수를 사용하는 경우가 많다.  그래서 대부분 Relu를 사용한다. 

  • sigmoid 함수는 logistic regression 분류의 문제에 있어서 많이 사용한다.  

공식은 간단해 보이지만,  나온 이유는  활성화 함수를 사용하기 위한 목적이 있고,  분류를 하기 위한 목적이 있다.    



댓글 없음:

댓글 쓰기

[주식 클로드 자동매매 프로젝트] 제2편. 데이터 인프라 구축 — 모델보다 데이터가 먼저다

 머신러닝 모델을 이야기하기 전에, 그 모델이 먹는 데이터가 어디서 어떻게 왔는지부터 정직하게 밝혀야 한다. 이 프로젝트에서 가장 많은 시간이 들어간 부분은 화려한 모델 튜닝이 아니라, "내가 정말 그 데이터를 갖고 있는가"를 확인하...