Python/Deep Learning

[Python DL]DNN, CNN, RNN & keras.models.Sequential()

sohyunkimmm 2023. 1. 24. 20:28
728x90

* 딥 러닝(Deep Learning)

1) DNN(Deep Neural Network)

- 인공신경망 모델 내 은닉층을 많이 늘려 학습의 결과를 향상시킨 방법

- 은닉층이 2개 이상인 학습 방법

- 컴퓨터가 스스로 분류레이블을 만들어 내고 공간을 왜곡하고 데이터를 구분짓는 과정 반복

- DNN을 응용한 알고리즘: CNN, RNN, LSTM, GRU

NN vs. DNN

 

2) CNN(합성곱 신경망, Convoluntion Neural Network)

- 주로 이미지나 영상 데이터를 처리할 때 사용

- 기존의 방식: 데이터에서 지식을 추출하여 학습

- CNN: 데이터의 특징을 추출하여 특징들의 패턴을 파악하는 구조

- Convolution과정과 Pooling과정을 통해 진행

CNN

 

3) RNN(순환 신경망, Recurrent Neural Network)

- 반복적이고 순차적인 데이터(Sequential Data)학습에 특화된 인공신경망의 한 종류

- 내부의 순환구조를 이용하여 과거의 학습을 weight를 통해 현재 학습에 반영

- 현재의 학습과 과거의 학습의 연결을 가능하게 하고 시간에 종속된다는 특징 가짐

- 음성 웨이브폼 파악, 텍스트의 앞 뒤 성분을 파악할 때 주로 사용

RNN

 

 

 

* DNN 코딩하기

- 시작 전, 경고문 제거

 

1) 분류 예측

변수선택, 데이터 분할, 데이터 전처리, 오버샘플링

 

- 필요 패키지 불러오기(keras)

import keras

import tensorflow as tf

from keras.models import Sequential

from keras.layers import Dense, Activation

from keras.metrics import Accuracy

 

- 시드값 설정 (시작점)

np.random.seed(0)

tf.random.set_seed(0)

 

- 모형 생성

model = keras.models.Sequential()

model.add(keras.layers.Dense(64, input_dim = 7, activation = "relu"))

* 'input_dim = 7' : 7차원의 신경망

* 'activation = "relu"' : activation함수의 디폴트를 'relu'함수로 정하겠다

model.add(keras.layers.Dense(64, activation = "relu"))

model.add(keras.layers.Dense(1, activation = "sigmoid"))

 

- 모형 학습

model.compile(loss = "binary_crossentropy", optimizer = "adam", metrics = ["accuracy"])

* 'loss' : accuracy에 반대되는 개념

* 'optimizer' : 작은 오차를 가지는 지점을 찾아주는 장치

 

* 'adam' : 최적화 시켜주는 함수

history = model.fit(X_train, Y_train, validation_split = 0.2, epochs = 100, batch_size = 64, verbose = 2)

* 'epochs' : 시도 횟수 (-> 높일수록 계산이 느려짐)

* 'batch_size' : Dense와 같은 개념

* 'verbose' : 디폴트 값 = 2

시드값 설정, 모형생성, 모형학습
epoch = 100

 

- loss와 accuracy를 그려서 적정 epoch값 구해보기

적정한 epoch값 구해보기 ➡️ 여기서는 데이터가 일정해지는 지점인 '20' 정도로 잡는 것이 적절할 것 같다

 

- 구한 epoch값(20)을 넣어서 학습시키기

epchs = 20

 

- Y 예측값, Y 예측클래스 도출

 

 

2) 회귀 예측 

- 시드값 설정 (시작점)

np.random.seed(0)

tf.random.set_seed(0)

 

- 모형 생성

model = keras.models.Sequential()

model.add(keras.layers.Dense(64, input_dim = 4, activation = "relu"))

* 'input_dim = 4' : 4차원의 신경망

* 'activation = "relu"' : activation함수의 디폴트를 'relu'함수로 정하겠다

model.add(keras.layers.Dense(64, activation = "relu"))

model.add(keras.layers.Dense(64, activation = "relu"))

 

- 모형 학습

model.compile(loss = "mse", optimizer = "SGD")

* 'optimizer' : 작은 오차를 가지는 지점을 찾아주는 장치

* 'SGD' : 확률적 경사 하강법

Y_pred = np.round(model.predict(X_test[:5], verbose = 0), 3)

 

 

 

 

<사진, 자료 출처>

https://ebbnflow.tistory.com/119

 

728x90
반응형