TensorFlow는 Google이 제공하는 머신러닝 프레임워크입니다. 오픈소스로 공개되어 있으며, Python과 함께 사용하여 알고리즘, 딥러닝 애플리케이션 등을 구현할 수 있습니다. 학술 연구부터 실제 프로덕션 환경까지 폭넓게 활용되고 있습니다.
Keras는 ONEIROS(Open-ended Neuro-Electronic Intelligent Robot Operating System, 개방형 신경 전자 지능형 로봇 운영체제) 프로젝트의 연구 과정에서 개발되었습니다. Keras는 Python으로 작성된 딥러닝 API로, 머신러닝 문제 해결을 돕는 생산적인 인터페이스를 갖춘 고수준(High-level) API입니다.
Keras는 TensorFlow 프레임워크 위에서 동작하도록 설계되었으며, 빠르게 실험할 수 있도록 돕습니다. 머신러닝 솔루션을 개발하고 캡슐화하는 데 필수적인 추상화 계층과 빌딩 블록을 제공합니다.
Keras는 확장성이 뛰어나고 크로스 플랫폼을 지원합니다. 따라서 TPU나 GPU 클러스터에서 실행할 수 있으며, Keras 모델은 웹 브라우저나 모바일 기기에서도 동작하도록 내보낼 수 있습니다.
Keras는 이미 TensorFlow 패키지에 포함되어 있으므로, 아래 코드 한 줄로 간단히 불러올 수 있습니다.
import tensorflow
from tensorflow import keras
Keras 함수형 API(Functional API)는 순차형(Sequential) API로 만든 모델보다 훨씬 유연한 모델 생성을 지원합니다. 함수형 API는 비선형 토폴로지를 가진 모델을 다룰 수 있고, 레이어를 공유하거나 여러 입력과 출력을 처리하는 것도 가능합니다. 일반적으로 딥러닝 모델은 여러 레이어로 구성된 방향성 비순환 그래프(DAG) 형태를 띠며, 함수형 API는 바로 이 레이어 그래프를 손쉽게 구축할 수 있게 해줍니다.
아래 코드는 Google Colaboratory에서 실행됩니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있는 환경으로, 별도의 설정이 필요 없고 GPU에 무료로 접근할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다. 다음은 Python을 사용하여 레이어 인스턴스의 생성자 인수를 반환하는 코드입니다.
예제
class CustomDense(layers.Layer):
def __init__(self, units=32):
super(CustomDense, self).__init__()
self.units = units
def build(self, input_shape):
self.w = self.add_weight(
shape=(input_shape[-1], self.units),
initializer="random_normal",
trainable=True,
)
self.b = self.add_weight(
shape=(self.units,), initializer="random_normal", trainable=True
)
def call(self, inputs):
return tf.matmul(inputs, self.w) + self.b
def get_config(self):
return {"units": self.units}
inputs = keras.Input((4,))
outputs = CustomDense(10)(inputs)
model = keras.Model(inputs, outputs)
print("아래 함수는 레이어 인스턴스의 생성자 인수를 반환합니다")
config = model.get_config()
new_model = keras.Model.from_config(config, custom_objects={"CustomDense": CustomDense})
코드 출처 − https://www.tensorflow.org/guide/keras/functional
출력
아래 함수는 레이어 인스턴스의 생성자 인수를 반환합니다
설명
'CustomDense'라는 이름의 클래스를 정의하여 모델에 가중치를 추가하는 역할을 담당합니다.
'get_config' 메서드를 추가로 정의하여, 레이어의 모든 인스턴스에 대한 생성자 인수를 딕셔너리 형태로 반환합니다.
모델의 입력 레이어를 정의합니다.
이후 모델을 구성하고, get_config 함수를 호출하여 설정 정보를 가져옵니다. 이렇게 얻은 config를 from_config에 전달하면 custom_objects와 함께 커스텀 레이어를 포함한 모델을 그대로 재구성할 수 있습니다.