🟧

Tensorflow の モデル形式 3 つ

2025/02/12に公開

tf-model

はじめに

AI 開発の最終ゴールは、賢いモデルを作ることです。

モデルは学習したデータや設定値によって性能が大きく変わるため、設定やモデルは正しく保存しておくことが重要です。

そんなモデルに関するお話です。

3 つのモデル形式

tf-model

Tensorflow を使って AI を開発する際、3 つの主要な保存形式があります。

「なんで 3 種類もあるんだよ」と最初は思うかもしれませんが、それぞれに長所と短所があり、用途に応じて使い分ける必要があります。

ここでは、それぞれの形式の特徴を比較し、使い分け方を紹介します。

  1. CKPT 形式
  2. HDF5 形式
  3. SavedModel 形式

それぞれの違いを表にまとめました。

機能/特徴 CKPT HDF5 SavedModel
モデル構造の保存 ×
重みの保存
オプティマイザーの状態保存
トレーニング設定の保存
単一ファイルでの保存 × ×
部分的な重みの読み込み ×
高速な読み書き × ×
バージョン管理のしやすさ × ×
Tensorflow Serving との互換性 × ×
カスタムオブジェクトの保存 ×
トレーニング中断・再開の容易さ × ×
セキュリティリスク ×

※ △ は制限付きで対応可能を示します。

1. CKPT 形式

トレーニング過程に特化した形式で、重みやオプティマイザーの状態は保存できますが、モデル構造は保存できません。バージョン管理が容易で、トレーニングの中断・再開に適していますが、複数ファイルで構成され、読み書きが遅いという特徴があります。

2. HDF5 形式

開発時に便利な単一ファイル形式で、モデル構造から設定まで全て保存でき、高速な読み書きが可能です。ただし、部分的な重みの読み込みやトレーニングの中断・再開には向いていません。

3. SavedModel 形式

最も完全な保存形式で、モデル構造、重み、カスタムオブジェクトまで全て保存可能です。特に Tensorflow Serving との互換性があり、本番環境での利用に適していますが、複数ファイルで構成され、読み書きが遅いという欠点があります。

tf-model

オススメの使い分け

たくさん言われてもわからないと思うので、下記の使い分けをオススメします。

  • トレーニング中の保存 → CKPT 形式
  • 開発時の保存 → HDF5 形式
  • デプロイ時の保存 → SavedModel 形式

使い方

コードでは下記のように記述することで、この使い分けに沿うことができます。

保存方法(抜粋)
# トレーニングの実行(epochごとにckpt形式で重みを保存)
model.fit(
    x_train, y_train,
    epochs=args.epochs,
    callbacks=[setup_checkpoints()]
)

# SavedModel形式で保存
model.save(args.saved_model_dir, save_format='tf')

# HDF5形式で保存
model.save(args.h5_file, save_format='h5')

このようにすることで、最終的に次のような成果物が得られます。

結果
models
├── checkpoints
│   ├── checkpoint
│   ├── cp-0001.ckpt.data-00000-of-00001
│   ├── cp-0001.ckpt.index
│   ├── cp-0002.ckpt.data-00000-of-00001
│   ├── cp-0002.ckpt.index
│   ├── cp-0003.ckpt.data-00000-of-00001
│   ├── cp-0003.ckpt.index
│   ├── cp-0004.ckpt.data-00000-of-00001
│   ├── cp-0004.ckpt.index
│   ├── cp-0005.ckpt.data-00000-of-00001
│   └── cp-0005.ckpt.index
├── model.h5
└── saved_model
    ├── assets
    ├── fingerprint.pb
    ├── keras_metadata.pb
    ├── saved_model.pb
    └── variables
        ├── variables.data-00000-of-00001
        └── variables.index

たくさんありますが、至ってシンプルです。

  • 学習が 1 回終わるたびに、その重みが ckpt 形式で保存される
  • 学習が終わると、model.h5 ファイルと saved_model ディレクトリが生成される

保存方法に迷ったら、ひとまずこの形式に従うと良いでしょう。

コード全文

まとめ

このように Tensorflow では、3 つのモデル保存方法があります。
それぞれの特色を理解して、適した保存を心がけましょう。

皆さんの理解が一歩でも進んだのなら嬉しいです。

フォロー ♻️、いいね 👍、サポート 🐱 お願いします。とっても嬉しいです。

機械学習をもっと詳しく

Python の基礎を本にまとめています。併せてご覧いただけるととても嬉しいです ↓
https://zenn.dev/nekoallergy/books/python-basic
DeepLearning の基礎を本にまとめています。手に取って頂けるととても喜びます ↓
https://zenn.dev/nekoallergy/books/904df952389317


ねこアレルギーのAI

ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。





Created by NekoAllergy

Discussion