この用語をシェア
概要
Kerasは、François Chollet氏が2015年に公開した高レベルニューラルネットワークAPIです。当初はTensorFlow・Theano・CNTKという複数のバックエンド上で動作するライブラリとして開発され、その後2019年のTensorFlow 2.0リリースを機にTensorFlow専用の高レベルAPI(tf.keras)として統合されました。さらに2023年には「Keras 3」として生まれ変わり、TensorFlow・PyTorch・JAXの3つを再びバックエンドとして選択できるマルチバックエンド構成に戻っています。少ないコード行数で深層学習モデルを組み立てられる直感的なAPI設計は一貫しており、初心者の学習用途から企業の本番運用まで幅広く使われています。
Kerasの根底にある設計思想は「progressive disclosure of complexity(複雑さの段階的開示)」と呼ばれるもので、シンプルなユースケースはシンプルなコードで書け、より高度な制御が必要になった場合にだけ低レベルのAPIへ降りていける、という考え方です。この思想により、数行で書けるSequential APIから、訓練ループそのものを書き換えるSubclassing APIまで、必要な自由度に応じて段階的にコードを複雑化できる点が他の多くのフレームワークとの違いとして挙げられます。
仕組み(アーキテクチャと設計思想)
主な特徴
- 使いやすさ:直感的で一貫性のあるAPI設計
- モジュール性:レイヤー、損失関数、最適化手法などの組み合わせが自由
- 拡張性:カスタムレイヤーやモデルの作成が容易
- Pythonらしさ:Pythonの自然な書き方でモデルを定義
- マルチバックエンド:Keras 3ではTensorFlow・PyTorch・JAXのいずれかを選んで実行可能
主要コンポーネント
- Sequential API:レイヤーを一直線に積み上げるシンプルなモデル構築方式。入力から出力まで一本道の構造(画像分類の全結合層やCNNの基本形など)に向く
- Functional API:複数入力・複数出力、層の分岐や合流、残差接続(ResNet的な skip connection)など、有向グラフ状の複雑なアーキテクチャに対応
- Subclassing API:
keras.Modelを継承しcall()を自前実装することで、条件分岐を含む動的な計算グラフや独自の訓練ループ(train_step()のオーバーライド)まで記述できる - Callbacks:EarlyStopping、ModelCheckpoint、ReduceLROnPlateauなど、学習中の挙動をエポック単位・バッチ単位でフックする仕組み
- Metrics / Losses:Accuracy、Precision、Recallなどの評価指標や、CrossEntropy、MSEなどの損失関数を関数名の文字列指定またはオブジェクトとして渡せる
- keras.ops:Keras 3で追加されたNumPy互換の演算API。バックエンドに依存しない書き方でカスタムレイヤーや損失関数を実装できる
compile〜fitの内部処理
Kerasのモデルはmodel.compile(optimizer, loss, metrics)でオプティマイザ・損失関数・評価指標を結びつけ、model.fit(x, y, epochs, batch_size)で学習ループを実行するという2段階の手続きが基本になっています。fit()の内部では、選択したバックエンドに応じて自動微分の仕組みが切り替わります。TensorFlowバックエンドではtf.GradientTape、PyTorchバックエンドではtorch.autograd、JAXバックエンドではjax.gradに相当する処理へディスパッチされ、ユーザー側のモデル定義コードはほぼ変更せずに済むように抽象化されています。どのバックエンドを使うかは、環境変数KERAS_BACKENDやkeras.config.set_backend()で切り替え可能です。
また、大規模モデルの分散学習向けにはkeras.distributionというAPIが用意されており、データ並列(同一モデルを複数デバイスに複製しバッチを分割)やモデル並列(モデル自体を複数デバイスに分割配置)を比較的少ないコード変更で構成できます。ただし分散学習の成熟度はバックエンドごとに差があり、TensorFlowバックエンドでは従来のtf.distribute.Strategy系の資産も引き続き利用できます。
使用例
Sequential APIによる基本的なモデル
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# Sequentialモデルの作成
model = keras.Sequential([
layers.Dense(128, activation='relu', input_shape=(784,)),
layers.Dropout(0.2),
layers.Dense(64, activation='relu'),
layers.Dropout(0.2),
layers.Dense(10, activation='softmax')
])
# モデルのコンパイル
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# モデルの要約表示
model.summary()
# 学習
history = model.fit(x_train, y_train,
batch_size=32,
epochs=10,
validation_split=0.2)
Functional APIによる複雑なモデル
import tensorflow as tf
from tensorflow.keras import layers, Model
# 入力層
inputs = layers.Input(shape=(28, 28, 1))
# 畳み込み層
x = layers.Conv2D(32, 3, activation='relu')(inputs)
x = layers.MaxPooling2D()(x)
x = layers.Conv2D(64, 3, activation='relu')(x)
x = layers.MaxPooling2D()(x)
x = layers.Conv2D(64, 3, activation='relu')(x)
# 全結合層
x = layers.Flatten()(x)
x = layers.Dense(64, activation='relu')(x)
outputs = layers.Dense(10, activation='softmax')(x)
# モデルの作成
model = Model(inputs=inputs, outputs=outputs)
# コンパイル
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
カスタムコールバック
import tensorflow as tf
from tensorflow.keras.callbacks import Callback
class CustomCallback(Callback):
def on_epoch_end(self, epoch, logs=None):
if logs.get('accuracy') > 0.95:
print(f"\n精度が95%を超えました!")
self.model.stop_training = True
# コールバックの使用
callbacks = [
tf.keras.callbacks.EarlyStopping(patience=3),
tf.keras.callbacks.ModelCheckpoint('best_model.h5'),
CustomCallback()
]
model.fit(x_train, y_train,
epochs=100,
validation_data=(x_val, y_val),
callbacks=callbacks)
Keras 3:バックエンドの切り替え
Keras 3では、スクリプトの先頭で環境変数を設定するだけで、同じモデル定義コードのままバックエンドを切り替えられます。
# 実行環境の先頭(importより前)でバックエンドを指定
import os
os.environ["KERAS_BACKEND"] = "jax" # "tensorflow" / "torch" / "jax" から選択
import keras
from keras import layers
model = keras.Sequential([
layers.Dense(128, activation="relu"),
layers.Dense(10, activation="softmax"),
])
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy")
どのAPIを選ぶべきか
| 作りたいもの | 推奨API | 理由 |
|---|---|---|
| 全結合層を積むだけの分類器 | Sequential | 層が一直線で最短コードになる |
| 複数入力・複数出力、マルチタスク学習 | Functional | 分岐・合流を持つグラフ構造を明示的に記述できる |
| GAN、独自の損失計算を持つ訓練ループ | Subclassing | train_step()を上書きして完全にカスタム制御できる |
関連技術
- TensorFlow:Kerasの主要バックエンドの一つ。Google製の計算エンジンで、TensorFlow Servingなどの本番運用ツール群と親和性が高い
- tf.data:TensorFlowバックエンド利用時に組み合わせる、大規模データの並列読み込み・前処理パイプライン
- TensorBoard:学習過程(loss/accuracy推移、計算グラフ、埋め込み等)を可視化するツール
- Keras Tuner:層の数やユニット数、学習率などのハイパーパラメータを自動探索するライブラリ
- KerasCV / KerasNLP:画像系・自然言語系のタスク向けに、事前学習済みモデルやデータ拡張処理をまとめたKeras公式の拡張ライブラリ群
- TensorFlow Serving / TensorFlow Lite:TensorFlowバックエンド利用時の本番デプロイ・モバイル/エッジ向け軽量化の受け皿
適用分野
- 画像分類・物体検出:
keras.applicationsにあるResNet50、EfficientNet、MobileNetなどの事前学習済みモデルを転移学習で利用 - 自然言語処理:KerasNLP経由でBERT系・GPT系のトークナイザやモデルを利用したテキスト分類・要約・生成
- 音声認識:スペクトログラムを入力としたCNN/RNN/Transformer系モデルの構築
- 時系列予測:LSTM、GRU、時系列向けTransformerによる需要予測・異常検知
- 推薦システム:協調フィルタリングをEmbeddingレイヤーで表現するモデル
- 生成モデル:オートエンコーダ、GAN、拡散モデルなどSubclassing APIを活かしたカスタム訓練ループの実装
メリット・デメリット
メリット
- 初心者にも理解しやすい直感的なAPI。数行のコードでモデル定義から学習までを記述できる
- 迅速なプロトタイピングが可能で、アイデア検証のサイクルを短縮できる
keras.applicationsやKerasCV/KerasNLP経由で豊富な事前学習済みモデルを利用できる- Keras 3によりTensorFlow・PyTorch・JAXのいずれの資産・実行環境とも組み合わせやすくなった
- 活発なコミュニティと公式ドキュメント・サンプル集(keras.io/examples)が充実している
デメリット
- Sequential/Functional APIの範囲では低レベルな計算の細部までは制御しづらい
- 非常に特殊・実験的なアーキテクチャでは、素のPyTorchやJAXで直接書いた方が見通しが良い場合がある
- 高レベルAPIゆえに、エラーメッセージがバックエンド内部の詳細を隠しデバッグの手がかりが分かりにくいことがある
- マルチバックエンド化に伴い、バックエンドごとに保存形式や一部機能の対応状況に差があり、移行時に確認が必要
混同されやすい用語・類似技術との違い
Keras と TensorFlow
TensorFlowは自動微分・行列演算・分散実行などを担う低レベルの計算エンジンそのものであり、Kerasはその上に乗る「モデルを組み立てるための高レベルAPI」です。2019年のTensorFlow 2.0以降はtf.kerasとしてTensorFlowにKerasが同梱され、事実上ワンセットとして扱われてきましたが、Keras 3以降は独立したpipパッケージkerasとしてTensorFlow以外のバックエンドも選べるようになった点が大きな違いです。TensorFlow 2.16以降ではtf.kerasの実体もKeras 3になっています。
Keras と PyTorch
PyTorchはそれ自体が完結したディープラーニングフレームワークで、Kerasのような別レイヤーの高レベルAPIを標準搭載していません(PyTorch Lightningなど周辺ライブラリが同種の役割を担います)。Keras 3はPyTorchをバックエンドとして選択できますが、その場合もモデル定義・学習の記述はKerasの流儀(compile/fit)に従う点がPyTorchネイティブなコードとの違いです。低レベルな訓練ループの細部を自分で制御したい場合は、素のPyTorchで書く方が向いています。
Keras と JAX
JAXはgrad・jit・vmapといった関数変換を提供する低レベルの数値計算ライブラリであり、そのままではニューラルネットワークの層やモデルの抽象化を持ちません。Flax・Haikuなど専用ライブラリがその役割を担ってきましたが、Keras 3はJAXをバックエンドとして選ぶことで、同じKeras記法のままJAXのXLAコンパイルによる高速な実行を得られる、という位置づけです。
Keras と scikit-learn
scikit-learnは決定木・SVM・線形回帰などの古典的な機械学習アルゴリズムを対象にしたfit()/predict()スタイルのAPIで、表形式データの分類・回帰・クラスタリングに向いています。Kerasはニューラルネットワーク・深層学習に特化しており、両者は対象とするアルゴリズムの層がそもそも異なります。なお、Kerasのfit()/predict()という命名はscikit-learnの設計思想から着想を得たものです。
旧Keras/tf.keras/Keras 3 の呼び名の混乱
「Keras」という名称は歴史的に3つの異なる状態を指すため混同されがちです。(1) 2015〜2019年頃のマルチバックエンド版Keras(TensorFlow/Theano/CNTKに対応)、(2) 2019〜2023年頃のTensorFlow専用のtf.keras、(3) 2023年以降のマルチバックエンドを再導入した「Keras 3」です。既存の技術記事や書籍を参照する際は、どの時代のKerasを指しているかを確認することが重要です。
実務導入のポイント
- モデル保存形式の選定:Keras 3ではネイティブ形式である
.keras(推奨)に加え、レガシーな.h5(HDF5)、TensorFlowバックエンド限定のSavedModel形式が使える。バックエンドをまたいでモデルを読み書きする予定がある場合は.keras形式を基本にするのが安全 - 既存コードの移行:TensorFlow 1系やKeras 2時代のコードをKeras 3へ移す際は、削除・変更されたAPIがないか公式の移行ガイドで確認し、まずはTensorFlowバックエンドのまま動作確認してから他バックエンドへの切り替えを検討するのが定石
- 混合精度学習:
keras.mixed_precisionを使うとfloat16/bfloat16を活用したメモリ削減・高速化が可能。GPUの世代やバックエンドによって恩恵の大きさが異なるため、事前にベンチマークを取ることが望ましい - バックエンド選定の目安:本番運用のツール資産(TensorFlow Serving、TFLiteなど)を活かしたいならTensorFlow、研究コミュニティの最新実装やエコシステムとの親和性を優先するならPyTorch、TPUやXLAコンパイルによる速度を優先するならJAXを軸に検討するのが一般的な考え方
- カスタム訓練ループの必要性判断:GANや強化学習など、標準の
fit()では表現しづらい学習手順が必要な場合のみSubclassing APIでtrain_step()を書き換える、という段階的な選択が保守性の面で有利 - ライセンス:Kerasおよびtf.kerasはApache License 2.0で提供されており、商用プロダクトへの組み込みに際して特別な制約は一般に生じない
2025〜2026年の最新動向
2025年から2026年にかけては、Keras 3で導入されたマルチバックエンド機能の安定化が進み、TensorFlow・PyTorch・JAXのいずれのエコシステムからもKerasの高レベルAPIを利用できる状態が一般的になってきています。KerasCVやKerasNLPといった応用ライブラリも継続的に更新されており、画像・テキストタスク向けの事前学習済みモデルや前処理レイヤーが拡充される傾向にあります。
また、JAXバックエンドを選択した際のXLAコンパイルによる高速化や、TPU環境との親和性を評価する声が増えており、研究用途では計算コスト削減の観点からJAXバックエンドを試す事例も見られます。一方で本番運用の現場では、既存のTensorFlow Serving・TFLiteといった周辺ツールとの連携実績の多さから、TensorFlowバックエンドを継続利用するプロジェクトも依然として多いのが実情です。フレームワーク間の主導権争いという文脈では、研究コミュニティにおけるPyTorchの採用比率の高さは変わらず大きいものの、Kerasは「学習しやすい入り口」「バックエンドを問わない共通言語」としての立ち位置を保っていると言えます。
よくある質問(FAQ)
Q. Kerasとは?
A. Kerasは高レベルの深層学習APIで、TensorFlow、PyTorch、JAXをバックエンドとして利用できます。直感的でシンプルなAPIで、プロトタイピングから本番デプロイまで対応します。
Q. Keras 3の主な変更点は?
A. マルチバックエンド対応(TensorFlow、PyTorch、JAX)、統一API、クロスフレームワークコンポーネント、NumPy互換のkeras.ops APIが主な変更点です。
Q. Kerasを使うメリットは?
A. 少ないコード量でモデル構築可能、学習曲線が緩やか、豊富なプリトレインモデル、マルチバックエンド対応で柔軟性が高い点がメリットです。
Q. KerasとTensorFlow(tf.keras)はどう違うのですか?
A. TensorFlowは計算エンジン本体、Kerasはその上に乗るモデル構築用の高レベルAPIです。TensorFlow 2.16以降ではtf.kerasの実体もKeras 3になっており、TensorFlow・PyTorch・JAXいずれのバックエンドも選べる点が旧来のtf.kerasとの違いです。
Q. 商用プロダクトに組み込んでも問題ありませんか?
A. KerasはApache License 2.0で提供されており、商用利用に際して一般に特別な制約は生じません。組み込む前には利用しているバックエンド(TensorFlow/PyTorch/JAX)側のライセンス条項もあわせて確認することをおすすめします。
Q. PyTorchが主流と聞きますが、Kerasは今も学ぶ価値がありますか?
A. 研究コミュニティではPyTorchの採用例が多い一方、Kerasは学習コストの低さと段階的に複雑さを増やせる設計から、深層学習の入門やプロトタイピング、社内ツールの迅速な開発に今も適しています。Keras 3であれば、学んだ知識をPyTorchやJAXのバックエンド選択にもそのまま活かせます。
