본문 바로가기
국비교육기관/수업

84일차 _ DeapLearning - 경사하강법, Sequential

by 밀키스 2021. 7. 7.

21.07.07

 

 

 Deap Learning 

 

 

@경사하강법 

  • 경사하강법Loss가 0에 가까워질 때까지 값을 다시 Model로 보내어 학습시키는 방법 이다.

 

 

 

 

 


 

 

 


 

@Sequential 모델 이용 답 추측 

 

아래와 같은 데이터를 이용해 딥러닝 모델을 설계한다.

Data 엑셀 파일

 

 

%Library 호출 

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy as np
import sklearn
from sklearn.model_selection import train_test_split
  • 기본적으로 keras라는 딥러닝 패키지를 사용
  • 내가 학습에 사용할 모델은 Sequential 이라 한다.
  • train 데이터와 test 데이터로 나누기 위해 train_test_split 호출

 

 


%데이터 분리 및 train 생성 

x = data[:,:17]
y = data[:,17]
X_train, X_test, y_train, y_test = train_test_split(x, y,
                                                   test_size = 0.3,
                                                   random_state=1)
  • 위에 언급됐듯, 17개의 문제 열과 1개 열인 답이 존재
  • train & test 의 비율은 7:3으로 설정하였다. -> test_size
  • 학습할 때마다 값이 바뀌지 않고 동일하도록 random_state 부여

 

 


%Model 설계 

model = Sequential()
model.add(Dense(10, input_dim = 17, activation = 'relu')) # 입력층
model.add(Dense(6, activation = 'relu')) # 은닉층
model.add(Dense(1, activation = 'sigmoid')) # 출력층

model.compile(loss = 'binary_crossentropy', optimizer = 'adam',
             metrics = ['accuracy'])
  • model이란 변수에 Sequential 모델 담기
  • add라는 명령어로 층을 추가하는데, 첫번째 입력층의 경우 input_dim 이란 옵션이 필요하다
    • 해당 옵션은 문제가 될 데이터의 열 갯수이다
    • 그리고 순서대로 2번째는 은닉층, 3번째는 출력층 순으로 입력된다
    • 출력층의 경우 activation을 sigmoid (0과 1이니까)로 줬으며, 출력되는 열의 수가 1이기 때문에 Dense는 1이다.
    • activation활성화 함수를 뜻함
  • 마지막 compile은 내가 도출할 학습 결과에 대한 부분이다
    • compile의 loss는 얼마나 "입력데이터가 출력데이터와 일치하는지 평가"해주는 함수이다.
    • 나는 0이냐 1이냐를 판단하기 때문에 binary_crossentropy를 주었다.
    • optimizer손실함수를 기반으로 네트워크가 어떻게 업데이트될지 결정한다.
    • 물론 해당 부분의 종류는 adam을 제외하고, GD나 OGD?? 등등 많다.
    • metrics내가 평가할 측정항목이며, 나는 정확도를 보고 싶기 때문에 위와 같다.

 

 


%학습 및 평가 

model.fit(X_train, y_train, epochs = 1000)
model.evaluate(X_test, y_test)
model.predict(X_test)
model.predict_classes(X_test)
  • 머신러닝과 마찬가지로 학습, epochs학습 수를 의미한다.
  • evaluate해당 Model에 대한 성능을 나타낸다.
  • predict는 해당 Model에 대한 결과의 수치적 값, predict_clasees는 해당 Model에 의한 결과를 학습에 따라 나타낸다.

 

 

 

Model에 대한 성능 평가

 

Predict와 predict_classses의 차이

 

 


 

@Layer - 입력층 , 은닉층 , 출력층 

  • 좌측부터 순서대로 입력층, 은닉층, 출력층 을 보인다
  • 위에서 실습했던 부분, input_dim이 입력하는 Data의 열 갯수와 같아야 하는 이유는 위의 사진과 같은 이유라 할 수 있다.
  • 출력층 부분에서 내가 도출할 답의 갯수가 3 이기 때문에 Dense는 3으로 지정한다
반응형

댓글