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

Keras를 활용한 파이썬 전이 학습(Transfer Learning) 구현 방법

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

텐서(Tensor)는 TensorFlow에서 사용되는 데이터 구조입니다. 텐서는 데이터 흐름 다이어그램의 엣지(edge)를 연결하는 역할을 하며, 이 다이어그램은 '데이터 플로우 그래프(Data Flow Graph)'라고 불립니다. 텐서는 본질적으로 다차원 배열 또는 리스트에 해당합니다.

Keras란 무엇인가?

Keras는 그리스어로 '뿔(horn)'을 의미하며, ONEIROS(Open ended Neuro-Electronic Intelligent Robot Operating System)라는 로봇 운영체제 연구 프로젝트의 일환으로 개발되었습니다. Keras는 파이썬으로 작성된 딥러닝 API로, 머신러닝 문제를 효율적으로 해결할 수 있도록 돕는 고수준(high-level) 인터페이스를 제공합니다.

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

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

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

import tensorflow
from tensorflow import keras

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

전이 학습 구현 예제

model = keras.Sequential([
    keras.Input(shape=(784)),
    layers.Dense(32, activation='relu'),
    layers.Dense(32, activation='relu'),
    layers.Dense(32, activation='relu'),
    layers.Dense(10),
])
print("사전 학습된 가중치 불러오기")
model.load_weights(...)
print("마지막 레이어를 제외한 모든 레이어 동결하기")
for layer in model.layers[:-1]:
    layer.trainable = False
print("모델 재컴파일 후 학습 진행")
print("마지막 레이어의 가중치만 업데이트됩니다")
model.compile(...)
model.fit(...)

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

실행 결과

사전 학습된 가중치 불러오기
마지막 레이어를 제외한 모든 레이어 동결하기
모델 재컴파일 후 학습 진행
마지막 레이어의 가중치만 업데이트됩니다

코드 설명

  • 전이 학습(Transfer Learning)이란 모델의 하위 레이어들을 동결(freeze)하고, 상위 레이어만 새롭게 학습시키는 기법을 의미합니다.

  • 먼저 Sequential 모델을 구성합니다.

  • 기존 모델의 사전 학습된(pre-trained) 가중치를 불러와 현재 모델에 적용합니다.

  • 마지막 레이어를 제외한 나머지 하위 레이어들을 동결합니다.

  • 모델의 레이어들을 순회하면서 마지막 레이어를 제외한 모든 레이어에 대해 'layer.trainable' 속성을 'False'로 설정합니다.

  • 마지막으로 모델을 컴파일하고 데이터에 맞춰 학습(fit)을 진행합니다. 이 과정에서 마지막 레이어의 가중치만 업데이트됩니다.