외로운 Nova의 작업실
지도 학습 - 퍼셉트론 실습 본문
- and, or 연산 퍼셉트론 실습
먼저 데이터를 준비합니다.
import tensorflow as tf
T = 1.0
F = 0.0
bias = 1.0
def get_AND_data():
X = [
[F, F, bias],
[F, T, bias],
[T, F, bias],
[T, T, bias]
]
Y = [
[F],
[F],
[F],
[T]
]
return X, Y
def get_OR_data():
X = [
[F, F, bias],
[F, T, bias],
[T, F, bias],
[T, T, bias]
]
Y = [
[F],
[T],
[T],
[T]
]
return X, Y
def get_XOR_data():
X = [
[F, F, bias],
[F, T, bias],
[T, F, bias],
[T, T, bias]
]
Y = [
[F],
[T],
[T],
[F]
]
return X, Y
실습할 연산을 선택합니다.
X, Y = get_AND_data()
#X, Y = get_OR_data()
#X, Y = get_XOR_data()
퍼셉트론을 구성합니다.
W = tf.Variable(tf.random_normal([3, 1]))
손실함수로 MSE를 사용합니다.
f = tf.matmul(X, W)
output = step(f)
error = tf.subtract(Y, output)
mse = tf.reduce_mean(tf.square(error))
퍼셉트론은 경사하강법을 사용한 최적화가 불가능하므로, 목표가 1인데 결과값이 0이면 가중치를 더주고, 목표가 0인데 결과값이 1이면 가중치를 빼는 룰을 적용시켜줍니다.
#if target == 1 and activation == 0:
#w_new = w_old + input
#if target == 0 and activation == 1:
#w_new = w_old - input
delta = tf.matmul(X, error, transpose_a=True)
train = tf.assign(W, tf.add(W, delta))
이제 학습 및 테스트를 진행합니다.
# 변수 초기화 (기본값 할당)
init = tf.global_variables_initializer()
# 학습 시작
with tf.Session() as sess:
# 초기화 연산 실행
sess.run(init)
# 초기 오차값 설정
err = 1
# 에포크 및 최대 에포크 설정
epoch, max_epochs = 0, 20
# 오차가 0보다 크고 최대 에포크에 도달하지 않을 때까지 반복
while err > 0.0 and epoch < max_epochs:
# 에포크 증가
epoch += 1
# 현재 평균 제곱 오차(MSE) 계산
err = sess.run(mse)
# 가중치 갱신 연산 실행
sess.run(train)
# 에포크와 현재 MSE 출력
print('에포크:', epoch, 'MSE:', err)
# 학습 완료 후 테스트 결과 출력
print("\n테스트 결과:")
print(sess.run([output]))
결과값이 0, 0, 0, 1이 나온것을 확인할 수 있습니다.
'AI > machine-learning' 카테고리의 다른 글
머신 러닝 - 다층 퍼셉트론 손글씨 분류 실습 (0) | 2023.11.17 |
---|---|
지도 학습 - 다층 퍼셉트론 실습 (1) | 2023.11.17 |
지도 학습 - 딥러닝 (0) | 2023.11.16 |
비지도 학습 - 주성분 분석 (0) | 2023.11.10 |
비지도 학습 - 로지스틱 회귀 (0) | 2023.11.07 |
Comments