Tensorflow 2.0 Tutorial ch3.3.4 - 두번째 신경망 네트워크: OR
Page content
공지
- 본 Tutorial은 교재
시작하세요 텐서플로 2.0 프로그래밍
의 강사에게 국비교육 강의를 듣는 사람들에게 자료 제공을 목적으로 제작하였습니다. - 강사의 주관적인 판단으로 압축해서 자료를 정리하였기 때문에, 자세하게 공부를 하고 싶은 반드시 교재를 구매하실 것을 권해드립니다.
- 본 교재 외에 강사가 추가한 내용에 대한 Reference를 확인하셔서, 추가적으로 학습하시는 것을 권유드립니다.
Tutorial
이전 강의가 궁금하신 분들은 아래에서 선택하여 추가 학습 하시기를 바랍니다.
- Google Colab Tensorflow 2.0 Installation
- Tensorflow 2.0 Tutorial ch3.3.1 - 난수 생성 및 시그모이드 함수
- Tensorflow 2.0 Tutorial ch3.3.2 - 난수 생성 및 시그모이드 함수 편향성
- Tensorflow 2.0 Tutorial ch3.3.3 - 첫번째 신경망 네트워크: AND
I. OR 연산의 기본 개념
OR
연산의 기본개념은 아래와 같습니다. AND
와 달리 하나만 참이어도, 결과값은 모두 참이 됩니다.
입력1 |
입력2 |
AND 연산 |
---|---|---|
참 | 참 | 참 |
참 | 거짓 | 참 |
거짓 | 참 | 참 |
거짓 | 거짓 | 거짓 |
파이썬에서는 참, 거짓을 나타내는 값은 True
, False
입니다. 그런데, 딥러닝의 주요 입력값은 정수(Integer)나 실수(float)입니다. 참과 거짓의 값을 출력하여 확인해봅니다.
print(int(True))
print(int(False))
1
0
참은 1로 출력하고 거짓은 0으로 출력한 것을 확인하였습니다. 다시 OR
연산 기본개념에 적용하면 아래와 같습니다.
입력1 |
입력2 |
AND 연산 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
II. Review & Edit For OR
OR
연산을 계산하는 네트워크를 생성하는 코드도 예제 3.16의 AND
네트워크와 매우 비슷합니다. 달라지는 것은 y
부분의 기대출력뿐입니다.
# 본 예제
import tensorflow as tf
import numpy as np
import math
# 시그모이드 함수 정의
def sigmoid(x):
return 1 / (1 + math.exp(-x))
x = np.array([[1, 1], [1, 0], [0, 1], [0, 0]])
y = np.array([[1], [1], [1], [0]])
w = tf.random.normal([2], 0, 1)
b = tf.random.normal([1], 0, 1)
b_x = 1
for i in range(2000):
error_sum = 0
for j in range(4):
output = sigmoid(np.sum(x[j] * w) + b_x * b)
error = y[j][0] - output
w = w + x[j] * 0.1 * error
b = b + b_x * 0.1 * error
error_sum += error
if i % 200 == 199:
print(i, error_sum)
199 -0.04753116837317456
399 -0.025197255723869036
599 -0.017073852769690062
799 -0.012871429837134879
999 -0.010311318147416329
1199 -0.008592360635920386
1399 -0.0073599238611461795
1599 -0.006433635333937565
1799 -0.005713413823827767
1999 -0.0051357747755025746
III. OR 네트워크의 평가
OR
네트워크를 평가하는 코드와 결과는 다음과 같습니다.
for i in range(4):
print('X:', x[i], 'Y:', y[i], 'Output:', sigmoid(np.sum(x[i]*w)+b))
X: [1 1] Y: [1] Output: 0.9999972280734293
X: [1 0] Y: [1] Output: 0.9898012421887588
X: [0 1] Y: [1] Output: 0.9898094027343277
X: [0 0] Y: [0] Output: 0.025464390776753325
학습 수(for i in range(2000):의 2000)
를 바꿔가며 실습하는 것을 권장합니다. 학습 수가 커지면 커질수록 실제 출력이 기대출력 값에 가까워지는 것을 확인할 수 있습니다.
IV. 연습 파일
V. Reference
김환희. (2020). 시작하세요! 텐서플로 2.0 프로그래밍: 기초 이론부터 실전 예제까지 한번에 끝내는 머신러닝, 딥러닝 핵심 가이드. 서울: 위키북스.