Keras
Keras는 신경망을 구축하고 학습하기 위한 고수준 Python API로, Keras 3부터는 동일한 코드를 JAX, TensorFlow 또는 PyTorch에서 실행할 수 있습니다.
Keras는 신경망을 구축하고 학습하기 위한 오픈 소스 고수준 Python API입니다. François Chollet가 딥러닝 실험을 빠르게 작성할 수 있도록 2015년 3월에 공개했습니다. 모델은 계층을 쌓거나 그래프로 구성하며, compile는 옵티마이저, 손실 함수, 메트릭을 설정하고 fit는 학습 루프를 실행합니다. Keras는 TensorFlow의 공식 고수준 API가 되었으며, 2023년 11월에 공개된 Keras 3는 Keras를 가져올 때 선택한 JAX, TensorFlow 또는 PyTorch에서 동일한 모델 코드를 실행합니다. 짧고 읽기 쉬운 코드 덕분에 교육, 프로토타이핑, Kaggle 대회에서 흔히 선택되며, 이미지 분류와 자연어 처리의 프로덕션 모델에도 사용됩니다.
Keras 작동 방식#
Keras 모델은 Dense, Conv2D, LSTM, MultiHeadAttention 등의 계층으로 구성되며, 각 계층은 자체 가중치를 보유합니다. Keras는 계층을 구성하는 세 가지 방법을 제공합니다. 단순한 계층 구조에는 Sequential API를, 분기, 공유 계층 또는 여러 입력이 있는 그래프에는 함수형 API를, 순전파를 완전히 제어하려면 keras.Model 서브클래싱을 사용합니다. 컴파일된 모델은 배치 처리, 역전파, 메트릭, 검증 데이터, 체크포인트 저장이나 조기 종료를 위한 콜백을 처리하는 fit으로 학습한 뒤, evaluate 및 predict로 새 데이터의 점수를 계산합니다. 다음 코드는 Keras에 포함된 MNIST 데이터셋을 사용해 간단한 숫자 분류기를 학습합니다.
import os
os.environ["KERAS_BACKEND"] = "torch" # or "jax" or "tensorflow", set before importing Keras
import keras
# MNIST handwritten digits, with pixels scaled to [0, 1]
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
# Define the model as a stack of layers
model = keras.Sequential(
[
keras.Input(shape=(28, 28)),
keras.layers.Flatten(),
keras.layers.Dense(128, activation="relu"),
keras.layers.Dense(10, activation="softmax"),
]
)
# Configure training, then train and evaluate
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"])
model.fit(x_train, y_train, epochs=2, batch_size=64, verbose=0)
loss, accuracy = model.evaluate(x_test, y_test, verbose=0)
print(f"Test accuracy: {accuracy:.3f}")두 번의 에폭 후 테스트 정확도가 약 0.96으로 출력됩니다. "torch"를 "jax" 또는 "tensorflow"로 변경하면 다른 줄은 수정하지 않고 동일한 모델을 다른 프레임워크에서 실행할 수 있습니다.
Keras 3와 백엔드#
Keras는 원래 Theano, TensorFlow, CNTK 등 여러 엔진에서 실행되었습니다. 2019년 9월에 공개된 Keras 2.3은 마지막 멀티 백엔드 릴리스였으며, 이후 개발은 tf.keras으로 TensorFlow에 통합되었습니다. Keras 3는 백엔드 독립성을 되살렸습니다. 계층과 모델은 각 백엔드가 구현하는 NumPy 스타일 연산 집합인 keras.ops를 기반으로 작성되므로, .keras 형식으로 저장한 모델을 모든 백엔드에서 다시 불러와 학습할 수 있습니다. PyTorch 백엔드를 사용하면 Keras 모델은 사용자 지정 PyTorch 학습 루프에서 사용할 수 있는 torch.nn.Module이기도 합니다. 또한 Keras 3.8부터 추론 전용 OpenVINO 백엔드를 통해 학습된 모델을 Intel 하드웨어에서 실행할 수 있습니다.
TensorFlow 2.16부터 TensorFlow를 설치하면 Keras 3도 설치되며, Keras 2가 필요한 코드는 별도의 tf_keras 패키지를 사용합니다. 모델 변환기에서도 Keras를 대상으로 합니다. Ultralytics YOLO가 YOLO26을 TensorFlow SavedModel로 내보낼 때, onnx2tf 변환기는 저장하기 전에 ONNX 그래프에서 PyTorch 네트워크를 계층별로 다시 구성해 Keras 모델로 만듭니다.
KerasHub의 사전 학습 모델#
KerasHub는 이미지용 ResNet, 텍스트용 BERT, Gemma 대규모 언어 모델 등 인기 아키텍처의 사전 학습 체크포인트가 포함된 Keras 3 구현을 제공합니다. 프리셋 이름을 지정하면 전이 학습에 바로 사용할 수 있는 모델을 불러옵니다. keras_hub.models.ImageClassifier.from_preset("resnet_50_imagenet")은 ImageNet으로 학습한 분류기를 반환하며, 위에서 사용한 것과 동일한 fit 호출로 파인튜닝해 새 데이터셋에 맞출 수 있습니다. 나머지 Keras 3 모델과 마찬가지로 KerasHub 모델은 세 가지 학습 백엔드 중 어느 것이든 사용할 수 있습니다.
Keras와 TensorFlow 및 PyTorch 비교#
- TensorFlow: 자체 런타임, 컴파일러, TensorFlow Serving 및 LiteRT와 같은 배포 도구를 갖춘 완전한 프레임워크입니다. 많은 TensorFlow 사용자는 Keras API로 모델을 작성하며, TensorFlow는 Keras 코드를 실행하는 엔진 중 하나입니다.
- PyTorch: 사용자가 일반적으로 직접 학습 루프를 작성하거나 PyTorch Lightning과 같은 라이브러리를 사용하는 프레임워크입니다. Keras는
fit을 통해 학습 루프를 제공하고 PyTorch를 백엔드로 사용할 수 있으므로 두 프레임워크는 상호 배타적이지 않습니다. - JAX: 미분, XLA 컴파일, 벡터화를 위한 합성 가능한 함수 변환 라이브러리입니다. JAX에는 기본 제공 계층 또는 학습 API가 없으며, Keras는 이를 보완하는 방법 중 하나입니다.










