- 技術 💻
TensorFlowとは|使い方・インストール・PyTorchとの違いを実行例で
結論
TensorFlow は Google が公開した機械学習のライブラリで、Keras のAPIを使うと「層を並べる→compile→fit→evaluate→save」の数行でモデルを学習し、保存して読み込めます。PyTorch との違いは「学習ループを自分で書くか、fit に任せるか」に集約されます。
この記事でわかること
- TensorFlow 2.21(CPU版)を pip で入れ、Keras 3 で学習→評価→保存→読み込みを実行した出力
- 同じモデルを PyTorch で書いた対応表と、CPU での速度の実測
- Python の版・AVX・tensorflow-gpu などインストールエラーの原文と直し方
TensorFlow は、Keras という書きやすいAPIの下に、計算の実体(テンソルの演算・自動微分・CPU/GPU の実行)が重なった構造です。学習したモデルは、サーバー・スマートフォン・ブラウザ向けの形式に書き出せます。
flowchart TD
K[Keras 3 の API<br>Sequential・compile・fit] --> B[TensorFlow 本体<br>テンソル・自動微分・tf.function]
B --> H[CPU / GPU / TPU]
B --> E[書き出し<br>SavedModel・LiteRT<br>TensorFlow.js]
よく調べられることの答えを先にまとめます。
| 知りたいこと | 答え | 詳しい節 |
|---|---|---|
| tensorflow とは | Google 製の機械学習ライブラリ。深層学習の学習・推論・配信まで一式 | TensorFlowとは |
| tensorflow インストール | pip install tensorflow(CPU だけなら tensorflow-cpu) |
TensorFlowのインストール |
| 対応する Python の版 | 2.21 は 3.10〜3.13。3.9 は 2.20 まで(公式) | Pythonの版とOS・GPUの要件 |
| tensorflow 使い方 | Keras で層を並べ、compile→fit→evaluate→save | TensorFlowの使い方 |
| tensorflow pytorch 違い | fit に任せる TensorFlow、ループを自分で書く PyTorch | TensorFlowとPyTorchの違い |
| Keras と TensorFlow の関係 | Keras 3 は独立したパッケージ。TF 2.16 以降の tf.keras は Keras 3 | Keras 3の位置づけ |
| GPU を使う条件 | Linux/WSL2 の NVIDIA GPU。tensorflow[and-cuda](公式) |
Pythonの版とOS・GPUの要件 |
| No matching distribution と出た | Python の版に対応する TensorFlow が無い。版の組み合わせを合わせる | インストールエラーの原文 |
確認環境:Ubuntu 24.04(Linux x86_64、2コア・メモリ 8GB・GPU なし。CPU は AVX2・AVX-512 対応)の上で、Python 3.13.18 の venv に pip install tensorflow-cpu で tensorflow-cpu 2.21.0(Keras 3.15.1・NumPy 2.5.4・protobuf 7.36.2)を入れました。学習データは scikit-learn 1.9.1 に同梱の手書き数字 digits(8×8 ピクセル・1,797 枚)を使い、全結合モデルと CNN の学習・評価・保存(.keras・weights.h5・SavedModel・TFLite)・読み込みを実行しています。MNIST は配布元(storage.googleapis.com)への接続がこの環境では拒否されたため、そのエラーの原文だけを載せています。PyTorch は、公式の配布元(download.pytorch.org)への接続が拒否され、PyPI の Linux 版は CUDA 用のライブラリを含む大きさのため入れていません。PyTorch 側のコードは公式チュートリアル(Quickstart)のAPIに沿って書いたもので、この環境では実行していません。対応 OS・Python の版・GPU の要件・Keras 3 の扱いは TensorFlow と Keras の公式ドキュメントで確かめました。図は mermaid で描画を確かめています(確認日 2026年10月29日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「TensorFlowとは|使い方・インストール・PyTorchとの違いを実行例で」
TensorFlowとは(できること・Kerasとの関係)
この節では、TensorFlow が何をするライブラリで、どこまでを担うのかが分かります。
TensorFlow は、Google が 2015年に公開した、機械学習(特に深層学習)のためのオープンソースのライブラリです。 名前のとおり「テンソル(多次元配列)」が「流れる(flow)」計算を組み立て、CPU・GPU・TPU で実行します。モデルの学習だけでなく、学習したモデルをサーバーや端末で動かすための道具まで含んでいるのが特徴です。
テンソルの計算
NumPy に似た配列演算を、CPU・GPU で同じコードのまま実行する。
tf.constant・tf.matmul
自動微分
損失を小さくする向きを自動で計算する。学習の中核。
tf.GradientTape
Keras のモデル API
層を並べ、compile と fit で学習する。TensorFlow の標準の書き方。
keras.Sequential
配信・端末・ブラウザ
SavedModel(TF Serving)、LiteRT(旧 TensorFlow Lite)、TensorFlow.js に書き出す。
model.export・TFLite
TensorFlow 2 系は、書いた行がその場で実行される「Eager 実行」が既定で、Python の普通のコードのように試せます。速度が要る部分だけ tf.function でグラフ(計算の設計図)にまとめます。1 系の「先にグラフを組んでから Session で実行する」書き方は、2 系では使いません。
ニューラルネットワークそのものの仕組み(重み・活性化関数・誤差逆伝播)は、関連記事「ニューラルネットワークとは|仕組み・学習・AttentionをNumPyで実演」で扱っています。
TensorFlowのインストール(pip・tensorflow-cpu・確認コマンド)
この節では、pip で入れる手順と、入ったことを確かめるコマンド、入る大きさが分かります。
仮想環境を作ってから pip install tensorflow です。GPU を使わない機械なら tensorflow-cpu にすると、GPU 用の部分を含まない分だけ軽くなります。 公式ドキュメントは、CPU 専用ビルドには tensorflow-cpu という名前の pip パッケージを使う、と書いています。
仮想環境を作る
python3 -m venv venv → source venv/bin/activate(Windows は venv\Scripts\activate)。TensorFlow は依存パッケージが多いので、システムの Python に直接入れない。
pip を新しくして入れる
pip install --upgrade pip → pip install tensorflow(CPU だけなら pip install tensorflow-cpu)。公式の要件は pip 19.0 以上(macOS は 20.3 以上)。
動くことを確かめる
公式の確認コマンド python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"。テンソルが表示されれば成功。
手元で入れたときの pip の最後の行と、確認コマンドの出力です(I0000 … で始まる情報ログは省いています)。
$ pip install tensorflow-cpu
...
Successfully installed absl-py-2.5.1 astunparse-1.6.3 ... h5py-3.14.0 keras-3.15.1 ... numpy-2.5.4 ... protobuf-7.36.2 ... tensorflow-cpu-2.21.0 ...
$ python3 -c "import tensorflow as tf; print(tf.__version__); print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
2.21.0
tf.Tensor(-450.0617, shape=(), dtype=float32)
$ python3 -c "import keras; print(keras.__version__, keras.backend.backend())"
3.15.1 tensorflow
$ python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices())"
[PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')]
import のときに出る次の2行は、エラーではなく情報です。1行目は oneDNN(Intel の高速化ライブラリ)が有効で、計算順の違いで結果の端数がわずかに変わることがあるという知らせ、2行目はこのバイナリが使っていない CPU 命令の一覧です。
I0000 ... port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
I0000 ... cpu_feature_guard.cc:227] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 AVX512F AVX512_VNNI AVX512_BF16 AVX512_FP16 AVX_VNNI AMX_TILE AMX_INT8 AMX_BF16 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
表示を減らしたいときは、import tensorflow より前に環境変数 TF_CPP_MIN_LOG_LEVEL=1(情報を消す)か 2(警告も消す)を設定します。仮想環境の作り方は、関連記事「Python venvの使い方|仮想環境の作成・有効化・削除をOS別にコピペ」で扱っています。
対応するPythonの版とOS・GPUの要件(公式)
この節では、どの Python・OS で動き、GPU を使うには何が要るのかが、公式ドキュメントの記述で分かります。
TensorFlow 2.21 が対応する Python は 3.10〜3.13 です。 公式のインストールページは「TensorFlow 2.21 以降、Python 3.9 はサポートされなくなりました」と警告しています。版ごとの対応は、公式の「テスト済みのビルド構成」の表が確実です。
| TensorFlow | Python | GPU 版の CUDA / cuDNN |
|---|---|---|
| 2.21.0 | 3.10〜3.13 | 12.5 / 9.3 |
| 2.20.0 | 3.9〜3.13 | 12.5 / 9.3 |
| 2.19.0・2.18.0 | 3.9〜3.12 | 12.5 / 9.3 |
| 2.17.0・2.16.1 | 3.9〜3.12 | 12.3 / 8.9 |
OS ごとの扱いも公式ページの記述が基準です。
| OS | 公式の記述(要点) | GPU |
|---|---|---|
| Linux(Ubuntu 16.04 以降) | 公式にサポートするのは Ubuntu のみ | NVIDIA GPU。pip install 'tensorflow[and-cuda]' で CUDA のライブラリごと入る |
| Windows(WSL2) | Windows 10 19044 以降 | WSL2 の中で Linux と同じ手順 |
| Windows(ネイティブ) | 2.10 が GPU を使える最後の版。2.11 以降は CPU のみ。CPU 版は Intel が構築・配布 | 使えない(DirectML のプラグインは別) |
| macOS(12.0 以降・Apple シリコン含む) | pip install tensorflow。公式の GPU サポートは無い |
無し(Apple の Metal プラグインは別) |
- GPU が無くても TensorFlow は動きます。 この記事の実行はすべて CPU です。小さなモデルや推論だけなら CPU で間に合い、画像・言語の大きなモデルの学習で GPU が要ります。
- 公式ページには「TensorFlow のバイナリは AVX 命令を使うため、以前の CPU では動作しない場合があります」という注記があります。2011年以前の CPU や、AVX を持たない一部の省電力 CPU では、import のときに落ちます。
- GPU を手元に用意せずに試すなら、ブラウザで GPU を使える Google Colab が手軽です。関連記事「Google Colabとは|使い方・GPU・料金・制限とエラーの直し方」で扱っています。
TensorFlowの使い方:Kerasで学習→評価→保存→読み込み
この節では、TensorFlow の標準の書き方である Keras で、モデルを学習し、評価し、保存して読み込む一連の流れが、実行した出力つきで分かります。
データを用意し、層を並べ、compile で学習の設定をし、fit で学習、evaluate で評価、save で保存します。 8×8 ピクセルの手書き数字 1,797 枚(scikit-learn の digits)を 10 種類に分類する全結合モデルを作りました。
import numpy as np
import keras
from keras import layers
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
keras.utils.set_random_seed(42)
# 1. データ(8x8 の手書き数字 1,797 枚。0〜16 の値を 0〜1 に)
d = load_digits()
x = d.images.astype("float32") / 16.0
x_train, x_test, y_train, y_test = train_test_split(
x, d.target, test_size=0.2, random_state=42, stratify=d.target)
# 2. モデル(層を順に並べる)
model = keras.Sequential([
layers.Input(shape=(8, 8)),
layers.Flatten(), # 8x8 → 64
layers.Dense(128, activation="relu"), # 全結合 128
layers.Dropout(0.2), # 過学習を抑える
layers.Dense(10, activation="softmax"), # 10 クラスの確率
])
model.summary()
# 3. 学習の設定(最適化・損失・指標)
model.compile(optimizer="adam",
loss="sparse_categorical_crossentropy", # ラベルが整数のとき
metrics=["accuracy"])
# 4. 学習
hist = model.fit(x_train, y_train, epochs=30, batch_size=32,
validation_split=0.1, verbose=2)
# 5. 評価と推論
loss, acc = model.evaluate(x_test, y_test, verbose=0)
print("test accuracy", round(acc, 4))
pred = model.predict(x_test[:5], verbose=0).argmax(axis=1)
print("pred", pred, "true", y_test[:5])
# 6. 保存と読み込み
model.save("digits.keras") # Keras 3 の標準形式
m2 = keras.saving.load_model("digits.keras")
print("loaded accuracy", round(m2.evaluate(x_test, y_test, verbose=0)[1], 4))
実行した出力
model.summary() は、層ごとの出力の形とパラメーター数を表にします。64 入力 × 128 + 128 のバイアスで 8,320、128 × 10 + 10 で 1,290、合計 9,610 個です。
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ flatten (Flatten) │ (None, 64) │ 0 │
│ dense (Dense) │ (None, 128) │ 8,320 │
│ dropout (Dropout) │ (None, 128) │ 0 │
│ dense_1 (Dense) │ (None, 10) │ 1,290 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 9,610 (37.54 KB)
Trainable params: 9,610 (37.54 KB)
Non-trainable params: 0 (0.00 B)
fit の出力です(途中のエポックを省いています)。accuracy・loss が訓練データ、val_ が付いたものが検証用に分けた 10% のデータに対する値です。
Epoch 1/30
41/41 - 1s - 26ms/step - accuracy: 0.4215 - loss: 1.9908 - val_accuracy: 0.8125 - val_loss: 1.6091
Epoch 2/30
41/41 - 0s - 10ms/step - accuracy: 0.7889 - loss: 1.3471 - val_accuracy: 0.8750 - val_loss: 1.0436
Epoch 5/30
41/41 - 0s - 3ms/step - accuracy: 0.9033 - loss: 0.4762 - val_accuracy: 0.9375 - val_loss: 0.4003
Epoch 10/30
41/41 - 0s - 4ms/step - accuracy: 0.9482 - loss: 0.2259 - val_accuracy: 0.9444 - val_loss: 0.2153
Epoch 20/30
41/41 - 0s - 4ms/step - accuracy: 0.9675 - loss: 0.1202 - val_accuracy: 0.9722 - val_loss: 0.1338
Epoch 30/30
41/41 - 0s - 4ms/step - accuracy: 0.9830 - loss: 0.0818 - val_accuracy: 0.9653 - val_loss: 0.1097
fit 7.1 s
evaluate 0.09 s loss 0.0969 accuracy 0.9778
predict 5 0.101 s pred [5 2 8 1 7] true [5 2 8 1 7]
digits.keras 140747 bytes
loaded accuracy 0.9778 same pred True
| 段階 | 結果 | 読み取れること |
|---|---|---|
| 学習前(1エポック目の途中) | 訓練の正解率 42% | 重みは乱数から始まる |
| 5エポック | 訓練 90.3%・検証 93.8% | 損失が 1.99 → 0.48 に下がった |
| 30エポック | 訓練 98.3%・検証 96.5% | 訓練と検証の差が開き始めている |
| テストデータ(360 枚) | 正解率 97.8% | 学習に使っていないデータでの実力 |
| 保存→読み込み | 正解率 97.8%・予測が一致 | 重みと構造が丸ごと戻る |
学習の流れ全体(教師あり学習・訓練とテストの分割・過学習)は、機械学習の基礎の話なので、この記事では Keras の書き方に絞っています。
モデルの保存形式(.keras・weights.h5・SavedModel・TFLite)
この節では、学習したモデルをどの形式で保存し、どこで使うのかが分かります。
Keras 3 の標準は .keras の1ファイルです。配信や端末で使うときは model.export() で SavedModel に、スマートフォンなら TFLite に変換します。 手元で4形式すべてを書き出しました。
model.save("digits.keras") # 構造+重み+compile の設定(標準)
model.save_weights("digits.weights.h5") # 重みだけ(同じ構造のモデルに load_weights)
model.export("digits_saved") # SavedModel(TF Serving・他言語から)
converter = tf.lite.TFLiteConverter.from_keras_model(model)
open("digits.tflite", "wb").write(converter.convert()) # 端末向け
| 形式 | 手元の大きさ | 中身・使いどころ |
|---|---|---|
digits.keras |
140,747 バイト | 構造・重み・compile の設定。Python で学習を続ける・推論する |
digits.weights.h5 |
137,464 バイト | 重みだけ。構造はコードで作り直す |
digits_saved/(SavedModel) |
140KB(saved_model.pb・variables・assets・fingerprint.pb) | TF Serving・C++・Java などから。Keras に依存しない |
digits.tflite |
41,200 バイト | スマートフォン・組み込み。手元で5枚を推論し Keras と同じ予測 |
model.export() の出力には、呼び出せる入口(endpoint)と入出力の形が表示されます。
Saved artifact at 'digits_saved'. The following endpoints are available:
* Endpoint 'serve'
args_0 (POSITIONAL_ONLY): TensorSpec(shape=(None, 8, 8), dtype=tf.float32, name='keras_tensor')
Output Type:
TensorSpec(shape=(None, 10), dtype=tf.float32, name=None)
TFLite の推論に使った tf.lite.Interpreter は、実行時に次の警告を出しました。TensorFlow Lite は LiteRT という名前に変わり、Interpreter は ai_edge_litert パッケージへ移っています。
UserWarning: Warning: tf.lite.Interpreter is deprecated and is scheduled for deletion in
TF 2.20. Please use the LiteRT interpreter from the ai_edge_litert package.
See the [migration guide](https://ai.google.dev/edge/litert/migration)
for details.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
tflite pred [0, 1, 2, 3, 4] keras pred [0, 1, 2, 3, 4] true [0, 1, 2, 3, 4]
テンソル・Variable・GradientTape・tf.function(TensorFlowの基本)
この節では、Keras の下で動いている TensorFlow 本体の4つの部品が、実行した出力で分かります。
テンソルは NumPy の配列に「形・型・置き場所(CPU/GPU)」が付いたもの、Variable は学習で書き換わる値、GradientTape は微分を記録する道具、tf.function は Python の関数をグラフにして速くする道具です。
import tensorflow as tf
a = tf.constant([[1.0, 2.0], [3.0, 4.0]])
print(a) # tf.Tensor([[1. 2.] [3. 4.]], shape=(2, 2), dtype=float32)
print(tf.matmul(a, a).numpy()) # NumPy の配列に戻せる
v = tf.Variable(1.0) # 学習で更新される値(重み・バイアス)
v.assign_add(2.0) # 3.0
x = tf.Variable(3.0)
with tf.GradientTape() as tape: # この中の計算を記録する
y = x ** 2 + 2 * x
print(tape.gradient(y, x)) # dy/dx = 2x + 2 = 8.0
tf.Tensor(
[[1. 2.]
[3. 4.]], shape=(2, 2), dtype=float32)
shape (2, 2) dtype <dtype: 'float32'> rank 2
matmul [[7.0, 10.0], [15.0, 22.0]]
variable 3.0
dy/dx at x=3: 8.0
tf.function は、関数を1回目の呼び出しで「トレース」してグラフに変換し、2回目以降はグラフを実行します。256×256 の行列に tf.sin を 50 回かける関数で比べました。
eager 7.38 ms/call tf.function 5.69 ms/call
小さな演算を何回も呼ぶほど Python 側の往復が減り、差が開きます。Keras の fit は内部でこの仕組みを使っているので、普段は自分で書かずに済みます。配列の形・型・ブロードキャストの考え方は NumPy と共通で、関連記事「NumPyの使い方 基本一覧|配列の作成・演算・形状変更」で扱っています。
CPUでの速度(実測)
この節では、GPU の無い 2 コアの機械で、学習と推論にどれだけ時間がかかったかが分かります。
9,610 パラメーターの全結合モデルは 1 エポック 0.15 秒前後、29,066 パラメーターの CNN でも 0.25 秒でした。 小さなモデルは CPU で困りません。同じ 30 エポックで、バッチサイズと構造を変えた結果です(乱数の種は固定。前の節の 7.1 秒は、検証データの評価と1エポックごとの表示を含んだ時間です)。
| モデル・バッチ | 30 エポックの学習 | 1 エポック | 360 枚の推論 | テスト正解率 |
|---|---|---|---|---|
| 全結合・batch 32 | 4.86 秒 | 162 ms | 0.277 秒 | 98.1% |
| 全結合・batch 128 | 4.45 秒 | 148 ms | 0.125 秒 | 96.4% |
| 全結合・batch 512 | 1.94 秒 | 65 ms | 0.113 秒 | 90.8% |
| CNN(Conv2D×2)・batch 32 | 7.46 秒 | 249 ms | 0.176 秒 | 97.8% |
- バッチを大きくすると 1 エポックは速くなりますが、重みの更新回数が減るので、同じエポック数では正解率が下がりました。 batch 512 は 30 エポックで 90.8% にとどまっています。エポック数を増やすか、学習率を上げて補います。
- 推論の「360 枚 0.1〜0.3 秒」には、
predictの初回のトレースが含まれます。2回目以降は短くなります。 - 並列スレッド数は
tf.config.threadingで見られ、手元は intra・inter とも 0(自動)でした。コンテナで CPU を絞っているときは、明示して合わせます。
TensorFlowとPyTorchの違い(比較表)
この節では、「tensorflow pytorch 違い」で迷ったときに見る観点が、一覧で分かります。
どちらも「テンソル・自動微分・GPU 実行」を持つ深層学習のライブラリで、できることはほぼ同じです。違いは、書き方の流儀と、周辺の道具がどこに厚いかです。
| 観点 | TensorFlow(Keras) | PyTorch |
|---|---|---|
| 開発元・公開 | Google・2015年 | Meta(Facebook)・2016年。現在は Linux Foundation 傘下の PyTorch Foundation |
| モデルの定義 | Sequential に層を並べる(Functional・Subclassing もある) |
nn.Module を継承し forward を書く |
| 学習ループ | compile と fit に任せる |
順伝播・損失・backward・step を自分で書く |
| 実行の仕方 | Eager が既定。tf.function でグラフ化 |
Eager(動的グラフ)。torch.compile で高速化 |
| 保存 | .keras・SavedModel |
state_dict を torch.save(.pth) |
| 配信・端末 | TF Serving・LiteRT・TensorFlow.js | TorchServe・ExecuTorch・ONNX 経由 |
| GPU 版の入れ方 | tensorflow[and-cuda](Linux/WSL2) |
Linux の PyPI 版は CUDA 用ライブラリ同梱。CPU 版は専用の index URL |
| 研究・最新モデル | Keras 3 は JAX・PyTorch もバックエンドにできる | 論文の実装・Hugging Face の多くが PyTorch |
TensorFlow(Keras)が向く
学習ループを書かずに、定番のモデルを短く作りたい
スマートフォン・ブラウザ・TF Serving に配りたい
Google Cloud・TPU・Colab で動かす
PyTorch が向く
ループの中身を細かく変える研究・実験
論文の公開コードや Hugging Face のモデルをそのまま使う
Python のデバッガーで1行ずつ追いたい
「速さ」や「精度」はライブラリの差より、モデル・データ・ハードウェアの差のほうがはるかに大きく、どちらを選んでも同じモデルなら同じ結果に近づきます。Hugging Face のモデルを使う側の書き方は、関連記事「Hugging Face transformers入門|pipelineとタスク一覧」で扱っています。
同じモデルをPyTorchで書くと(対応表)
この節では、上で学習した Keras のモデルを PyTorch で書くとどう変わるかが、段階ごとの対応で分かります。
違いは「fit の中身を自分で書く」ことに尽きます。 PyTorch 側は、公式の Quickstart チュートリアルのAPI(nn.Module・DataLoader・CrossEntropyLoss・torch.save・load_state_dict)に沿って書いたもので、この環境では配布元への接続が拒否されたため実行していません。
| 段階 | Keras(TensorFlow) | PyTorch |
|---|---|---|
| モデル | keras.Sequential([...]) |
class Net(nn.Module) + forward |
| 損失・最適化 | model.compile(optimizer="adam", loss=...) |
nn.CrossEntropyLoss()・torch.optim.Adam(model.parameters()) |
| 学習 | model.fit(x, y, epochs=30) |
for ループで zero_grad→forward→loss→backward→step |
| 評価 | model.evaluate(x, y) |
model.eval()・torch.no_grad() の中で正解数を数える |
| 保存・読み込み | model.save("m.keras")・load_model |
torch.save(model.state_dict(), "m.pth")・load_state_dict |
| softmax | 最後の層に activation="softmax" |
損失関数が内蔵するので最後の層には付けない |
import torch
from torch import nn
from torch.utils.data import TensorDataset, DataLoader
# データ(x_train などは Keras 側と同じ NumPy 配列)
train_dl = DataLoader(TensorDataset(torch.tensor(x_train), torch.tensor(y_train)),
batch_size=32, shuffle=True)
# モデル:nn.Module を継承し、forward を書く
class Net(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(nn.Flatten(), nn.Linear(64, 128), nn.ReLU(),
nn.Dropout(0.2), nn.Linear(128, 10)) # softmax は損失側
def forward(self, x):
return self.net(x)
model = Net()
loss_fn = nn.CrossEntropyLoss() # compile の loss にあたる
optimizer = torch.optim.Adam(model.parameters()) # compile の optimizer にあたる
# 学習ループ:Keras の fit の中身を自分で書く
for epoch in range(30):
model.train()
for xb, yb in train_dl:
optimizer.zero_grad() # 前の勾配を消す
loss = loss_fn(model(xb), yb) # 順伝播と損失
loss.backward() # 逆伝播(GradientTape にあたる)
optimizer.step() # 重みの更新
# 評価:evaluate にあたる
model.eval()
with torch.no_grad():
pred = model(torch.tensor(x_test)).argmax(1)
print("test accuracy", (pred == torch.tensor(y_test)).float().mean().item())
# 保存と読み込み:重み(state_dict)を保存し、同じ構造のモデルに読み込む
torch.save(model.state_dict(), "digits.pth")
m2 = Net()
m2.load_state_dict(torch.load("digits.pth", weights_only=True))
- PyTorch の
CrossEntropyLossは内部で softmax を計算するので、最後の層に softmax を付けません。 Keras 側で softmax を外しfrom_logits=Trueにする書き方も同じ考え方です。 - PyTorch の保存は「重みだけ」が基本で、読み込む側に同じクラスの定義が要ります。Keras の
.kerasは構造も含みます。 - Keras 3 は
KERAS_BACKEND=torchにすると、上の Keras のコードをそのまま PyTorch の上で動かせます(公式の Getting started。バックエンドは import より前に決め、後から変えられません)。
Keras 3の位置づけとtf.keras・tf_keras(公式)
この節では、「Keras と TensorFlow はどう違うのか」「tf.keras と keras のどちらを書くのか」が、公式の記述と手元の確認で分かります。
Keras 3 は、TensorFlow・JAX・PyTorch のどれでも動く独立したライブラリで、TensorFlow 2.16 以降は pip install tensorflow で Keras 3 が入り、tf.keras も Keras 3 になります。 Keras の公式ドキュメントは次のように書いています。
Starting with TensorFlow 2.16, doing pip install tensorflow will install Keras 3. When you have TensorFlow >= 2.16 and Keras 3, then by default from tensorflow import keras (tf.keras) will be Keras 3.
手元でも、from tensorflow import keras の __version__ は 3.15.1 で、import keras と同じ版でした。
| 書き方 | 何が動くか | 向いている場面 |
|---|---|---|
import keras |
Keras 3(バックエンドは tensorflow・jax・torch から選ぶ) | これから書くコード。公式が勧める形 |
from tensorflow import keras |
TF 2.16 以降は Keras 3。2.15 までは Keras 2 | 以前のコードとの互換 |
import tf_keras as keras |
Keras 2 の継続版(別パッケージ) | Keras 2 でしか動かない前の版のコード |
TF_USE_LEGACY_KERAS=1+tf_keras |
tf.keras を Keras 2 に向ける |
コードを変えずに前の動きに戻す |
Keras 2 のコードを Keras 3 で動かすとき
pip install tf_keras と TF_USE_LEGACY_KERAS=1 で Keras 2 の継続版を使い、順に Keras 3 の書き方へ移すKeras 3 の保存形式は .keras。前の SavedModel 形式の model.save は使えない(手元のエラーは次の節)
インストールエラーの原文と直し方(Pythonの版・AVX・tensorflow-gpu)
この節では、pip で TensorFlow を入れるときに出るエラーの原文と、それぞれの直し方が分かります。
いちばん多いのは「Python の版に対応する TensorFlow が無い」で、No matching distribution found と出ます。 Python 3.13 の venv に 2.19.0 を指定したときの原文です。
$ pip install tensorflow==2.19.0
ERROR: Could not find a version that satisfies the requirement tensorflow==2.19.0 (from versions: 2.20.0rc0, 2.20.0, 2.21.0rc0, 2.21.0rc1, 2.21.0, 2.22.0rc0)
ERROR: No matching distribution found for tensorflow==2.19.0
from versions: の後ろが、今の Python で入れられる版の一覧です。2.19 は Python 3.12 までなので、3.13 では候補に出ません。2026年10月29日時点では 2.22.0rc0 も見えており、安定版は 2.21.0 です。
| エラーの原文(抜粋) | 原因 | 直し方 | 手元で再現 |
|---|---|---|---|
No matching distribution found for tensorflow(from versions: none) |
Python の版が対応外(3.9 以下・3.14 以上)、32bit の Python、pip が前の版 | Python 3.10〜3.13 の 64bit で venv を作り直す。pip install --upgrade pip |
公式の対応表から |
No matching distribution found for tensorflow==2.19.0(from versions: 2.20.0, …) |
指定した版がその Python に無い | 一覧にある版を使うか、Python を下げる | Python 3.13 で再現 |
Failed to build 'tensorflow-gpu'・Expected semicolon … python_version>"3.7" |
tensorflow-gpu は配布を終えた名前。setup の段階で止まる |
pip install tensorflow(GPU 込みは 'tensorflow[and-cuda]') |
再現 |
ModuleNotFoundError: No module named 'tensorflow' |
入れた venv と、実行している Python が違う | which python・pip --version で同じ venv か確かめる |
再現(システムの Python で実行) |
import の直後に落ちる(Illegal instruction など) |
CPU が AVX に対応していない | AVX 対応の機械で動かす。Colab を使う | 公式の注記から(手元の CPU は AVX 対応) |
URL fetch failure on https://storage.googleapis.com/…/mnist.npz |
keras.datasets のダウンロード先に届かない(プロキシ・社内網) |
ネットワークの設定を確かめる。手元はこの理由で digits に変えた | 再現 |
手元で pip install tensorflow-gpu を実行したときの原文(抜粋)です。tensorflow-gpu-2.12.0.tar.gz(2.6KB の入れ物だけ)を取りに行き、setup の段階で止まりました。
$ pip install tensorflow-gpu
Collecting tensorflow-gpu
Downloading tensorflow-gpu-2.12.0.tar.gz (2.6 kB)
...
packaging.requirements.InvalidRequirement: Expected semicolon (after name with no version specifier) or end
python_version>"3.7"
^
ERROR: Failed to build 'tensorflow-gpu' when getting requirements to build wheel
MNIST のダウンロードに失敗したときの原文です。keras.datasets.mnist.load_data() は storage.googleapis.com から取ってくるので、外に出られない環境では最後の行のようになります。
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
...
Exception: URL fetch failure on https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz: None -- Tunnel connection failed: 403 Forbidden
実行時のよくあるエラー(原文つき)
入れたあと、モデルを書いて動かすときのつまずきです。すべて手元で起こしました。
| エラーの原文(抜粋) | 原因 | 直し方 |
|---|---|---|
Expected shape (None, 8, 8), but input has incompatible shape (8, 8) |
1枚だけ渡し、バッチの次元が無い | x[None] か np.expand_dims(x, 0) で (1, 8, 8) にする |
expected axis -1 of input shape to have value 64, but received input with shape (1, 784) |
学習時と違う大きさの画像(28×28)を渡した | 前処理を学習時と揃える。Input(shape=…) を見直す |
Arguments `target` and `output` must have the same rank (ndim). Received: target.shape=(32,), output.shape=(32, 10) |
ラベルが整数なのに categorical_crossentropy |
sparse_categorical_crossentropy にするか、ラベルを one-hot にする |
Invalid filepath extension for saving. Please add either a `.keras` extension … or a `.h5` extension. Use `model.export(filepath)` if you want to export a SavedModel |
Keras 2 の model.save("dir")(SavedModel)の書き方 |
.keras で保存。配信用は model.export() |
You are saving your model as an HDF5 file … This file format is considered legacy.(警告) |
.h5 で保存した |
動くが、.keras に移す |
- 1Python の版を先に確かめるpython --version が 3.10〜3.13 か。3.9 は 2.20 まで
- 2venv の中で入れ、同じ venv で実行するModuleNotFoundError の大半は Python の取り違え
- 3入力の形を (バッチ, …) にする1枚でも先頭に 1 の次元を付ける
- 4損失関数とラベルの形を合わせる整数ラベルは sparse_、one-hot は categorical_
- 5保存は .keras、配信は exportKeras 2 の save("dir") は Keras 3 でエラーになる
判断表:TensorFlowとPyTorchのどちらで始めるか・学ぶ順番
この節では、目的ごとにどちらを選ぶかと、TensorFlow を学ぶ順番が分かります。
| 目的 | 向いている選択 | 理由 |
|---|---|---|
| まず深層学習を動かしてみたい | Keras(TensorFlow) | fit で学習でき、出力が読みやすい。この記事のコードは 40 行 |
| 論文・公開コード・Hugging Face のモデルを使う | PyTorch | 公開されている実装の多くが PyTorch |
| スマートフォン・ブラウザ・組み込みで動かす | TensorFlow(LiteRT・TensorFlow.js) | 変換と実行の道具が揃っている。手元で TFLite へ変換できた |
| 学習ループを細かく制御する研究 | PyTorch(または Keras の自作 train_step) | ループが自分のコードなので変えやすい |
| チームが両方使っている | Keras 3 | 同じコードを TensorFlow・JAX・PyTorch のどれでも動かせる |
| 表データの分類・回帰 | まず scikit-learn | 深層学習が要らないことが多い。要るときに Keras へ |
- 1NumPy の配列操作形(shape)・軸・ブロードキャスト。テンソルの操作はこの延長
- 2Keras の Sequential で分類を1つこの記事の digits。compile・fit・evaluate の意味を押さえる
- 3過学習と検証データval_loss が上がり始める点を見る。Dropout・EarlyStopping
- 4CNN・RNN(LSTM)・Transformer層の種類を増やす。画像は Conv2D、系列は LSTM・Attention
- 5GradientTape で学習ループを自作fit の中身が分かると PyTorch も読める
- 6保存・変換・配信.keras → SavedModel → LiteRT。学習した後の使い方
系列データを扱う LSTM の仕組みと Keras での書き方は、関連記事「LSTMとは|仕組み・3つのゲート・RNNとの違いをPythonで実演」で扱っています。
よくある質問
Q. TensorFlow とは何ですか? A. Google が 2015年に公開した、機械学習・深層学習のためのオープンソースのライブラリです。テンソル(多次元配列)の計算、自動微分、CPU/GPU/TPU での実行、学習したモデルの配信までを担います。モデルを書くときは Keras の API を使います。
Q. TensorFlow と Keras の違いは何ですか?
A. Keras は「層を並べて fit で学習する」書きやすい API、TensorFlow はその下で計算を実行する本体です。Keras 3 は独立したパッケージになり、TensorFlow のほかに JAX・PyTorch の上でも動きます。TensorFlow 2.16 以降は pip install tensorflow で Keras 3 が一緒に入ります。
Q. TensorFlow のインストール方法は?
A. 仮想環境を作り、pip install tensorflow です。GPU を使わないなら tensorflow-cpu、Linux/WSL2 で NVIDIA GPU を使うなら pip install 'tensorflow[and-cuda]' です。入ったら python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))" でテンソルが表示されれば成功です(公式の手順)。
Q. 対応している Python のバージョンは?
A. TensorFlow 2.21 は Python 3.10〜3.13 です。3.9 は 2.20 まで、3.14 は 2026年10月29日時点の安定版では対応していません。合わない Python で入れると No matching distribution found になります。
Q. GPU が無くても使えますか? A. 使えます。この記事の学習・評価・保存・TFLite 変換はすべて 2 コアの CPU で実行し、1 万パラメーター前後のモデルなら 1 エポック 0.15 秒前後でした。大きな画像・言語のモデルを学習するときに GPU が要ります。
Q. tensorflow と tensorflow-cpu はどちらを入れればよいですか?
A. GPU を使わない機械なら tensorflow-cpu で、GPU 用の部分が無い分だけ軽くなります。公式ページは CPU 専用ビルドに tensorflow-cpu を使うと書いています。tensorflow でも CPU だけで動きます。tensorflow-gpu という名前はもう使いません。
Q. TensorFlow と PyTorch はどちらを学ぶべきですか? A. 「fit で短く書いて動かす・端末やブラウザに配る」なら TensorFlow(Keras)、「論文の公開コードや Hugging Face のモデルを使う・学習ループを細かく変える」なら PyTorch です。どちらも概念は同じなので、片方を理解すればもう片方は対応表で読めます。
Q. Keras で学習したモデルの保存形式は何を使えばよいですか?
A. Keras 3 の標準は model.save("name.keras") です。TF Serving や他言語から使うなら model.export("dir") で SavedModel、スマートフォンなら TFLite(LiteRT)に変換します。Keras 2 の model.save("dir") は Keras 3 では Invalid filepath extension のエラーになります。
Q. import tensorflow のときに出る oneDNN や AVX の表示はエラーですか?
A. エラーではなく情報です。oneDNN が有効なことと、このバイナリが使っていない CPU 命令の一覧を知らせています。消したいときは TF_CPP_MIN_LOG_LEVEL=1 を import より前に設定します。
Q. tf.keras と keras はどちらを書けばよいですか?
A. これから書くなら import keras です。TensorFlow 2.16 以降は from tensorflow import keras も Keras 3 なので同じものが動きます(手元で 3.15.1 を確認)。Keras 2 のコードを動かすときだけ tf_keras を使います。
Q. TensorFlow Lite はどうなりましたか?
A. LiteRT という名前に変わりました。tf.lite.TFLiteConverter での変換は手元の 2.21 でも動きましたが、tf.lite.Interpreter は「ai_edge_litert パッケージの LiteRT interpreter を使う」という非推奨の警告を出しました。
まとめ
- TensorFlow は Google の機械学習ライブラリで、Keras の API で「層を並べる→compile→fit→evaluate→save」と書く。手元の digits(8×8・1,797 枚)は 30 エポック 7.1 秒でテスト正解率 97.8%、保存→読み込み後も同じ予測だった。
- インストールは venv の中で
pip install tensorflow(CPU だけならtensorflow-cpu・GPU は'tensorflow[and-cuda]')。2.21 の対応 Python は 3.10〜3.13 で、合わないとNo matching distribution foundになる。 - 保存は
.keras、配信はmodel.export()の SavedModel、端末は TFLite(LiteRT)。Keras 2 のsave("dir")は Keras 3 でエラーになる。 - PyTorch との違いは「fit の中身(zero_grad→forward→loss→backward→step)を自分で書くか」。保存は state_dict、softmax は損失関数の側。
- TensorFlow 2.16 以降の
tf.kerasは Keras 3。Keras 3 は JAX・PyTorch の上でも同じコードが動く。
参考・出典
確認日はいずれも 2026年10月29日です。
- TensorFlow「pip を使用して TensorFlow をインストールする」:https://www.tensorflow.org/install/pip?hl=ja
- TensorFlow「ソースからのビルド」(テスト済みのビルド構成):https://www.tensorflow.org/install/source?hl=ja
- TensorFlow「初心者のための TensorFlow 2.0 入門」:https://www.tensorflow.org/tutorials/quickstart/beginner?hl=ja
- Keras「Getting started with Keras」(Keras 3・バックエンド・tf_keras):https://keras.io/getting_started/
- Keras「Save, serialize, and export models」:https://keras.io/guides/serialization_and_saving/
- PyTorch「Quickstart」(nn.Module・DataLoader・torch.save):https://docs.pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html
- PyTorch「Get Started」(インストール):https://pytorch.org/get-started/locally/
- PyPI「tensorflow-cpu」:https://pypi.org/project/tensorflow-cpu/
- PyPI「torch」:https://pypi.org/project/torch/
- Google AI Edge「Migrate to LiteRT from TensorFlow Lite」:https://developers.google.com/edge/litert/migration
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「TensorFlowとは|使い方・インストール・PyTorchとの違いを実行例で」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。