Python 3で訓練済みモデルを保存する方法
機械学習モデルを訓練した後、そのモデルを保存して再利用することは非常に重要です。Pythonでは、さまざまなライブラリを使用してモデルを保存および読み込むことができます。ここでは、代表的な方法をいくつか紹介します。
1. Pickleを使用したモデルの保存
PickleはPythonのオブジェクトをシリアライズ(バイトストリームに変換)するための標準ライブラリです。以下は、Pickleを使ってモデルを保存および読み込む方法の例です。
import pickle
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
# データをロードしてモデルを訓練
iris = datasets.load_iris()
X, y = iris.data, iris.target
model = RandomForestClassifier()
model.fit(X, y)
# モデルを保存
with open('model.pkl', 'wb') as f:
pickle.dump(model, f)
# モデルを読み込む
with open('model.pkl', 'rb') as f:
loaded_model = pickle.load(f)
# モデルを使って予測
print(loaded_model.predict(X[:5]))
この例では、Scikit-learnのRandomForestClassifierを使ってモデルを訓練し、Pickleを使ってモデルを保存しています。保存されたファイルは「model.pkl」としてディスクに書き込まれます。
2. Joblibを使用したモデルの保存
Joblibは、特に大きなデータを効率的にシリアライズするためのライブラリです。Scikit-learnのモデル保存に推奨されています。
from sklearn.externals import joblib
# モデルを保存
joblib.dump(model, 'model.joblib')
# モデルを読み込む
loaded_model = joblib.load('model.joblib')
# モデルを使って予測
print(loaded_model.predict(X[:5]))
Joblibは、Pickleよりも高速かつ効率的にモデルを保存できることが多いため、大規模なデータセットを扱う際に便利です。
3. TensorFlow/Kerasモデルの保存
TensorFlowやKerasを使用してディープラーニングモデルを訓練した場合、モデルの保存には専用のメソッドがあります。
import tensorflow as tf
from tensorflow import keras
# 簡単なモデルを定義
model = keras.Sequential([
keras.layers.Dense(10, activation='relu', input_shape=(4,)),
keras.layers.Dense(3, activation='softmax')
])
# モデルをコンパイル
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# モデルを保存
model.save('model.h5')
# モデルを読み込む
loaded_model = keras.models.load_model('model.h5')
# モデルを使って予測
print(loaded_model.predict(X[:5]))
Kerasでは、モデル全体を「.h5」ファイルとして保存し、後で完全に同じ状態でロードすることができます。この方法は、モデルの構造、重み、トレーニング設定をすべて保存します。
まとめ
Python 3で機械学習モデルを保存する方法は多岐にわたります。PickleやJoblibはScikit-learnのモデルに適しており、TensorFlow/Kerasでは専用の保存メソッドが用意されています。プロジェクトのニーズに応じて適切な方法を選択し、効率的にモデルを管理しましょう。
Python 3で訓練済みモデルを保存する方法は、一般的にはpickleやjoblibモジュールを使用します。これらのモジュールを使うと、モデルをファイルに保存して後で再利用することができます。pickleはPython標準ライブラリに含まれており、以下のようにしてモデルを保存できます:
“`python
import pickle# モデルを保存
with open(‘model.pkl’, ‘wb’) as f:
pickle.dump(model, f)
“`joblibモジュールを使用する場合は、以下のようになります:
“`python
from joblib import dump# モデルを保存
dump(model, ‘model.joblib’)
“`どちらの方法でも、後でモデルを再度読み込む際には、以下のようにして行います:
“`python
import pickle# モデルを読み込む
with open(‘model.pkl’, ‘rb’) as f:
model = pickle.load(f)
“`また、joblibを使用する場合は以下のようになります:
“`python
from joblib import load# モデルを読み込む
model = load(‘model.joblib’)
“`これらの方法を使うことで、Python 3で訓練済みモデルを簡単に保存して再利用することができます。
