250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 영상처리
- 쉘
- 백준알고리즘
- 턱걸이
- 백준
- shell
- 운영체제
- 텐서플로우
- 리눅스
- 회귀
- 프로그래밍
- 알고리즘
- 프로세스
- 공부
- Computer Vision
- CV
- C++
- 코딩
- 시스템프로그래밍
- Windows10
- C언어
- 딥러닝
- python
- c
- 학습
- OpenCV
- linux
- error
- TensorFlow
- Windows 10
Archives
- Today
- Total
줘이리의 인생적기
[tensorflow 04] 뉴런02 - 뉴런 학습 본문
728x90
sigmoid 활성화 함수를 구현하여, 입력이 1일 때 출력이 0이 되는 뉴런을 만들어보겠습니다.
import tensorflow as tf
import math
def sigmoid(x):
return 1 / (1 + math.exp(-x))
x = 1
y = 0
w = tf.random.normal([1], 0, 1)
output = sigmoid(x * w)
error = y - output
print("output = ", output)
print("error = ", error)
0이 되기에는 역부족으로 보입니다.
이제 w값을 변화시켜야 하는데 경사하강법을 사용해보겠습니다.
경사하강법은 w에 입력과 학습률(α)과 error를 곱한 값을 더해주는 것입니다.
w = w + x * α * error
import tensorflow as tf
import math
def sigmoid(x):
return 1 / (1 + math.exp(-x))
x = 1
y = 0
w = tf.random.normal([1], 0, 1)
for i in range(1000):
output = sigmoid(x * w)
error = y - output
w = w + x * 0.1 * error
if i == 1 or i == 999:
print(i, "output = ", output,"error = ", error)
error값이 점점 기대출력 값인 0에 가까워지는 것을 확인할 수 있다.
반대로 입력이 0이고 출력이 1을 얻는 뉴런을 만들어보겠습니다.
import tensorflow as tf
import math
def sigmoid(x):
return 1 / (1 + math.exp(-x))
x = 0
y = 1
w = tf.random.normal([1], 0, 1)
for i in range(1000):
output = sigmoid(x * w)
error = y - output
w = w + x * 0.1 * error
if i == 1 or i == 999:
print(i, "output = ", output,"error = ", error)
1000번동안 error값이 변하지 않았습니다.
이유는 경사하강법의 식에서 x가 0이기 때문에 w에 더해지는 값이 없어서입니다.
이런 경우에는 편향(bias)을 뉴런에 넣어 아무것도 배우지 못하는 상황을 방지해주는게 좋습니다.
편향의 입력은 보편적 값인 1을 넣겠습니다.
관용적으로 bias의 앞 글자인 b를 쓰며, w처럼 난수로 초기화되어 뉴런에 더해져 출력되어 집니다.
import tensorflow as tf
import math
def sigmoid(x):
return 1 / (1 + math.exp(-x))
x = 0
y = 1
w = tf.random.normal([1], 0, 1)
b = tf.random.normal([1], 0, 1)
for i in range(1000):
output = sigmoid(x * w + 1 * b)
error = y - output
w = w + x * 0.1 * error
b = b + 1 * 0.1 * error
if i == 1 or i == 999:
print(i, "output = ", output,"error = ", error)
w와 b를 업데이트 시키며 뉴런을 학습하였습니다.
error는 0에 가까워지고, output은 1에 가까워졌습니다.
'공부 > tensorflow' 카테고리의 다른 글
[tensorflow 06] OR 연산 뉴런 (0) | 2021.04.08 |
---|---|
[tensorflow 05] AND 연산 뉴런 (0) | 2021.04.07 |
[tensorflow 03] 뉴런01 - 뉴런의 기본 (0) | 2021.04.05 |
[tensorflow 02] 난수 생성 (0) | 2021.04.02 |
[tensorflow 01] 버전 확인 (0) | 2021.04.01 |