Tensorflow の モデル形式 3 つ
はじめに
AI 開発の最終ゴールは、賢いモデルを作ることです。
モデルは学習したデータや設定値によって性能が大きく変わるため、設定やモデルは正しく保存しておくことが重要です。
そんなモデルに関するお話です。
3 つのモデル形式
Tensorflow を使って AI を開発する際、3 つの主要な保存形式があります。
「なんで 3 種類もあるんだよ」と最初は思うかもしれませんが、それぞれに長所と短所があり、用途に応じて使い分ける必要があります。
ここでは、それぞれの形式の特徴を比較し、使い分け方を紹介します。
- CKPT 形式
- HDF5 形式
- SavedModel 形式
それぞれの違いを表にまとめました。
機能/特徴 | CKPT | HDF5 | SavedModel |
---|---|---|---|
モデル構造の保存 | × | ○ | ○ |
重みの保存 | ○ | ○ | ○ |
オプティマイザーの状態保存 | ○ | ○ | ○ |
トレーニング設定の保存 | ○ | ○ | ○ |
単一ファイルでの保存 | × | ○ | × |
部分的な重みの読み込み | ○ | × | ○ |
高速な読み書き | × | ○ | × |
バージョン管理のしやすさ | ○ | × | × |
Tensorflow Serving との互換性 | × | × | ○ |
カスタムオブジェクトの保存 | × | △ | ○ |
トレーニング中断・再開の容易さ | ○ | × | × |
セキュリティリスク | × | ○ | ○ |
※ △ は制限付きで対応可能を示します。
1. CKPT 形式
トレーニング過程に特化した形式で、重みやオプティマイザーの状態は保存できますが、モデル構造は保存できません。バージョン管理が容易で、トレーニングの中断・再開に適していますが、複数ファイルで構成され、読み書きが遅いという特徴があります。
2. HDF5 形式
開発時に便利な単一ファイル形式で、モデル構造から設定まで全て保存でき、高速な読み書きが可能です。ただし、部分的な重みの読み込みやトレーニングの中断・再開には向いていません。
3. SavedModel 形式
最も完全な保存形式で、モデル構造、重み、カスタムオブジェクトまで全て保存可能です。特に Tensorflow Serving との互換性があり、本番環境での利用に適していますが、複数ファイルで構成され、読み書きが遅いという欠点があります。
オススメの使い分け
たくさん言われてもわからないと思うので、下記の使い分けをオススメします。
- トレーニング中の保存 → 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 の基礎を本にまとめています。併せてご覧いただけるととても嬉しいです ↓
DeepLearning の基礎を本にまとめています。手に取って頂けるととても喜びます ↓ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。
Created by NekoAllergy
Discussion