Tensorboard를 통해 모델의 학습 진행상황을 시각적으로 확인할 수 있다.
그리고 EarlyStopping이라는 함수를 통해 epoch이 진행되면서 accuracy와 loss의 진전이 없으면 epoch을 알아서 중단시키도록 설정할 수 있다.

의류 이미지 구분 DL 프로젝트

본 포스팅은 본 블로그에서 기존에 진행했던 [DL] Image Classification DL 모델 만들기 1 프로젝트의 코드에 Tensorboard와 EarlyStopping 코드를 추가하는 방식으로 작성하였다.

1. Tensorboard 시각화

1) Tensorboard 로그파일 생성

Tensorboard를 활용하기 위해서는 아래 코드를 추가해준다.

from tensorflow.keras.callbacks import TensorBoard

tensorboard = Tensorboard( log_dir='logs/{}'.format( 'my_model' + str(int(time.time())) ) )

model.fit(trainX, trainY, validation_data=(testX, testY), epochs=3, callbacks=[tensorboard])


Example)

import tensorflow as tf 
from tensorflow.keras.callbacks import TensorBoard


(trainX, trainY), (testX, testY) = tf.keras.datasets.fashion_mnist.load_data()

trainX = trainX / 255.0
testX = testX / 255.0

trainX = trainX.reshape( (trainX.shape[0], 28,28,1) )
testX = testX.reshape( (testX.shape[0], 28,28,1) )

model = tf.keras.Sequential([
	tf.keras.layers.Conv2D( 32, (3,3), padding='same', activation='relu', input_shape=(28,28,1) ),
	tf.keras.layers.MaxPooling2D( (2,2) ),
	tf.keras.layers.Flatten(),
	tf.keras.layers.Dense(128, activation='relu'),
	tf.keras.layers.Dense(10, activation='softmax'),
])

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['acc'])

tensorboard = Tensorboard( log_dir='logs/{}'.format( 'my_model' + str(int(time.time())) ) )  # 현재 시간 기준으로 로그파일 생성

model.fit(trainX, trainY, validation_data=(testX, testY), epochs=3, callbacks=[tensorboard])
  • Tensorboard(): Tensorboard 시각화를 위한 로그파일 생성해주는 함수
    • log_dir: 로그파일 저장경로
  • callbacks=[tensorboard]: epoch 끝날 때마다 acc, loss 기록된 로그파일 생성해준다.
  • 현재 시각을 기준으로 로그 기록 남기기

      import time
    
      time.time()  # 초 단위로 현재시간 출력
    


2) log파일 Tensorboard에 띄우기

(1) Google Colab

%load_ext tensorboard
%tensorboard --logdir logs

(2) 로컬

$ tensorboard --logdir logs


3) 다양한 실험하기

Tensorboard로 다양한 실험을 진행한 결과를 확인하고 싶다면
⇒ 레이어 만들기 & model.fit()을 여러번 반복 (for반복문 또는 def함수 활용)

Example) 아래처럼 모델을 함수화해서 모델을 여러개 생성하고, 각 모델에 대한 학습을 진행해도 좋다.

def my_model(parameter):
	model = tf.keras.Sequential([
		tf.keras.layers.Conv2D( 32, (3,3), padding='same', activation='relu', input_shape=(28,28,1) ),
		tf.keras.layers.MaxPooling2D( (2,2) ),
		tf.keras.layers.Flatten(),
		tf.keras.layers.Dense(parameter, activation='relu'),
		tf.keras.layers.Dense(10, activation='softmax'),
	])
	return model

new_model = my_model(256)


2. EarlyStopping

모델이 accuracy 또는 loss 측면에서 더 이상 성능의 개선이 없을 때 알아서 epoch을 중단하도록 할 수 있다.

from tensorflow.keras.callbacks import EaryStopping

es = EarlyStopping(monitor ='val_loss', patience=3, mode='min')

model.fit(trainX, trainY, validation_data=(testX, testY), epochs=300, callbaccks=[tensorboard, es])
  • 처음에 epoch 설정시 큰 값으로 넣어놓는다.
  • es = EarlyStopping(monitor ='val_loss', patience=3, mode='min'), es = EarlyStopping(monitor ='val_accuracy', patience=3, mode='max')
    • epoch 끝날 때마다 val_loss 또는 val_accuracy를 모니터링하겠다. epoch 3개 지나도 진전이 없으면 epoch을 알아서 중지해준다.


Reference

Leave a comment