딥러닝
[딥러닝] Validation 설정: validation_split, validation_data
eyoo
2022. 6. 13. 12:26
딥러닝에서 validation은 학습하는 중에 에포크가 한번 끝날때마다 검증하는 것이다.
또한 벨리데이션은 train_test_split으로 train데이터와 test데이터를 나누었던 것처럼
train 데이터를 학습할 데이터와 벨리데이션 데이터로 나누어 사용한다.
# 학습이 끝난 후 검증하는 evaluate와 개념을 혼동할수있으므로 주의한다.
벨리데이션 설정은 fit으로 학습할 때 설정해야 한다.
파라미터인 validation_split으로 벨리데이션에 사용할 데이터를 0.2로 설정한다.
in:
epoch_history = model.fit(X_train,y_train, epochs= 1000, validation_split=0.2)
out:
Epoch 1/1000
8/8 [==============================] - 1s 31ms/step - loss: 582.1860 - mse: 582.1860 - mae: 22.8983 - val_loss: 591.5149 - val_mse: 591.5149 - val_mae: 22.8674
# 벨리데이션을 설정하니 검증한 데이터의 오차와 mse, mae인 val_loss, val_mse, val_mae가 나타난다.
에포크 히스토리를 차트로 시각화 해보자.
in:
import matplotlib.pyplot as plt
def plot_history(history) :
hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
plt.figure(figsize = (8, 12))
plt.subplot(2, 1, 1)
plt.xlabel('Eopoch')
plt.ylabel('Mean Abs Error [MPG]')
plt.plot(hist['epoch'], hist['mae'], label = 'Train Error')
plt.plot(hist['epoch'], hist['val_mae'], label = 'Val Error')
plt.ylim([0,5])
plt.legend()
plt.subplot(2, 1, 2)
plt.xlabel('Eopoch')
plt.ylabel('Mean Squared Error [MPG]')
plt.plot(hist['epoch'], hist['mse'], label = 'Train Error')
plt.plot(hist['epoch'], hist['val_mse'], label = 'Val Error')
plt.ylim([0,20])
plt.legend()
plt.show()
plot_history(epoch_history)
out:
# validation error가 train error보다 더 높아지면 좋은 학습방향이 아니다.
학습 데이터의 일부를 사용하는 validation_split과 달리 validation_data는 따로 데이터를 지정할수있다.
epoch_history = model.fit(X_train, y_train, epochs = 10, validation_data = (X_test, y_test))
# validation용 데이터로 검증용 데이터를 사용하고 따로 튜플에 지정하여 학습시킨다.