신경망

Soyoung Park·2022년 9월 27일
0

TIL deep learning

목록 보기
12/22
post-thumbnail

스스로 학습할 수 있도록 제공

n번 반복해 학습해 손실 점수를 낮추는 것을 목표로 가중치를 조절함.

퍼셉트론 Perceptron

: = 신경망
: 층이 각각의 퍼셉트론이 될 것이다.
: 여러 개의 신호를 입력으로 받아 하나의 값을 출력
: x는 입력, y는 출력, w는 가중치

OR 게이트 문제

OR 연산: x에 1이 들어있으면 무조건 1이 y값으로 나온다.
AND 연산: 무조건 두 개가 다 만족했을 때 나오는 값.


XOR 게이트 : 둘 중 참 하나일 때, 참을 결과로 출력하는 연산 (마치 청개구리)

01_ OR 게이트 구현하기.ipynb

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()

^ 학습결과 그려보기

XOR 게이트

^ 해석:
  input_shape=(2,) -> X1 과 X2 두개를 넣어준다.
  Dense 층을 하나만 사용한다.


^ 정확도 50%로 학습 실패 ! (모델이 잘못됨)

다층 퍼셉트론 Multi-Layer Perceptron

: XOR 게이트와 같은 문제를 해결한 것
: Dense 가 하나가 아닌 두 개 이상

XOR 게이트 2nd 도전

^ 퍼셉트론 변경해줌. (Dense 를 추가해줌)
   # Dense 는 16,32,64 이렇게 제곱으로 많이 사용함.

결과: 실패.

XOR 게이트 3nd 도전

^
1) from tensorflow.keras.optimizers import RMSprop 추가해줌.
2) optimizer=RMSprop() 변경해줌


결과: 성공.

요약......


활성화 함수 activation ( 중간층 relu ) 로 y를 예측함.
아웃풋 레이어에서는, 결과 sigmoid 사용.

0개의 댓글