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)을 진행합니다. 이 과정에서 마지막 레이어의 가중치만 업데이트됩니다.