Keras - Epoch와 오차(Loss)간 관게를 그래프로 확인하기
10 Jan 2018 | 머신러닝 Python KerasMNIST
이전 포스팅에서 다룬 MNIST 손글씨 인식 결과를 이용해서 그래프로 확인하는 예제입니다.
예제 코드
from keras.datasets import mnist from keras.utils import np_utils from keras.models import Sequential from keras.layers import Dense from keras.callbacks import ModelCheckpoint, EarlyStopping import matplotlib.pyplot as plt import os import numpy MODEL_SAVE_FOLDER_PATH = './model/' if not os.path.exists(MODEL_SAVE_FOLDER_PATH): os.mkdir(MODEL_SAVE_FOLDER_PATH) model_path = MODEL_SAVE_FOLDER_PATH + 'mnist-' + '{epoch:02d}-{val_loss:.4f}.hdf5' cb_checkpoint = ModelCheckpoint(filepath=model_path, monitor='val_loss', verbose=1, save_best_only=True) cb_early_stopping = EarlyStopping(monitor='val_loss', patience=10) (X_train, Y_train), (X_validation, Y_validation) = mnist.load_data() X_train = X_train.reshape(X_train.shape[0], 784).astype('float64') / 255 X_validation = X_validation.reshape(X_validation.shape[0], 784).astype('float64') / 255 Y_train = np_utils.to_categorical(Y_train, 10) Y_validation = np_utils.to_categorical(Y_validation, 10) model = Sequential() model.add(Dense(512, input_dim=784, activation='relu')) model.add(Dense(10, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) history = model.fit(X_train, Y_train, validation_data=(X_validation, Y_validation), epochs=30, batch_size=200, verbose=0, callbacks=[cb_checkpoint, cb_early_stopping]) print('\nAccuracy: {:.4f}'.format(model.evaluate(X_validation, Y_validation)[1])) y_vloss = history.history['val_loss'] y_loss = history.history['loss'] x_len = numpy.arange(len(y_loss)) plt.plot(x_len, y_vloss, marker='.', c='red', label="Validation-set Loss") plt.plot(x_len, y_loss, marker='.', c='blue', label="Train-set Loss") plt.legend(loc='upper right') plt.grid() plt.xlabel('epoch') plt.ylabel('loss') plt.show()
실행 결과
그래프를 보면 학습 데이터에 대한 오차는 학습을 계속할수록 줄어들지만, 실제 검증용 데이터에 대한 오차는 일정 수준 이상부터는 큰 차이가 없는 것을 알 수 있습니다.