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

Python에서 Keras를 활용해 딥러닝 모델을 훈련하는 방법


Keras는 ONEIROS(Open-ended Neuro-Electronic Intelligent Robot Operating System) 프로젝트의 연구 과정에서 개발된 딥러닝 API입니다. Python으로 작성되었으며, 머신러닝 문제를 효율적으로 해결할 수 있도록 돕는 생산성 높은 인터페이스를 갖춘 고수준(high-level) API입니다. Keras는 TensorFlow 프레임워크 위에서 동작하며, 빠른 실험과 반복을 지원하도록 설계되었습니다. 또한 머신러닝 솔루션을 개발하고 캡슐화하는 데 필요한 핵심 추상화 계층과 빌딩 블록을 제공합니다.

Keras의 주요 특징

Keras는 뛰어난 확장성과 크로스 플랫폼 지원 능력을 갖추고 있습니다. 이를 통해 TPU나 GPU 클러스터 환경에서도 실행할 수 있으며, 학습된 Keras 모델은 웹 브라우저나 모바일 기기에서 구동되도록 내보낼 수도 있습니다.

Keras는 TensorFlow 패키지에 이미 포함되어 있어 별도의 설치 없이 아래 코드 한 줄로 손쉽게 불러올 수 있습니다.

import tensorflow
from tensorflow import keras

함수형 API(Functional API)란?

Keras의 함수형 API를 사용하면 순차형(Sequential) API보다 훨씬 유연한 모델을 만들 수 있습니다. 함수형 API는 비선형 토폴로지를 가진 모델을 다룰 수 있고, 레이어를 공유하거나 여러 개의 입력과 출력을 처리하는 것도 가능합니다. 일반적으로 딥러닝 모델은 여러 레이어로 구성된 유향 비순환 그래프(DAG, Directed Acyclic Graph) 형태이며, 함수형 API는 바로 이 레이어 그래프를 손쉽게 구축할 수 있도록 도와줍니다.

Google Colaboratory 환경

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

예제 코드

다음은 모델을 시각화하고, CIFAR-10 데이터셋을 불러와 전처리한 후, 컴파일하고 훈련하는 전체 과정입니다.

print("모델을 시각화합니다")
keras.utils.plot_model(model, "my_resnet.png", show_shapes=True)
print("데이터를 학습용과 테스트용으로 분리합니다")
(x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()
print("데이터 타입을 float로 변환합니다")
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
print("모델을 컴파일합니다")
model.compile(
    optimizer=keras.optimizers.RMSprop(1e-3),
    loss=keras.losses.CategoricalCrossentropy(from_logits=True),
    metrics=["acc"],
)
model.fit(x_train[:2000], y_train[:2000], batch_size=64, epochs=2, validation_split=0.2)

코드 출처 − https://www.tensorflow.org/guide/keras/functional

실행 결과

모델을 시각화합니다
데이터를 학습용과 테스트용으로 분리합니다
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170500096/170498071 [==============================] - 2s 0us/step
데이터 타입을 float로 변환합니다
모델을 컴파일합니다
Epoch 1/2
25/25 [==============================] - 9s 332ms/step - loss: 2.3163 - acc: 0.1028 - val_loss: 2.2962 - val_acc: 0.1175
Epoch 2/2
25/25 [==============================] - 12s 492ms/step - loss: 2.3155 - acc: 0.1175 - val_loss: 2.2606 - val_acc: 0.1200
<tensorflow.python.keras.callbacks.History at 0x7f48d3ecfb00>

코드 설명

  • 입력 데이터를 학습용 데이터셋과 테스트용 데이터셋으로 분리합니다.

  • 데이터의 자료형을 'float' 타입으로 변환하고, 픽셀 값을 255로 나누어 0~1 사이로 정규화합니다.

  • 'compile' 메서드를 사용해 옵티마이저, 손실 함수, 평가 지표를 설정하여 모델을 컴파일합니다.

  • 'fit' 메서드를 호출하여 학습 데이터에 맞춰 모델을 훈련합니다. 이 예제에서는 배치 크기 64, 에포크 2회, 검증 데이터 비율 20%로 설정했습니다.