モデル全体の保存(model.save()とtf.keras.models.load_model())

TensorFlow(特に tf.keras)において、モデル全体の保存と復元は、トレーニング済みモデルを再利用したり、デプロイに活用する上で非常に重要な機能です。model.save()tf.keras.models.load_model() を用いることで、アーキテクチャ、重み、学習状態(optimizerなど)を含むすべてを保存・復元できます。


1. モデル全体の保存:model.save()

概要

model.save() は、モデルの構造(アーキテクチャ)重みコンパイル情報オプティマイザの状態を含む、完全なモデルを保存します。

使い方

python
model.save('my_model')

保存形式

  • SavedModel形式(デフォルト):ディレクトリとして保存され、TensorFlow Serving などでも使える。

  • HDF5形式(.h5拡張子を指定):Keras専用の形式。

例(SavedModel形式)

python
model.save('saved_model/my_model') # ディレクトリ形式で保存される

例(HDF5形式)

python
model.save('my_model.h5') # 1つのファイルに保存される

2. モデルの復元:tf.keras.models.load_model()

概要

tf.keras.models.load_model() を使うと、model.save() で保存したモデル全体を復元できます。復元後は、元のモデルと同様に predict(), evaluate(), fit() などのメソッドを使用可能です。

使い方

python
from tensorflow.keras.models import load_model # SavedModel形式 model = load_model('saved_model/my_model') # HDF5形式 model = load_model('my_model.h5')

3. 保存内容の詳細

要素 保存されるか 説明
モデル構造 Sequential または Functional API の構造
重み 学習済みのパラメータ
コンパイル情報 loss, optimizer, metrics など
オプティマイザの状態 学習を途中から再開可能な状態で保持

4. 注意点

  • カスタムレイヤーやカスタムオブジェクト(例:独自の損失関数、メトリクスなど)を使っている場合は、custom_objects 引数で明示的に指定が必要です。

  • HDF5形式では一部の最新の機能(例:サブクラス化モデルなど)に制限があります。可能であれば SavedModel 形式の使用が推奨されます。


5. 実用例

モデルの保存と復元(完全な流れ)

python
import tensorflow as tf from tensorflow.keras import layers # モデル作成と学習 model = tf.keras.Sequential([ layers.Dense(64, activation='relu', input_shape=(32,)), layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 仮の学習(例としてダミーデータを使う) import numpy as np x_train = np.random.random((1000, 32)) y_train = tf.keras.utils.to_categorical(np.random.randint(10, size=(1000, 1)), num_classes=10) model.fit(x_train, y_train, epochs=5) # 保存 model.save('saved_model/my_model') # 復元 restored_model = tf.keras.models.load_model('saved_model/my_model') restored_model.evaluate(x_train, y_train)

まとめ

操作 関数 説明
モデルの保存 model.save() モデル全体(構造・重み・学習情報)を保存
モデルの復元 tf.keras.models.load_model() 保存されたモデルを完全に復元
保存形式(推奨) SavedModel TensorFlow標準形式、より柔軟で拡張性あり
保存形式(互換) HDF5(.h5 Kerasとの互換に優れるが一部制限あり

必要に応じて、model.save_weights()(重みのみ)や tf.keras.models.model_from_json()(構造のみ)なども活用できますが、最も包括的な保存方法が model.save() です。

生成日:2025/05/22