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

Python과 Keras로 콜백(Callback)을 만들어 모델 가중치를 저장하는 방법

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

TensorFlow는 복잡한 수학적 연산을 빠르게 수행할 수 있는 최적화 기법을 갖추고 있습니다. 이는 내부적으로 NumPy와 다차원 배열을 활용하기 때문인데, 이 다차원 배열을 바로 '텐서(Tensor)'라고 부릅니다.

TensorFlow 설치하기

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

pip install tensorflow

텐서는 TensorFlow에서 사용되는 핵심 데이터 구조로, 데이터 플로우 다이어그램에서 노드(연산)들을 연결하는 역할을 합니다. 이 다이어그램을 '데이터 플로우 그래프(Data Flow Graph)'라고 하며, 텐서는 결국 다차원 배열 또는 리스트와 같다고 할 수 있습니다.

Keras란 무엇인가?

Keras는 ONEIROS(Open ended Neuro-Electronic Intelligent Robot Operating System) 프로젝트의 연구 과정에서 개발된 딥러닝 API입니다. Python으로 작성되었으며, 머신러닝 문제를 효율적으로 해결할 수 있도록 돕는 직관적이고 생산적인 인터페이스를 제공하는 고수준(High-level) API입니다.

Keras는 TensorFlow 프레임워크 위에서 동작하며, 빠른 실험과 반복 작업을 지원하도록 설계되었습니다. 머신러닝 솔루션을 개발하고 캡슐화하는 데 필요한 핵심 추상화 계층과 빌딩 블록을 제공합니다.

Keras는 이미 TensorFlow 패키지 안에 포함되어 있으므로, 아래 코드만으로 간단히 임포트하여 사용할 수 있습니다.

import tensorflow
from tensorflow import keras

개발 환경: Google Colaboratory

이 글의 코드는 Google Colaboratory(Colab)에서 실행했습니다. Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 환경 설정이 필요 없고 GPU(그래픽 처리 장치)까지 무료로 사용할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.

예제: 콜백을 활용한 가중치 저장

아래 코드는 학습 과정에서 모델의 가중치를 자동으로 저장하는 콜백(Callback)을 생성하고, 이를 모델 학습에 적용하는 전체 과정을 보여줍니다.

print("체크포인트 경로 설정")
checkpoint_path = "training_1/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)

print("가중치를 저장할 콜백 생성")
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,
    save_weights_only=True, verbose=1)

print("새로운 콜백을 적용하여 모델 학습")
model.fit(train_images,
    train_labels,
    epochs=10,
    validation_data=(test_images, test_labels),
    callbacks=[cp_callback])
ls {checkpoint_dir}

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

실행 결과

Python과 Keras로 콜백(Callback)을 만들어 모델 가중치를 저장하는 방법

Python과 Keras로 콜백(Callback)을 만들어 모델 가중치를 저장하는 방법

Python과 Keras로 콜백(Callback)을 만들어 모델 가중치를 저장하는 방법

코드 설명

  • 저장해 둔 학습된 모델은 처음부터 다시 학습하지 않고 그대로 사용할 수 있으며, 학습이 중단된 시점부터 이어서 재개할 수도 있습니다.

  • 'ModelCheckpoint' 메서드는 학습 도중과 학습이 끝나는 시점에 모델을 지속적으로 저장하는 역할을 합니다.

  • 이 방식 덕분에 에포크(epoch) 하나가 끝날 때마다 체크포인트 파일이 자동으로 갱신됩니다.

  • 위 예제에서 모델은 학습 데이터(train_images, train_labels)에 맞춰 학습(fit)되었습니다.