Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Keras 콜백을 활용해 특정 에포크마다 모델 가중치를 저장하는 방법

TensorFlow는 구글(Google)이 제공하는 머신러닝 프레임워크입니다. 오픈소스 프레임워크로, Python과 함께 사용하여 다양한 알고리즘과 딥러닝 애플리케이션을 구현할 수 있으며, 연구 목적과 실제 프로덕션 환경 모두에서 널리 활용됩니다.

TensorFlow는 복잡한 수학 연산을 빠르게 수행할 수 있도록 돕는 최적화 기법들을 갖추고 있습니다.

'tensorflow' 패키지는 아래 명령어 한 줄로 Windows에 설치할 수 있습니다.

pip install tensorflow

텐서(Tensor)는 TensorFlow에서 사용되는 데이터 구조로, 데이터 흐름 다이어그램(일명 '데이터 플로우 그래프')에서 노드와 노드를 연결하는 역할을 합니다. 텐서는 쉽게 말해 다차원 배열 또는 리스트라고 할 수 있습니다.

Keras는 ONEIROS(개방형 신경 전자 지능형 로봇 운영체제) 프로젝트의 일환으로 개발된 딥러닝 API로, Python으로 작성되었습니다. 생산성 높은 인터페이스를 갖춘 고수준(High-level) API로, 머신러닝 문제 해결을 손쉽게 도와줍니다.

Keras는 확장성이 뛰어나고 크로스 플랫폼 기능을 지원합니다. 즉, TPU나 GPU 클러스터에서 실행할 수 있으며, Keras 모델은 웹 브라우저나 모바일 환경에서도 동작하도록 내보낼 수 있습니다.

Keras는 이미 TensorFlow 패키지 안에 포함되어 있으며, 아래 코드로 불러올 수 있습니다.

import tensorflow
from tensorflow import keras

이 글의 코드는 Google Colaboratory(Colab)에서 실행됩니다. Google Colab은 브라우저에서 Python 코드를 실행할 수 있게 해주며, 별도의 설정 없이 GPU를 무료로 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.

모델 가중치 저장 원리

Keras에서 특정 에포크(epoch)마다 모델의 가중치를 자동으로 저장하려면 tf.keras.callbacks.ModelCheckpoint 콜백을 사용합니다. 이 콜백은 체크포인트마다 고유한 파일 이름을 부여하거나, 저장 빈도를 조절하는 등 다양한 옵션을 제공합니다.

코드 예제

checkpoint_path = "training_2/cp-{epoch:04d}.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)

batch_size = 32
print("4 에포크마다 모델 가중치를 저장하는 콜백 생성")
cp_callback = tf.keras.callbacks.ModelCheckpoint(
    filepath=checkpoint_path,
    verbose=1,
    save_weights_only=True,
    save_freq=4*batch_size)

print("새로운 모델 인스턴스 생성")
model = create_model()
print("'checkpoint_path'를 사용하여 가중치 저장")
model.save_weights(checkpoint_path.format(epoch=0))

코드 출처 — https://www.tensorflow.org/tutorials/keras/save_and_load

실행 결과

4 에포크마다 모델 가중치를 저장하는 콜백 생성
새로운 모델 인스턴스 생성
'checkpoint_path'를 사용하여 가중치 저장

코드 설명

  • ModelCheckpoint 콜백 설정: 콜백에는 체크포인트마다 고유한 이름을 지정하거나, 체크포인트 저장 주기를 조정하는 등 다양한 옵션이 제공됩니다.
  • filepath 지정: 'cp-{epoch:04d}.ckpt' 형식을 사용하면 에포크 번호가 파일 이름에 자동으로 반영되어, 어느 시점의 가중치인지 쉽게 구분할 수 있습니다.
  • save_weights_only=True: 모델 전체가 아닌 가중치만 저장하여 디스크 공간을 절약할 수 있습니다.
  • save_freq=4*batch_size: 4 에포크마다 새로운 모델이 학습되며, 각 체크포인트마다 고유한 이름으로 저장됩니다.

이처럼 ModelCheckpoint 콜백을 활용하면 학습 도중 원하는 시점마다 모델 가중치를 자동으로 백업할 수 있어, 학습 중단이나 과적합 발생 시 이전 상태로 복원하기 매우 유용합니다.