重みの保存・読み込み(model.save_weights())

TensorFlow(特に tf.keras)におけるモデルの重みの保存と読み込みは、モデルの訓練後の状態を保存し、後で再利用したい場合に非常に重要です。model.save_weights() を使用することで、モデルの構造(アーキテクチャ)とは独立して重みだけを保存・読み込みすることができます。


1. 基本構文

重みの保存

python
model.save_weights('path/to/weights')

重みの読み込み

python
model.load_weights('path/to/weights')

2. 保存形式の種類

save_weights() では、2種類の形式で重みを保存できます:

  • TensorFlow形式(デフォルト):拡張子 .index.data-00000-of-00001 が生成される

    python
    model.save_weights('my_model_weights') # TensorFlow形式の保存
  • HDF5形式:拡張子 .h5 をつけることで自動的にHDF5形式になる

    python
    model.save_weights('my_model_weights.h5') # HDF5形式の保存

3. 使用例

python
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # モデルの定義 model = Sequential([ Dense(10, activation='relu', input_shape=(5,)), Dense(1) ]) # モデルのコンパイルと訓練(例としてダミーデータ使用) model.compile(optimizer='adam', loss='mse') import numpy as np x = np.random.rand(100, 5) y = np.random.rand(100, 1) model.fit(x, y, epochs=3) # 重みの保存 model.save_weights('my_weights.h5') # 新しいモデルを作成して重みを読み込む new_model = Sequential([ Dense(10, activation='relu', input_shape=(5,)), Dense(1) ]) new_model.load_weights('my_weights.h5')

4. 注意点

  • モデル構造が同じである必要があります
    load_weights() は、元のモデルと同一のアーキテクチャでなければ正常に動作しません。

  • 保存前に訓練・compileが必要
    保存するためには、モデルをコンパイルし、訓練するか、少なくとも build() しておく必要があります。

    python
    model.build(input_shape=(None, 5)) # 重みの初期化 model.save_weights('weights_only') # 訓練しなくても保存可能になる

5. 主な用途

  • トレーニング結果の保存:学習済み重みだけを保存して、推論時にモデルへ読み込み

  • 転移学習:別のデータセットに対して再学習する際、ベースモデルの重みを再利用

  • 分散環境での保存:複数のトレーニングジョブ間で重みを共有


まとめ

操作 メソッド 備考
重みの保存 model.save_weights() .h5 拡張子でHDF5保存も可能
重みの読み込み model.load_weights() モデル構造が一致している必要あり

モデルの構造を保存したくない場合や、構造を再定義したうえで再学習・再利用したい場合に非常に有用な方法です。重みの保存と復元を適切に行うことで、モデルの再現性や継続学習の効率が大きく向上します。

生成日:2025/05/22