스스로 학습할 수 있도록 제공
n번 반복해 학습해 손실 점수를 낮추는 것을 목표로 가중치를 조절함.
: = 신경망
: 층이 각각의 퍼셉트론이 될 것이다.
: 여러 개의 신호를 입력으로 받아 하나의 값을 출력
: x는 입력, y는 출력, w는 가중치
OR 연산: x에 1이 들어있으면 무조건 1이 y값으로 나온다.
AND 연산: 무조건 두 개가 다 만족했을 때 나오는 값.
XOR 게이트 : 둘 중 참 하나일 때, 참을 결과로 출력하는 연산 (마치 청개구리)
import tensorflow as tf
tf.random.set_seed(777)
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.losses import mse
^ 라이브러리 준비해주기
^ 데이터를 준비해 shape 와 같이 구성 확인 가능
^ 위의 데이터 준비해준 것의 변수명을 X, y로 변경함.
^ 단층 퍼셉트론 모델 구성하기
mse = mean square error
^ 모델 설정하기
^ - 모델 학습하기:
- 0.7500에서 100%로 넘어가는 그 구간
192번 정도 학습했을 때
import matplotlib.pyplot as plt
his_dict = history.history
loss = his_dict['loss']
epochs = range(1, len(loss) + 1)
fig = plt.figure(figsize = (10, 5))
# 훈련 및 검증 손실 그리기
ax1 = fig.add_subplot(1, 2, 1)
ax1.plot(epochs, loss, color = 'orange', label = 'train_loss')
ax1.set_title('train loss')
ax1.set_xlabel('epochs')
ax1.set_ylabel('loss')
ax1.legend()
acc = his_dict['acc']
# 훈련 및 검증 정확도 그리기
ax2 = fig.add_subplot(1, 2, 2)
ax2.plot(epochs, acc, color = 'blue', label = 'train_accuracy')
ax2.set_title('train accuracy')
ax2.set_xlabel('epochs')
ax2.set_ylabel('accuracy')
ax2.legend()
plt.show()
^ 학습결과 그려보기
^ 해석:
input_shape=(2,) -> X1 과 X2 두개를 넣어준다.
Dense 층을 하나만 사용한다.
^ 정확도 50%로 학습 실패 ! (모델이 잘못됨)
: XOR 게이트와 같은 문제를 해결한 것
: Dense 가 하나가 아닌 두 개 이상
^ 퍼셉트론 변경해줌. (Dense 를 추가해줌)
# Dense 는 16,32,64 이렇게 제곱으로 많이 사용함.
결과: 실패.
^
1) from tensorflow.keras.optimizers import RMSprop 추가해줌.
2) optimizer=RMSprop() 변경해줌
결과: 성공.
활성화 함수 activation ( 중간층 relu ) 로 y를 예측함.
아웃풋 레이어에서는, 결과 sigmoid 사용.