[Python] DNN(Keras)
programming/python

[Python] DNN(Keras)

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