본문 바로가기
인공지능/Deep Learning

[Deep Learning] 학습중에 평가하기 validation

by coding_su 2022. 12. 28.

📝딥러닝 밸리데이션

val = validation

밸리데이션이란, 에포크가 한번 끝날때 마다 학습에 사용하지 않은 데이터로 시험을 보는 것을 말한다

테스트는 인공지능이 완전히 학습이 다 끝난 상태에서 평가하는 것이고
밸리데이션은 학습중에(에포크 끝날때마다) 평가하는 것을 말한다

 

validation_split : 학습할때 학습 데이터의 n% 는 테스트용으로 쓰겠다고 지정

# 인공지능 함수로 생성
def build_model() :
  model = Sequential()
  model.add( Dense( units= 64, activation= 'relu', input_shape= (9,) ) )
  model.add( Dense( units= 64, activation= 'relu') )
  model.add( Dense( units=1, activation= 'linear' ) )
  model.compile( optimizer= tf.keras.optimizers.Adam(learning_rate=0.001), loss= 'mse', metrics= [ 'mse', 'mae' ])
  return model

# 변수에 저장
model = build_model()

# 학습할때 학습 데이터의 20% 는 테스트용으로 쓰겠다고 validation_split 으로 지정
epochs_history = model.fit(X_train, y_train, epochs= 200, validation_split= 0.2)

 

validation_data : 밸리데이션 데이터를 따로 준비한 경우에 사용

※ 따로 데이터는 준비하지 않았지만 학습용 데이터를 사용하지 않고싶을때 테스트 데이터를 사용

epoch_history = model.fit( X_train, y_train, epochs=10, validation_data= (X_test, y_test) )

 

epoch_history 객체에 저장된 통계치를 사용해 모델의 훈련 과정을 시각화하기

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(epochs_history)

댓글