Keras(ケラス)は、ニューラルネットワークの層を積み重ねてモデルを書くための、Python製の深層学習APIです。計算そのものはTensorFlow・JAX・PyTorchのいずれかが担い、Kerasはその上でモデルの構造と学習の手順を記述します。2026年10月時点の最新版は2026年7月29日公開のKeras 3.15.1で、Python 3.11以上が必要です。この記事では、TensorFlowとの違い、tf.kerasがKeras 3に切り替わった経緯、バックエンドの切り替え方、Keras 2のコードを動かすときに壊れる点を、3.15.1での実測結果とあわせて説明します。
まとめ:Kerasの要点
- 正体:モデルを記述する高レベルAPI。行列演算やGPU実行はバックエンド(TensorFlow・JAX・PyTorch)が担う。
- 読み方:ケラス。古代ギリシャ語で「角(つの)」を意味するκέραςに由来する。
- TensorFlowとの違い:TensorFlowは計算エンジン、Kerasはその上の記述層。TensorFlow 2.16以降は
tf.kerasもKeras 3を指す。 - 現行版:Keras 3.15.1(Python 3.11以上)。Python 3.10の環境では3.12系までしか入らない。
- Keras 2からの移行:
model.save("ディレクトリ名")はValueErrorになる。保存は.keras、SavedModelが要るならmodel.export()。 - 開発は継続中:止まったのはTheanoとCNTK、保守中心に移ったのはTensorFlow本体。Keras自体は2026年にも新版が出ている。
以下、TensorFlowとの関係から順に根拠を示します。
Kerasとは:深層学習モデルを書くための高レベルAPI
Kerasは「Deep Learning for humans」を掲げるオープンソースのライブラリで、作者はフランソワ・ショレ氏です。Keras 1.0の公式告知によると、初公開は2015年3月下旬です。開発者はDense(全結合層)やConv2D(畳み込み層)を並べて構造を宣言し、compileで損失関数と最適化手法を決め、fitで学習させます。勾配の計算は各バックエンドの自動微分が担い、Kerasはその上で「バッチに分けて順に学習させる」手順をfit1行にまとめています。学習ループを自分で書かずに済むのが、PyTorchや生のTensorFlowとの一番の違いです。
ライセンスはApache License 2.0で、商用利用もできます。ショレ氏は2024年11月にGoogleを離れましたが、Googleの告知には、本人が引き続きプロジェクトに貢献してロードマップを監督すること、GoogleのKerasチームも開発を続けることが書かれています。
読み方は「ケラス」:名前の由来はギリシャ語の「角」
Kerasは「ケラス」と読みます。keras.ioのAboutページによると、κέρας(keras)は古代ギリシャ語で「角」を意味し、『オデュッセイア』の一節に由来します。夢の精霊のうち、偽りの夢は象牙の門を、実現する未来を告げる夢は角の門を通って地上に来る、という話です。Kerasは当初、ONEIROSという研究プロジェクトの一部として開発されました。ONEIROSも夢の精霊(Oneiroi)から取った名前です。
KerasとTensorFlowの違い
KerasとTensorFlowは、どちらかを選ぶ競合製品ではありません。Kerasは「何を計算するか」を書く層、TensorFlowは「どう計算するか」を担うエンジンの一つです。
| 観点 | Keras 3 | TensorFlow |
|---|---|---|
| 役割 | モデル記述・学習のAPI | テンソル計算エンジン |
| 最新版(2026-10) | 3.15.1 | 2.21.0 |
| 動く計算基盤 | TensorFlow・JAX・PyTorch | TensorFlowのみ |
| import | import keras |
import tensorflow as tf |
| 開発方針 | 新機能の追加が続く | 保守・依存更新が中心 |
TensorFlowは2026年3月6日の2.21の告知で、今後はセキュリティとバグの修正、依存関係の更新に絞ると表明し、生成AIの新規開発にはKeras 3・JAX・PyTorchを勧めています。TensorFlow本体の現状はTensorFlowとは?読み方・Pythonでの入れ方と2.21の保守方針【2026年10月】にまとめています。
tf.kerasとkerasの関係:TensorFlow 2.16での既定版の変更
Kerasは2019年のKeras 2.3系(2.3.0が9月、2.3.1が10月)まではTheano・CNTK・TensorFlowの複数のエンジンに対応していましたが、2020年6月の2.4.0のリリースノートで複数エンジン対応の打ち切りが告げられ、以後はTensorFlowに組み込まれたtf.kerasが本流になりました。2023年7月に試作版のKeras Core(PyPIの0.1.0)が公開され、2023年11月28日のKeras 3.0.0で、再び複数のバックエンドに対応しました。
TensorFlowの側では、2.16.1のリリースノートで「Keras 3.0 will be the default Keras version」とされ、pip install tensorflowでKeras 3が入るようになりました。TensorFlow 2.21.0とKeras 3.15.1を同じ環境に入れて確かめると、tf.keras.__version__は3.15.1を返しました。つまり今のtf.kerasは、独立したKeras 3そのものです。
Keras 2のコードをそのまま動かしたい場合は、keras.ioの導入ガイドにあるとおり、tf_kerasパッケージを入れてから、TensorFlowをimportする前に環境変数TF_USE_LEGACY_KERAS=1を設定します。tf_kerasを入れずにこの変数だけ設定すると、tf.kerasを参照した時点で「ImportError: Keras cannot be imported. Check that it is installed.」となりました(TensorFlow 2.21.0で確認)。
Keras 3のバックエンド設定と切り替え
PyPIのKeras 3.15.1の説明が選択肢として挙げるバックエンドはtensorflow・jax・torch・openvinoの4つです。keras.ioのKeras 3紹介によると、OpenVINOは3.8で加わった推論専用のバックエンドです。この4つとは別に、実装にはnumpyバックエンドもありますが、こちらも推論専用です。
KERAS_BACKENDとkeras.jsonの設定
バックエンドは、環境変数KERAS_BACKENDか、設定ファイル~/.keras/keras.jsonのbackendで指定します。どちらもimport kerasより前に決めておくのが基本です。import後に変える手段としてkeras.config.set_backend()もありますが、公式ドキュメントは「dangerous」と警告しています。切り替え前に作ったレイヤーやテンソルはそのままでは使えず、Kerasのモジュールをimportし直す必要があるためです。両方を設定した場合は、環境変数が優先されます(3.15.1のkeras/src/backend/config.pyの処理順で確認)。
シェルで指定する場合は、その端末から起動するPythonすべてに効きます。
export KERAS_BACKEND="jax"
スクリプトごとに指定する場合は、import kerasより前に環境変数を書き換えます。
import os
os.environ["KERAS_BACKEND"] = "torch"
import keras
print(keras.backend.backend()) # torch
keras.jsonは初回のimport時に自動で作られます。3.15.1で作られた中身は次のとおりで、backendの既定値はtensorflowです。
{
"floatx": "float32",
"epsilon": 1e-07,
"backend": "tensorflow",
"image_data_format": "channels_last"
}
KERAS_BACKEND=jaxで起動したときも、ファイルのbackendはtensorflowのまま作られ、実行時のバックエンドだけがjaxになりました。設定ファイルを見て「TensorFlowで動いている」と判断すると間違えるので、確認はkeras.backend.backend()で行ってください。
同じコードを3つのバックエンドで学習させた結果
次の章のコードを、KERAS_BACKENDだけを変えてDocker上のPython 3.12.15(CPU)で実行しました。コードは1行も変えていません。
| KERAS_BACKEND | 実行時の版 | fit | 第10エポックの訓練正解率 | .keras保存 |
|---|---|---|---|---|
| jax | jax 0.12.0.1 | 成功 | 0.7170 | 29,510バイト |
| torch | torch 2.14.1(CPU版) | 成功 | 0.6975 | 29,542バイト |
| tensorflow | tensorflow-cpu 2.21.0 | 成功 | 0.7075 | 29,515バイト |
| numpy | numpy 2.5.4 | NotImplementedError | — | — |
keras.utils.set_random_seed(0)で乱数を固定しても、正解率はバックエンドごとに少しずつ違いました。初期値の生成やシャッフルの実装がバックエンドで異なるためです。バックエンドを変えて精度を比べるときは、1回の実行ではなく複数回の平均で比べてください。numpyバックエンドはfitの時点で「fit not implemented for NumPy backend.」と止まり、学習には使えません。
研究コードの多くがPyTorchで書かれているならtorch、TPUやXLAで学習を速くしたいならjax、TensorFlow ServingやLiteRTへ載せる既存の運用があるならtensorflow、と分けるのが自然です。PyTorch単体との違いはPyTorchとは?読み方・できること・TensorFlowとの違いと入れ方【2.14対応】で扱っています。
Kerasのインストールと最小モデルの実行
対応Python(3.11以上)とpipでの導入
PyPIのkerasは、3.13.0(2025年12月17日)からPython 3.11以上を要求しています。Python 3.10の環境でpip install kerasを実行すると、3.10向けに保守が続いている3.12系(2026年7月29日の3.12.4が最新)が入ります。Keras本体はバックエンドを含まないので、使うものを1つ以上一緒に入れます。
python -m venv .venv
source .venv/bin/activate
pip install keras jax # JAXで使う場合
# pip install keras torch # PyTorchで使う場合
# pip install keras tensorflow # TensorFlowで使う場合
export KERAS_BACKEND="jax" # torchを入れたなら "torch"
python -c "import keras; print(keras.__version__, keras.backend.backend())"
KERAS_BACKENDを設定せずにTensorFlow以外のバックエンドだけを入れると、既定のtensorflowが選ばれてimport kerasが失敗します。続く最小コードも、同じ端末から実行してください。
GPUで動かす場合は、各バックエンドのGPU版を入れます。Kerasの公式ガイドは、CUDAのバージョンがぶつからないようにバックエンドごとに環境を分けることを勧めています。
Kerasによる二値分類の最小コード
外部データをダウンロードしない二値分類の例です。前の章の実測は、このコードに保存と読み込みの確認を足したスクリプト(KERAS_BACKEND以外は同一)で行いました。
import numpy as np
import keras
from keras import layers
# 20個の特徴量の合計が10を超えるかを当てる練習用データ
rng = np.random.default_rng(0)
x = rng.random((2000, 20)).astype("float32")
y = (x.sum(axis=1) > 10).astype("int32")
keras.utils.set_random_seed(0)
model = keras.Sequential([
keras.Input(shape=(20,)),
layers.Dense(32, activation="relu"),
layers.Dense(1, activation="sigmoid"),
])
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
history = model.fit(x, y, epochs=10, batch_size=64, verbose=0)
print(keras.backend.backend(), model.count_params()) # 例: jax 705
print(history.history["accuracy"][-1]) # 第10エポックの訓練正解率
model.save("model.keras")
restored = keras.saving.load_model("model.keras")
パラメータ数は705(20×32+32+32×1+1)です。keras.Inputで入力の形を先に渡しておくと、model.summary()やcount_params()を学習前に呼べます。
入門モデルでよく使うDense・Conv2D・LSTMなどの層
keras.layersには多くの層があります。画像・時系列・文章の入門的なモデルでは、まず次の層がよく使われます。
Dense:全結合層。分類・回帰の出力と中間層の基本。Conv2D:画像の局所的な特徴を拾う畳み込み層。LSTM・GRU:時系列や文章を扱う再帰層。仕組みとKerasでの書き方はLSTMとは?仕組み・数式とRNN・GRU・Transformerとの違い、PyTorch・Keras実装で詳しく解説しています。Dropout:学習時に一部の出力を0にして過学習を抑える。Embedding:単語IDなどの整数をベクトルに変える。
層の重ね方や活性化関数の役割など、ニューラルネットワーク自体の仕組みはニューラルネットワークとは?仕組み・種類・PyTorch実装まで実装目線で解説で扱っています。
Keras 2のコードをKeras 3で動かすと壊れる点
TensorFlow専用だった時期(2.4〜2.15)のKeras 2向けに書かれた解説やコードは、Keras 3でもその多くがそのまま動きます。ただし次の2点は、写したままだと止まったり気づかずに挙動が変わったりします。
model.saveでディレクトリを指定するとValueError
Keras 2ではmodel.save("my_model")のように拡張子なしで書くと、TensorFlowのSavedModel形式で保存されました。Keras 3.15.1では3つのバックエンドすべてで次のエラーになりました。
ValueError: Invalid filepath extension for saving. Please add either a `.keras` extension
for the native Keras format (recommended) or a `.h5` extension. Use `model.export(filepath)`
if you want to export a SavedModel for use with TFLite/TFServing/etc.
保存は.keras(モデル構成・重み・オプティマイザーの状態をまとめたZIP)にします。.h5も保存はできますが、3.15.1のソースでは旧形式(legacy)扱いです。推論用にSavedModelが必要なら、model.exportを使います。formatには"tf_saved_model"(既定)・"onnx"・"openvino"・"litert"・"torch"を指定できます。ONNXで書き出したモデルの扱いはONNXとは?読み方・.onnxファイルの中身・変換とONNX Runtimeでの推論【onnx 1.23/ORT 1.31対応】を参照してください。
from tensorflow import kerasで書いた旧コードへの影響
from tensorflow import kerasと書いた古いコードも、TensorFlow 2.16以降ではKeras 3で動きます。importが通るので気づきにくく、上の保存処理や、Keras 2にしか無い引数を渡した箇所で初めて落ちます。移行の手間をかけられない既存コードは、前の章のtf_kerasとTF_USE_LEGACY_KERAS=1で当面しのぎ、新しく書くコードはimport kerasに揃えるのが安全です。変更点の全体は公式の移行ガイドにまとまっています。
「Kerasは開発終了」は誤り
「keras 開発終了」と検索されることがありますが、Kerasの開発は続いています。PyPIでは2026年だけでも3.14.0(4月3日)、3.15.0(6月24日)、3.15.1(7月29日)が公開され、学習済みモデルを集めたKerasHubも2026年9月18日に0.32.0が出ています。KerasHubは、以前のKerasNLPとKerasCVを1つにまとめたライブラリです。
誤解の元は3つあります。1つ目は、2020年の2.4.0から単体パッケージがtf.kerasへの転送役になり、更新が止まったように見えた時期です。2つ目は、旧バックエンドの終了です。開発元のMILAは2017年9月28日にTheanoの開発を1.0で終えると発表し、MicrosoftはCNTK 2.7(2019年3月)を最後の主要リリースとしました。いずれもKerasが使っていたエンジンの終了で、Keras本体の終了ではありません。3つ目は、TensorFlow本体の保守中心への移行です。止まったのはTensorFlowの新機能開発で、Kerasではありません。
これから学ぶ、または新しく作るなら、Keras 3を前提にしてください。Keras 2の解説記事を参考にするときは、拡張子なしのmodel.save()によるSavedModel保存や、Keras 3で削られたAPIを使っていないかを確かめます。
PyTorch・JAXとの比較:Kerasを選ぶ場面と避ける場面
| フレームワーク | 位置づけ | 書き方 | 向く用途 |
|---|---|---|---|
| Keras 3 | 高レベルAPI | 層を宣言してfit | 標準的なモデルの試作・教育 |
| PyTorch | 計算エンジン兼API | 学習ループを自分で書く | 研究・新しい手法の実装 |
| JAX | 計算エンジン | 関数変換(jit・grad) | TPU・大規模学習 |
| TensorFlow | 計算エンジン | tf.function・グラフ | 既存の本番運用の保守 |
Kerasが向くのは、画像分類や表データの回帰など定番の構造を短く書きたいとき、またチームのメンバーがPyTorchとJAXに分かれていて同じモデル定義を共有したいときです。同じモデル定義のままバックエンドを替えられることは、現行の主要な深層学習ライブラリの中でKeras 3を選ぶ大きな理由になります。
Kerasでもtrain_stepを上書きすれば、勾配の加工や独自の更新規則をfitの中に書けます。ただ、上書きしたtrain_stepの中身はバックエンドごとの書き方(PyTorchならtorchのテンソル操作)になり、バックエンドを替えられる利点が薄れます。学習の内側を毎回作り込む研究が中心で、fitやコールバックといった高レベル機能をほとんど使わないなら、最初からPyTorchで学習ループを書いたほうが見通しがよくなります。Caffeのように開発が止まったフレームワークからの移行先を探している場合は、Caffeとは?TensorFlowとの違いと.caffemodelをONNX・TensorFlowへ移す手順で移し方を説明しています。KerasやPyTorchで作ったモデルを業務システムに組み込むところまで任せたい場合は、一創の機械学習モデル開発でも相談を受けています。
よくある質問
Kerasの読み方と意味は?
「ケラス」と読みます。古代ギリシャ語で「角」を意味するκέρας(keras)に由来し、『オデュッセイア』で「実現する夢が角の門を通る」とされる話から取られています。
Kerasは無料ですか?ライセンスは?
無料で、ライセンスはApache License 2.0です。商用利用もでき、ソースコードはGitHubのkeras-team/kerasで公開されています。
KerasとTensorFlowはどちらを使えばよいですか?
対立する選択肢ではありません。モデルはKerasで書き、計算をTensorFlow・JAX・PyTorchのどれで行うかを選びます。Googleは新しい生成AIの開発にはKeras 3・JAX・PyTorchを勧めています。一方、TensorFlow ServingやLiteRTなどTensorFlow前提の配信基盤を使い続けるなら、バックエンドはtensorflowのままにするのが自然です。
Keras 2とKeras 3のどちらで学べばよいですか?
Keras 3です。TensorFlow 2.16以降はtf.kerasもKeras 3を指すため、Keras 2の書き方は既存コードを保守するときだけ必要になります。
Kerasの案件や求人はありますか?
求人サイトで探すときは「Keras」単独ではなく、「TensorFlow」「深層学習」「機械学習エンジニア」と組み合わせて検索すると見つけやすくなります。Kerasはバックエンドと組み合わせて使うため、Kerasの書き方に加えてPyTorchかJAXの基本も押さえておくと、応募できる範囲が広がります。