왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 영상처리
  • encoding='utf-8'
  • 기상탐사
  • get_long_description
  • labelme
  • 비지도학습
  • unsupervised
  • imageprocessing
  • UnboundLocalError
  • 의료이미징
  • pytorch
  • maskimage
  • alibidetect
  • pip install labelme
  • yolov8
  • TensorFlow
  • OpenCV
  • alibi-detection
  • PYTHON
  • numpy
  • 영상처리역사
  • matplotlib
  • 영상기술
  • ckpt_file
  • PIL
  • 딥러닝
  • labelme UnocodeDecodeError
  • 컴퓨터비전
  • ComputerVision
  • tune()

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

딥러닝 : validation data와 Callback(EarlyStopping Library) 사용법
인공지능/딥러닝

딥러닝 : validation data와 Callback(EarlyStopping Library) 사용법

2022. 12. 28. 15:56
728x90

1. validation 

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()
model.summary()

위 코드와 같이 모델링을 끝냈다.

 

이제 위에서 만든 model이라는 인공지능을 fit하는 과정에서 

validation을 사용할 것이다.

 

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

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

 

epoch_history=model.fit(X_train,y_train,epochs=200,validation_split=0.2)

위와같이 코드를 작성 해주면

이전과 다르게 val_loss , val_mse , val_mae 들을 확인할 수 있다.

 

이것을 차트로 시각화 해보면 아래 사진과 같다.

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)

 

2. callback ( EarlyStopping Library )

이 그래프를 보면 수 백번 에포크를 진행한 이후에는 모델이 거의 향상되지 않는 것 같습니다.

 model.fit 메서드를 수정하여 검증 점수가 향상되지 않으면 자동으로 훈련을 멈추도록 만들어 보겠습니다.

에포크마다 훈련 상태를 점검하기 위해 EarlyStopping 콜백(callback)을 사용하겠습니다. 지정된 에포크 횟수 동안 성능 향상이 없으면 자동으로 훈련이 멈춥니다.

 

# callback이란 내가 만든 함수를 프레임워크가 실행시켜주는 것!
# patience = 10 => 에포크 10번동안 val_loss가 더 작아지지 않으면(성능향상이 없으면) 학습을 멈춰라.
 
early_stop=tf.keras.callbacks.EarlyStopping(monitor='val_loss',patience=10)

이후

이 전 포스트 글들에서 중요하게 설명했듯이 학습을 새로 하고 싶으면 우선 모델을 새로 만들어줍니다.

model = build_model()
epoch_history=model.fit(X_train,y_train,epochs=10000000,validation_split=0.2,callbacks=[early_stop])

일부로 멈추는 것을 강조하기위해 epochs를 높은 숫자로 설정을 해보았습니다.

127번의 epoch끝에 멈춘 것을 확인할 수 있습니다. 이를 더 쉽게 보기위해 차트로 시각화 해보겠습니다.

 

위에서 설명했 듯이 성능향상이 더이상 없는 곳에서 그래프가 멈추는 것을 확인할 수 있습니다.

'인공지능 > 딥러닝' 카테고리의 다른 글

딥러닝 : softmax로 나온 결과를 레이블 인코딩으로 바꾸는 방법  (0) 2022.12.29
딥러닝 : Fashion mnist 10개로 분류된 패션 이미지를 tensorflow를 이용해 분류하기 / Flatten , softmax , 분류의 문제 loss 셋팅법  (0) 2022.12.28
딥러닝 : learning rate를 optimizer에 셋팅하기.  (0) 2022.12.28
딥러닝 : Tensorflow로 리그레션 문제 모델링 하는 방법  (0) 2022.12.28
딥러닝 : GridSearch를 이용한 최적의 하이퍼 파라미터 찾기  (0) 2022.12.27
    '인공지능/딥러닝' 카테고리의 다른 글
    • 딥러닝 : softmax로 나온 결과를 레이블 인코딩으로 바꾸는 방법
    • 딥러닝 : Fashion mnist 10개로 분류된 패션 이미지를 tensorflow를 이용해 분류하기 / Flatten , softmax , 분류의 문제 loss 셋팅법
    • 딥러닝 : learning rate를 optimizer에 셋팅하기.
    • 딥러닝 : Tensorflow로 리그레션 문제 모델링 하는 방법
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바