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などのレイヤーで構成され、それぞれが独自の重みを保持します。レイヤーを組み立てる方法は3つあります。単純な積み重ねにはSequential API、分岐や共有レイヤー、複数入力を含むグラフにはFunctional 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}")2回のエポック後、テスト精度は約0.96になります。また、"torch"を"jax"または"tensorflow"に変更すると、他の行を編集せずに同じモデルを別のフレームワークで実行できます。
Keras 3とそのバックエンド#
Kerasは当初、Theano、TensorFlow、CNTKなど複数のエンジン上で動作していました。2019年9月に公開されたKeras 2.3が最後のマルチバックエンド版で、その後、開発はTensorFlow内のtf.kerasへ移行しました。Keras 3ではバックエンドの独立性が復活しました。レイヤーとモデルは、各バックエンドが実装するNumPy形式の演算セットkeras.opsに基づいて記述されるため、.keras形式で保存したモデルを、どのバックエンドでも再読み込みして学習できます。PyTorchバックエンドでは、Kerasモデルはtorch.nn.Moduleでもあり、カスタムPyTorch学習ループで利用できます。また、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モデルも3つの学習バックエンドすべてで動作します。
KerasとTensorFlow、PyTorchの比較#
- TensorFlow: 独自のランタイム、コンパイラー、TensorFlow ServingやLiteRTなどのデプロイツールを備えたフルフレームワークです。多くのTensorFlowユーザーはKeras APIでモデルを記述し、TensorFlowはKerasコードを実行するエンジンの1つです。
- PyTorch: ユーザーが通常は自分で学習ループを記述するか、PyTorch Lightningなどのライブラリを使うフレームワークです。Kerasは
fitを通じてループを提供し、バックエンドとしてPyTorchも利用できるため、両者は相互排他的ではありません。 - JAX: 微分、XLAコンパイル、ベクトル化のための、組み合わせ可能な関数変換を提供するGoogleのライブラリです。JAXにはレイヤーや学習用APIが組み込まれておらず、KerasはJAX上でそれらを利用する方法の1つです。










