5 컨볼루션 신경망 실행하기
지금까지 살펴본 내용을 코드로 작성해 보겠습니다. 앞서 16.2절에서 만든 딥러닝 기본 프레임 코드를 그대로 이용하되 model 설정 부분만 지금까지 나온 내용으로 바꾸어 주면 됩니다.
실습 | MNIST 손글씨 인식하기: 컨볼루션 신경망 적용
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping from tensorflow.keras.datasets import mnist from tensorflow.keras.utils import to_categorical import matplotlib.pyplot as plt import numpy as np # 데이터를 불러옵니다. ( , ), ( , ) = mnist.load_data() = .reshape( .shape[0], 28, 28, 1).astype('float32') / 255 = .reshape( .shape[0], 28, 28, 1).astype('float32') / 255 = to_categorical( ) = to_categorical( ) # 컨볼루션 신경망의 설정 = Sequential() .add(Conv2D(32, =(3,3), =(28,28,1), ='relu')) .add(Conv2D(64, (3,3), ='relu')) .add(MaxPooling2D( =(2,2))) .add(Dropout(0.25)) .add(Flatten()) .add(Dense(128, ='relu')) .add(Dropout(0.5)) .add(Dense(10, ='softmax')) # 모델의 실행 옵션을 설정합니다. .compile( ='categorical_crossentropy', ='adam', =['accuracy']) # 모델 최적화를 위한 설정 구간입니다. = "./MNIST_CNN.hdf5" = ModelCheckpoint( = , ='val_loss', =1, = ) = EarlyStopping( ='val_loss', =10) # 모델을 실행합니다. = .fit( , , =0.25, =30, =200, =0, =[ , ]) # 테스트 정확도를 출력합니다. print("\n Test Accuracy: " % ( .evaluate( , )[1])) # 검증셋과 학습셋의 오차를 저장합니다. = .history['val_loss'] = .history['loss'] # 그래프로 표현해 봅니다. = np. (len( )) plt.plot( , , ='.', ="red", ='Testset_loss') plt.plot( , , ='.', ="blue", ='Trainset_loss') # 그래프에 그리드를 주고 레이블을 표시하겠습니다. plt.legend( ='upper right') plt.grid() plt.xlabel('epoch') plt.ylabel('loss') plt.show()