DEVELOPMENT/AI

딥러닝(DL) - DNN 모델

hongjw 2020. 12. 30. 03:26

DNN(Deep Neural Network)이란?

입력층(input layer)과 출력층(output layer) 사이에 여러 개의 은닉층(hidden layer)들로 이루어진 인공신경망이다.

 

DNN은 분류 및 수치 예측을 하기 위한 것으로, 특히 이미지 트레이닝이나 문자인식과 같은 분야에서 매우 유용하게 쓰이고 있다. 대표적인 DNN 응용 알고리즘에는 CNN, RNN, LSTM, GRU 등이 있다.

 

DNN 구현

from tensorflow.keras import layers
from tensorflow.keras import models
from tensorflow.keras import metrics
from tensorflow.keras import losses
from tensorflow.keras import optimizers
from tensorflow.keras import datasets              
from keras.utils import np_utils
from tensorflow.keras.layers import Dropout
import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import recall_score
from sklearn.metrics import precision_score
from sklearn.metrics import f1_score
from sklearn.metrics import confusion_matrix

print("[*] Start")

datasets = np.loadtxt('파일.csv', delimiter=',',skiprows=1)
xy_data = datasets
train_set, test_set = train_test_split(xy_data, test_size=0.3, random_state=123)
print('Training Length : ', len(train_set), 'Test Length : ', len(test_set))

x_train_data = train_set.T[:피처 갯수]
y_train_data = train_set.T[피처 갯수]

x_test_data = test_set.T[:피처 갯수]
y_test_data = test_set.T[피처 갯수]

print("[x_train_data]",x_train_data.shape)
print("[y_train_data]", y_train_data.shape)
print("[x_test_data]", x_test_data.shape)
print("[y_test_data]", y_test_data.shape)

#modeling
model = models.Sequential()
#input layer
model.add(layers.Dense(피처 갯수, activation='relu', input_shape=(피처 갯수,)))

# hidden layer
model.add(layers.Dense(15, activation='relu'))
model.add(layers.Dense(7, activation='relu'))
model.add(Dropout(0.2))


#out layer
model.add(layers.Dense(1, activation='sigmoid'))

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

hist = model.fit(x_train_data.T,y_train_data.T, epochs=25,batch_size=200,
                    validation_data = (x_test_data.T, y_test_data.T))

#  ####################
performance_train = model.evaluate(x_train_data.T, y_train_data.T)
print('train_Accuracy : ',format(performance_train[1]))
performance_test = model.evaluate(x_test_data.T, y_test_data.T)
print('test_Accuracy : ',format(performance_test[1]))
#print('Test Loss and Accuracy ->', performace_test)

# 그래프 코드
fig, loss_ax = plt.subplots()
acc_ax = loss_ax.twinx()

loss_ax.plot(hist.history['loss'], 'y', label='train loss')
loss_ax.plot(hist.history['val_loss'], 'r', label='val loss')
loss_ax.set_xlabel('epoch')
loss_ax.set_ylabel('loss')
loss_ax.legend(loc='upper right')

acc_ax.plot(hist.history['accuracy'], 'b', label='train acc')
acc_ax.plot(hist.history['val_accuracy'], 'g', label='val acc')
acc_ax.set_ylabel('accuracy')
acc_ax.legend(loc='upper left')

plt.show()

- epochs : 전체 데이터를 반복적으로 학습하는 횟수 (ex. 시험지를 푼 횟수)

- batch_size : 한번에 학습할 데이터의 수 (ex. 몇 문항을 풀고 해답을 맞추는지)

epochs를 너무 크게하면 오버피팅이 발생할 수 있으며, batch_size를 너무 작게하면 학습시간이 오래걸릴 수 있다. 

 

모델 저장

model.save('모델.h5')

 

 

 

참고

>> ebbnflow.tistory.com/119

>> tykimos.github.io/2017/03/25/Fit_Talk/

'DEVELOPMENT > AI' 카테고리의 다른 글

train, test, validation 데이터셋  (0) 2020.12.30
딥러닝(DL) - CNN 모델  (0) 2020.12.30
머신러닝(ML) - RandomForest 모델  (0) 2020.12.29