TensorFlow란 무엇인가?
TensorFlow는 구글(Google)이 제공하는 머신러닝 프레임워크입니다. 오픈소스로 공개되어 있으며, 파이썬과 함께 사용해 다양한 알고리즘과 딥러닝 애플리케이션을 구현할 수 있습니다. 학술 연구부터 실제 상용 서비스까지 폭넓게 활용되고 있습니다.
'tensorflow' 패키지는 윈도우 환경에서 아래 명령어 한 줄로 간단히 설치할 수 있습니다.
pip install tensorflow
Keras란 무엇인가?
Keras는 ONEIROS(Open-ended Neuro-Electronic Intelligent Robot Operating System) 프로젝트의 연구 과정에서 개발된 딥러닝 API로, 파이썬으로 작성되었습니다. 머신러닝 문제를 효율적으로 해결할 수 있도록 돕는 생산적인 인터페이스를 갖춘 고수준(high-level) API이며, TensorFlow 프레임워크 위에서 동작합니다. 빠른 실험과 반복을 염두에 두고 설계되었기 때문에, 머신러닝 솔루션을 개발하고 캡슐화하는 데 필요한 핵심적인 추상화 계층과 빌딩 블록을 제공합니다.
Keras는 TensorFlow 패키지에 이미 포함되어 있으므로, 별도 설치 없이 아래 코드만으로 바로 사용할 수 있습니다.
import tensorflow from tensorflow import keras
Keras 함수형 API의 특징
Keras의 함수형 API(Functional API)는 순차형(Sequential) API로 만든 모델보다 훨씬 유연한 모델 구성을 가능하게 합니다. 주요 특징은 다음과 같습니다.
- 비선형 토폴로지를 가진 모델을 정의할 수 있습니다.
- 레이어를 여러 모델 간에 공유할 수 있습니다.
- 여러 개의 입력과 출력을 동시에 처리할 수 있습니다.
일반적으로 딥러닝 모델은 여러 레이어로 구성된 방향성 비순환 그래프(Directed Acyclic Graph, DAG) 형태를 띱니다. 함수형 API는 바로 이 레이어 그래프를 직관적으로 구축할 수 있게 도와줍니다.
이 글의 코드는 Google Colaboratory에서 실행했습니다. Google Colab은 브라우저에서 바로 파이썬 코드를 실행할 수 있는 환경으로, 별도의 설정 없이 GPU(그래픽 처리 장치)에 무료로 접근할 수 있으며 Jupyter Notebook을 기반으로 만들어졌습니다.
앙상블 모델 구현 예제
아래는 함수형 API를 활용해 세 개의 모델을 하나의 앙상블 모델로 결합하는 코드입니다.
def get_model():
inputs = keras.Input(shape=(128,))
outputs = layers.Dense(1)(inputs)
return keras.Model(inputs, outputs)
print("'get_model' 메서드 호출")
model_1 = get_model()
model_2 = get_model()
model_3 = get_model()
my_inputs = keras.Input(shape=(128,))
y1 = model_1(my_inputs)
y2 = model_2(my_inputs)
y3 = model_3(my_inputs)
print("모델 내 레이어 출력값의 평균 계산")
my_outputs = layers.average([y1, y2, y3])
print("앙상블 모델 생성")
ensemble_model = keras.Model(inputs=my_inputs, outputs=my_outputs)코드 출처 — https://www.tensorflow.org/guide/keras/functional
실행 결과
'get_model' 메서드 호출 모델 내 레이어 출력값의 평균 계산 앙상블 모델 생성
코드 설명
Keras에서는 모델을 중첩(nesting)할 수 있습니다. 즉, 하나의 모델 내부에 또 다른 모델(하위 모델)을 포함시키는 것이 가능합니다.
이렇게 만든 하위 모델들은 앙상블(ensembling)에 활용됩니다.
앙상블이란 여러 개의 모델을 하나의 모델로 결합하는 기법을 의미하며, 이 예제에서는 각 모델의 예측 출력값을 평균(average)내어 최종 결과로 사용합니다.
이러한 앙상블 기법은 개별 모델이 가진 약점을 상호 보완하여 예측 성능과 안정성을 높이는 데 효과적이며, 함수형 API를 사용하면 몇 줄의 코드만으로 손쉽게 구현할 수 있다는 장점이 있습니다.