TensorFlow란 무엇인가?
TensorFlow는 구글(Google)이 제공하는 머신러닝 프레임워크입니다. 오픈소스로 공개되어 있으며, Python과 함께 사용해 각종 알고리즘과 딥러닝 애플리케이션 등을 구현할 수 있습니다. 연구 목적과 실제 서비스(프로덕션) 환경 모두에서 널리 활용되고 있으며, 복잡한 수학 연산을 빠르게 처리할 수 있는 다양한 최적화 기법을 내장하고 있습니다.
'tensorflow' 패키지는 Windows 환경에서 아래 명령어 한 줄로 간단히 설치할 수 있습니다.
pip install tensorflow
텐서(Tensor)는 TensorFlow에서 사용하는 기본 데이터 구조입니다. 텐서는 데이터 흐름 다이어그램에서 노드 사이의 엣지(edge)를 연결하는 역할을 하며, 이 다이어그램을 '데이터 흐름 그래프(Data Flow Graph)'라고 부릅니다. 쉽게 말해 텐서란 다차원 배열 또는 리스트를 의미합니다.
Keras란 무엇인가?
Keras는 ONEIROS(Open-ended Neuro-Electronic Intelligent Robot Operating System) 프로젝트의 연구 과정에서 탄생했습니다. Python으로 작성된 딥러닝 API로, 머신러닝 문제를 효율적으로 해결할 수 있는 생산성 높은 인터페이스를 제공하는 고수준(high-level) API입니다. TensorFlow 프레임워크 위에서 동작하며, 빠르게 실험하고 프로토타입을 만들 수 있도록 설계되었습니다. 또한 머신러닝 솔루션을 개발하고 캡슐화하는 데 꼭 필요한 핵심 추상화 계층과 빌딩 블록을 제공합니다.
Keras는 이미 TensorFlow 패키지 안에 포함되어 있으므로, 별도의 설치 없이 아래 코드만으로 바로 사용할 수 있습니다.
import tensorflow from tensorflow import keras
함수형 API(Functional API)의 장점
Keras의 함수형 API를 사용하면 순차형(Sequential) API로 만든 모델보다 훨씬 유연한 모델을 구축할 수 있습니다. 함수형 API는 비선형 토폴로지를 가진 모델을 다룰 수 있고, 여러 곳에서 레이어를 공유할 수 있으며, 다중 입력·다중 출력 구조도 손쉽게 처리할 수 있습니다.
일반적인 딥러닝 모델은 여러 개의 레이어로 구성된 방향성 비순환 그래프(DAG, Directed Acyclic Graph) 형태입니다. 함수형 API는 이러한 레이어 그래프를 직관적인 코드로 구축할 수 있게 도와줍니다.
이 글의 코드는 Google Colaboratory에서 실행했습니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있는 환경으로, 별도의 설정이 필요 없으며 GPU(그래픽 처리 장치)를 무료로 사용할 수 있다는 큰 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.
모델 훈련 예제
아래는 다중 입력·다중 출력 모델을 실제 데이터에 학습시키는 코드입니다.
print("Sample input data")
title_data = np.random.randint(num_words, size=(1280, 10))
body_data = np.random.randint(num_words, size=(1280, 100))
tags_data = np.random.randint(2, size=(1280, num_tags)).astype("float32")
print("Sample target data")
priority_targets = np.random.random(size=(1280, 1))
dept_targets = np.random.randint(2, size=(1280, num_classes))
print("The model is being fit to the data")
model.fit(
{"title": title_data, "body": body_data, "tags": tags_data},
{"priority": priority_targets, "class": dept_targets},
epochs=2,
batch_size=32,
)코드 출처 - https://www.tensorflow.org/guide/keras/functional
주요 파라미터 살펴보기
model.fit() 메서드의 주요 파라미터는 다음과 같습니다.
- epochs=2 : 전체 데이터셋을 2회 반복하여 학습합니다.
- batch_size=32 : 한 번의 학습 단계(step)마다 32개의 샘플을 묶어 처리합니다.
- 입력 딕셔너리 : 'title', 'body', 'tags' 세 가지 입력을 이름으로 매핑해 전달합니다.
- 타깃 딕셔너리 : 'priority'와 'class' 두 개의 출력에 대응하는 정답 데이터를 전달합니다.
실행 결과
Sample input data Sample target data The model is being fit to the data Epoch 1/2 40/40 [==============================] - 5s 43ms/step - loss: 1.2738 - priority_loss: 0.7043 - class_loss: 2.8477 Epoch 2/2 40/40 [==============================] - 2s 44ms/step - loss: 1.2720 - priority_loss: 0.6997 - class_loss: 2.8612 <tensorflow.python.keras.callbacks.History at 0x7f48d0809e80>
코드 설명
샘플 입력 데이터와 타깃(target) 데이터가 생성됩니다.
NumPy 배열 형태의 입력값과 타깃값을 model.fit()에 전달하여 모델 훈련을 진행합니다.