반응형
39. DNN(keras)
39.1 실습예제(mnist)
# 필기체를 분류하는 DNN 구현
# 심층신경망(Deep Neural Network, DNN) 은닉층을 많이 쌓아서 만든 인공신경망
# 학습데이터가 적거나 복잡한 이미지에 더 우수한 성능을 보이는 기법
%matplotlib inline
import numpy as np
import pandas as pd
import os
from keras.utils import up_utils
from keras import layers, models, datasets
# seaborn
import seaborn as sns
sns.set(style = 'white', font_scale = 1.7)
sns.set_style('ticks')
# font for matplotlib
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
plt.rcParams['savefig.dpi'] = 200
fm.get_fontconfig_fonts()
font_location = 'c:/windows/fonts/NanumGothicBold.ttf'
font_name = fm.FontProperties(fname = font_location).get_name()
matplotlib.rc('font', family = font_name)
# 분류 DNN 모델 구현
def make_model(input_number, hidden_layers, output_number):
# 모델 초기화
model = models.Sequential()
# 첫번째 은닉층
model.add(layers.Dense(hidden_layers[0], activation='relu', input_shape=(input_number,), name='Hidden-1'))
# 두번째 은닉층
model.add(layers.Dense(hidden_layers[1], activation='relu', name='Hidden-2'))
# 드롭아웃 계층 Dropout(p) p라는 확률로 출력 노드의 신호를 보내다 말다 함, 과적합 방지
model.add(layers.Dropout(0.2))
# 출력층
model.add(layers.Dense(output_number, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
반응형