퍼셉트론 구현
- 앞서 배운 텐서와 연산자를 이용하여 퍼셉트론 구현
- 고수준 모델 API(케라스)를 사용하지 않고 구현
* OR Gate 구현
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
# 파라미터 값(input 특성 개수, 퍼셉트론의 개수, 학습률) 설정
input_dim = 2
hidden_units = 1
learning_rate = 0.01
# 가중치(input 특성 : 2/ 퍼셉트론 : 1)
w = tf.Variable(tf.random.uniform(shape=(input_dim, hidden_units)))
# 편향(퍼셉트론 : 1)
b = tf.Variable(tf.zeros(shape=(hidden_units,)))
# 설계한 퍼셉트론 모델의 파라미터 확인(코드 제출시 주석 처리)
#print('*******퍼셉트론 모델의 초기 가중치*******')
#print(w)
#print('\n*******퍼셉트론 모델의 초기 편향*******')
#print(b)
# 퍼셉트론의 수학 모델 f(x*w + b) 구현
def predict(input):
# x*w + b 연산 구현
x = tf.matmul(input, w) + b
# relu 활성화 함수 구현
x = tf.maximum(0, x)
return x
# loss(mse)
def mse_loss(labels, predictions):
# MSE(Mean Square Error) 연산 구현
loss = tf.reduce_mean(tf.square(labels - predictions))
return loss
# train
def train(inputs, labels):
with tf.GradientTape() as tape:
# 퍼셉트론 모델을 예측값을 계산
predictions = predict(inputs)
# 모델의 예측값과 정답간의 에러를 loss 을 이용해 계산
loss = mse_loss(labels, predictions)
# 모델의 파라미터(w, b)가 loss 값에 미치는 영향도를 미분(오차역전파)을 통해 계산
gradient_lw, gradient_lb = tape.gradient(loss, [w, b])
# 경사하강법을 수행하여 모델의 파라미터(w, b) 업데이트
w.assign(w - learning_rate * gradient_lw)
b.assign(b - learning_rate * gradient_lb)
return loss
# 퍼셉트론 모델 학습을 위한 OR Gate 데이터 생성
inputs = np.array([[0, 0],
[0, 1],
[1, 0],
[1, 1]], dtype=np.float32)
labels = np.array([0, 1, 1, 1], dtype=np.float32)
# OR Gate 데이터를 차트로 확인(코드 제출시 주석 처리)
plt.scatter(inputs[:, 0], inputs[:, 1], c=labels[:])
plt.show()
# train 함수를 반복적으로 실행하여 퍼셉트론 모델을 학습
for epoch in range(100):
# input 데이터와 label 데이터를 한 건씩 추출하여 train 함수에 전달
for x, y in zip(inputs, labels):
loss = train([x], [y])
# 학습 중간에 loss 값의 변화 출력(코드 제출시 주석 처리)
#if (epoch+1)%10 == 0:
# print("Epoch {}: loss={}".format(epoch+1, float(loss)))
# 학습된 모델에 input 데이터 입력하여 예측결과 계산
predictions = predict(inputs)
# 모델의 예측결과를 차트로 확인(코드 제출시 주석 처리)
plt.scatter(inputs[:, 0], inputs[:, 1], c=predictions[:]> 0.5)
plt.show()
print('*******모델의 예측 결과*******')
print(predictions[:]> 0.5)
'프로젝트 > 코드프레소 체험단' 카테고리의 다른 글
이미지 데이터 처리를 위한 CNN 완벽 가이드 - fashion-mnist 분류 분석 실습 (0) | 2022.02.23 |
---|---|
이미지 데이터 처리를 위한 CNN 완벽 가이드 - Keras API (0) | 2022.02.22 |
이미지 데이터 처리를 위한 CNN 완벽 가이드 - TF 2.0 연산자 이해 (0) | 2022.02.19 |
이미지 데이터 처리를 위한 CNN 완벽 가이드 - TF 2.0을 이용한 인공신경망 데이터 이해 (0) | 2022.02.17 |
이미지 데이터 처리를 위한 CNN 완벽 가이드 - Numpy를 이용한 인공신경망 데이터 이해 (0) | 2022.02.17 |