1. 퍼셉트론 구현
딥러닝을 위한 신경망 기초
nonezerok@gmail.com
이번에는 퍼셉트론을 프로그램 코드로 살펴보겠습니다.
프로그램 코드는 퍼셉트론의 동작원리를 보다 명확하게 해 줍니다.
코드는 C언어로 제공됩니다.
또한, 딥러닝 공개 프레임워크 중 하나인 Tensorflow로도 제공됩니다.
Tensorflow는 구글이 제공하는 것으로 전세계적으로 사용자가 가장 많습니다.
Tensorflow 설치 방법은 인터넷을 참고하세요.
17. 17
import numpy as np
import tensorflow as tf
np.random.seed(0)
x = tf.placeholder(tf.float32, shape=(4, 2))
y = tf.placeholder(tf.float32, shape=(4, 1))
w = tf.placeholder(tf.float32, shape=(2, 1))
b = tf.placeholder(tf.float32)
y_pred = tf.matmul(x, w) + b
loss = 0.5 * tf.reduce_mean((y - y_pred) * (y - y_pred))
grad_w, grad_b = tf.gradients(loss, [w, b])
values = {
x: [[-1,-1], [-1,1], [1,-1], [1,1]],
y: [[0], [1], [1], [1]],
w: np.random.randn(2, 1),
b: np.random.randn(1)
}
18. 18
with tf.Session() as sess:
learning_rate = 0.1
for i in range(100):
loss_v, grad_w_v, grad_b_v = sess.run([loss, grad_w, grad_b], feed_dict=values)
values[w] -= learning_rate * grad_w_v
values[b] -= learning_rate * grad_b_v
print('%10d loss: %10.8f w1:%10.5f w2: %10.5f b: %10.5f'
%(i,loss_v,values[w][0],values[w][1],values[b]))
a = sess.run([y_pred], feed_dict=values)
for i in range(4):
print('%2d %2d %2d : %3.2f'
%(values[x][i][0], values[x][i][1], values[y][i][0], a[0][i]))
19. 19
1
= 1, 0
= 0, 1
1
2
출력을 2개로
입력이 클래스 1이면 여기에 1이 출력,
입력이 클래스 2이면 여기에 1이 출력
되도록 학습하면,
새로운 입력이 들어왔을 때,
더 큰 값 출력하는 뉴런의 클래스로 분류
2개의 클래스를 구분하는 문제에 대해 출력이 2개가 되도록 구현
20. 20
=
=
0 0
0 1
1 0
1 1
=
=
1 0
1 0
1 0
0 1
1번 클래스
2번 클래스
퍼셉트론 2개 구현 첫 번째 퍼셉트론의 출력
두 번째 퍼셉트론의 출력