본문 바로가기
DS

01. 텐서플로우 와 간단한 신경망 구현 실습

by ByteBridge 2020. 6. 5.
반응형

텐서 플로우

- 텐서플로우는 딥러닝 프레임워크이다.
- 현재 2020년 06월 기준 최신 버전은 2.0 이다.
- 2.0 버전에서는 텐서플로우에 케라스가 포함되어있다.
- 케라스는 고수준의 api 를 제공 한다.
- 구글 클라우드를 사용하면 GPU/TPU 를 사용 할 수 있는 colab 을 사용하여 텐서플로우 및 sklearn,
    등 머신러닝에 필요한 거의 모든패키지가 제공되며, 필요한 패키지 설치 가능하다,
    또한 구글 드라이브에 저장된 데이터를 사용 할 수있으며,
    외부 데이터를 불러와 사용 할 수 도 있다.

텐서플로우 난수 및 정규분포 생성

- 텐서 플로우 난수 생성
#균일한 분포의 난수를 출력 해준다.
#tf.random.uniform(모양, 최소값, 최대값)
#모양: 행렬, shape 을 말한다.
rand = tf.ranom.uniform([1],0,1)

- 정규분포 생성
#normal([], 난수 평균값, 난수 표준편차)
#평균 0, 표준 편차 1 사이의 난수 무작위 출력
rand_nor = tf.random.normal([4],0,1)

신경망

- 신경망 
#입력 -> [뉴런,뉴런,뉴런]...[뉴런,뉴런...] -> 출력
- 뉴런
#입력 -> 가중치(w) -> 활성화 함수(f) -> 출력
#정수 or float 형식으로 많이 사용됨.

활성화 함수: 입력값과 가중치 연산을 보고, 출력값을 정해주는 역할을 한다.
    신호등과 같은 역할을 하며, 다양한 함수들이 존재한다.sigmoid, relu,tanh ...
    sigmoid -> 출력결과 값이 0 ~ 1
    relu -> 0 이하이며 0, 0 초과시 값 그대로 
        최근 은닉층을 깊게 쌓아 올렸을때 함수의 결과값 소실 문제로 인해 결과값이 0 초과시 값 그대로 사용하는
        relu 를 많이 사용한다.
가중치: 신경망의 출력값과, 실제값의 차이를 최소화 해주는 역할을 한다.
        임이의 숫자이며, 점차 줄어 든다.

활성화 함수(sigmoid) 를 파이썬으로 구현 해보고 간단한 신경망을 구현

#f(x) = 1 / 1+e^x
def sigmoid(x):
    return 1 / (1+math.exp(-x))

# sigmoid 함수로 가중치 구하기
x,y = 1,0
w = tf.random.normal([1],0,1)
#편향 : bias, 가중치 처럼 무작위로 값을 넣도록 한다.0 과 같은 값이 들어올때 신경망 계산이 안됨 방지
b = tf.random.normal([1],0,1)
output = sigmoid(x * w)

#error = 실제값 - 연산값
#error 값이 0에 가까워 지도록 학습 시키도록 한다.

#경사하강기법을 사용해 w 를 변화 시켜 줘야 한다.
#경사하강기법: w = w + x * 학습률 * error
#학습률: 업데이트 주기? 정도로 생각하면 되며, 보통 0.1 을 사용함.

#경사하강기법을통해 1000 번 정도 학습 시키도록 한다.
for i in range(1000):
  output = sigmoid(x * w)
  error = y - output
  w = w + x * 0.1 * error
    b = b + 1 * 0.1 * error
  # 100 번째마다 끊어서 출력하도록 하기 위함.
  if i % 100 == 99:
    print(i, error, output)

출처: youtu.be/4buiQB4E3nU

반응형