반응형

model.fit 에서 나오는 ETA 는 estimated time of arrival로 학습시키는 동안 마다 계산되어 보여진다. ETA는 1 epoch 의 학습시간을 예상해서 보여준다. (즉, 모델을 학습시킬 때 나오는 ETA는 한 epoch 가 돌기까지 남은 시간을 보여준다)

 

ETA는 정확히 학습을 완료하는데 (모든 epoch를 다 도는데) 걸리는 시간을 알려준다고 볼 수 없음

 

https://www.slideshare.net/w0ong/ss-82372826

 

모델을 학습시키는데 걸리는 시간 보기

 

1. TensorFlow TQDM 사용하기

www.tensorflow.org/addons/tutorials/tqdm_progress_bar

 

TensorFlow 애드온 콜백 : TQDM 진행률 표시 줄  |  TensorFlow Addons

개요 이 노트북은 TensorFlow Addons에서 TQDMCallback을 사용하는 방법을 보여줍니다. 설정 pip install -U tensorflow-addons Collecting tensorflow-addons Using cached tensorflow_addons-0.11.2-cp36-cp36m-manylinux2010_x86_64.whl (1.1 MB)

www.tensorflow.org

아나콘다 가상환경에서 pip install tensorflow-addons == (버전) 으로 설치해준다.

 

주의해야할 점은 tensorflow 버전과 python 버전을 고려해서 tensorflow-addons를 깔아줘야한다는 점! 

https://stackoverflow.com/questions/65464463/importerror-cannot-import-name-keras-tensor-from-tensorflow-python-keras-eng

 

설치 후에는 튜토리얼을 따라서

 

import tensorflow as tf
import tensorflow_addons as tfa

import tqdm

 

모듈들을 import 해준다음, tqdm_callback 변수를 만들어 주고

 

tqdm_callback = tfa.callbacks.TQDMProgressBar()

 

model.fit() 안에  callbacks=[tqdm_callback]를 넣어주면 된다. verbose=0를 넣어주면 원래 fit를 돌리 때 나오는 progress bar (with ETA)를 안 보이게 할 수 있다.

 

#예시
model.fit(x_train, y_train,
          batch_size=64,
          epochs=10,
          verbose=0,
          callbacks=[tqdm_callback],
          validation_data=(x_test, y_test))

 

그러면 밑에 사진처럼 tqdm progress bar(ETA = batch 하나가 도는데 걸린 시간) 가 뜬다. (verbose를 설정 안해줘서 tqdm과 default progress bar가 함께 떴다)

 

 

2. python datetime module

 

import datetime를 해주고

 

start = datetime.datetime.now() 를 코드 맨 윗줄 또는 시간을 재기 시작할 지점에 넣어준다.

 

시간 재기를 끝낼 시점에 

 

end = datetime.datetime.now() 를 써주고

 

끝낸 시간과 시작한 시간을 빼주면 시간이 얼마나 지났는지 계산할 수 있다.

 

time = end - start 

 

그리고 print()를 써서 출력해주면 된다.

 

print("처리시간: ", time)

 

 

 

 

3. python time module 를 사용한 클래스 구현 (epoch 별 걸린 시간 계산)

stackoverflow.com/questions/43178668/record-the-computation-time-for-each-epoch-in-keras-during-model-fit

 

record the computation time for each epoch in Keras during model.fit()

I want to compare the computation time between different models. During the fit the computation time per epoch is printed to the console. Epoch 5/5 160000/160000 [==============================] -...

stackoverflow.com

위에 링크에 설명된대로,

import time

class TimeHistory(keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self.times = []

    def on_epoch_begin(self, epoch, logs={}):
        self.epoch_time_start = time.time()

    def on_epoch_end(self, epoch, logs={}):
        self.times.append(time.time() - self.epoch_time_start)

 

코드를 fit 전에 넣어준 후, 

 

TimeHistory() 를 변수에 넣어주고 fit 할 때 callbacks에 추가해주면 된다.

time_callback = TimeHistory()

model.fit(x_train, y_train,
          batch_size=64,
          epochs=3,
          verbose=0,
          callbacks=[time_callback],
          validation_data=(x_test, y_test))

 

그리고 time_callback.times를 출력해주면 epoch 마다 걸린 시간을 리스트 형식으로 반환해서 보여준다.

(밑에 예제는 epoch를 3번 준 경우)

print(time_callback.times)

'''
output
[4.531331300735474, 4.308278322219849, 4.505300283432007]
'''

 

 

 

반응형