Recent Posts
Recent Comments
Link
Today
Total
09-08 12:26
관리 메뉴

Hippo's data

DNN(Deep Neural Network) 심층 신경망 구현 본문

DL(Deep Learning)

DNN(Deep Neural Network) 심층 신경망 구현

Hippo's data 2024. 1. 9. 19:13
728x90

오늘은 딥러닝 모델 중 하나인 DNN(Deep Neural Network) 심층 신경망 모델 구현에 대해 알아보겠습니다!

 

머신러닝 모델 구현시 사이킷런(scikit-learn)을 사용한 것처럼 딥러닝 또한 라이브러리를 통해 쉽게 구현할 수 있습니다

딥러닝 구현 라이브러리에는 케라스, 텐서플로우, 파이토치 등 여러 종류가 있는데요 그중 텐서플로우(tensorflow)를 활용하여 구현해보도록 하겠습니다!!!  

1) 불러오기 

2) 모델 생성 

3) 모델 학습

 

 

1) 불러오기 

import tensorflow as tf 
from tensorflow.keras.models import Sequential   # 순차적인 틀을 만듦 / 틀에 레이어들을 채움
from tensorflow.keras.layers import Dense, Activation, Dropout    # Dense -> hidden layer 


2) 모델 생성

https://subscription.packtpub.com/book/data/9781788995207/1/ch01lvl1sec03/deep-learning-intuition

 

< 구현할 구조 설명 >

input layer : 18개
첫 번째 hidden layer(unit): 4개 
두 번째  hidden layer(unit): 3개
output layer(이진분류) :1개


model = Sequential()    # 틀을 만듦 
model.add(Dense(4, activation='relu', input_shape=(18,)))   # 첫 번째 hidden layer 추가, input 18개 정의 

model.add(Dropout(0.3))    # 드랍아웃 0.3 비율 
model.add(Dense(3, activation='relu')) #  번째 hidden layer 추가

model.add(Dropout(0.3))  # 드랍아웃 0.3 비율 
model.add(Dense(1, activation='sigmoid')) # output layer 추가   /  이진분류-> sigmoid / 다중분류-> softmax

 

model.compile(optimizer='adam',      # 모델 컴파일 / 최적화 알고리즘, 손실함수, 평가지표 정의
              loss='binary_crossentropy',    # 이진분류 -> binary_crossentropy / 다중분류 -> categorical_crossentropy
              metrics=['accuracy']) 

 

## loss 손실함수sparse 의미 

"categorical_crossentropy"-> y값(타겟) 원-핫 인코딩 된 형태 (1 / 0)

"sparse_categorical_crossentropy" -> y값(타겟)  Int형

 

3) 모델 학습

history = model.fit(X_train, y_train, 
          validation_data=(X_test, y_test),
          epochs=20, 
          batch_size=16)

 

# 이런식으로 에폭마다 지표값들이 표시됨

Epoch 1/20
342/342 [==============================] - 1s 3ms/step - loss: 0.5785 - accuracy: 0.8557 - val_loss: 0.3741 - val_accuracy: 0.8994
Epoch 2/20
342/342 [==============================] - 1s 3ms/step - loss: 0.4105 - accuracy: 0.8985 - val_loss: 0.3234 - val_accuracy: 0.8994
Epoch 3/20

 

losses = pd.DataFrame(model.history.history)     # 데이터 프레임 형식으로 지표 결과 보여주기 

loss accuracy val_loss val_accuracy
0 0.473808 0.889559 0.324098 0.89936
1 0.354794 0.899616 0.300751 0.89936
2 0.324456 0.899616 0.285697 0.89936

 

# 모델 구조 확인

model.summary() 

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_6 (Dense)              (None, 5)                 95        
_________________________________________________________________
dropout_2 (Dropout)          (None, 5)                 0         
_________________________________________________________________
dense_7 (Dense)              (None, 4)                 24        
_________________________________________________________________
dropout_3 (Dropout)          (None, 4)                 0         
_________________________________________________________________
dense_8 (Dense)              (None, 2)                 10        
=================================================================
Total params: 129
Trainable params: 129
Non-trainable params: 0

728x90