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

TensorFlow를 활용한 MNIST 모델 가중치 저장 및 불러오기 방법

TensorFlow란 무엇인가?

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

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

TensorFlow 패키지는 Windows 환경에서 아래 명령어 한 줄로 간단히 설치할 수 있습니다.

pip install tensorflow

텐서(Tensor)의 개념

텐서는 TensorFlow에서 사용되는 기본 데이터 구조입니다. 플로우 다이어그램(flow diagram)에서 각 노드를 연결하는 역할을 하며, 이 다이어그램은 '데이터 흐름 그래프(Data Flow Graph)'라고 알려져 있습니다. 쉽게 말해 텐서란 다차원 배열 또는 리스트 그 자체입니다.

과적합(Overfitting) 문제와 학습 균형

모델을 장시간 학습시키면 과적합(overfitting)이 발생하기 쉽습니다. 과적합된 모델은 테스트 데이터에 대해 일반화 성능이 떨어지므로, 학습 스텝 수를 적절히 조절하는 것이 중요합니다. 즉, 다양한 데이터 케이스를 골고루 사용해야 효과적인 학습이 가능하고, 그 결과 모델이 테스트 데이터에서 더 좋은 일반화 성능을 보입니다. 만약 이것만으로 부족하다면 정규화(regularization) 기법을 적용할 수 있습니다.

Keras 소개

Keras는 Python으로 작성된 딥러닝 API입니다. 생산성 높은 인터페이스를 갖춘 고수준(high-level) API로, 머신러닝 문제를 손쉽게 해결하도록 도와줍니다. Keras는 TensorFlow 프레임워크 위에서 동작하며, 빠른 실험을 지원하기 위해 설계되었습니다. 머신러닝 솔루션을 개발하고 캡슐화하는 데 필수적인 추상화 계층과 빌딩 블록을 제공합니다.

Keras는 이미 TensorFlow 패키지에 포함되어 있으며, 아래 코드로 바로 사용할 수 있습니다.

import tensorflow
from tensorflow import keras

Google Colaboratory 실행 환경

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

예제 코드

!pip install -q pyyaml h5py
import os

import tensorflow as tf
from tensorflow import keras

print("Tensorflow 버전 : ")
print(tf.version.VERSION)
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
print("학습 데이터와 테스트 데이터 분리")
train_labels = train_labels[:1000]
test_labels = test_labels[:1000]

print("학습 데이터와 테스트 데이터 형태 변환")
train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0
test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.0

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

코드 설명

  • 필요한 패키지들을 임포트하고 별칭(alias)을 지정합니다.
  • 실행 속도를 높이기 위해 처음 1,000개의 샘플만 가져옵니다.

이렇게 준비된 MNIST 데이터셋은 이후 tf.keras.callbacks.ModelCheckpointmodel.save(), model.load_weights() 등의 API를 통해 체크포인트 형태로 가중치를 저장하고, 필요할 때 다시 불러와 재사용할 수 있습니다. 가중치를 저장해 두면 학습을 처음부터 반복하지 않아도 되므로 시간과 자원을 크게 절약할 수 있습니다.