# 保存模型
def save_model_pickle(model, filepath):
try:
with open(filepath, 'wb') as f:
pickle.dump({
'model': model,
'version': '1.0.0',
'metadata': {
'creation_date': '2025-02-10',
'framework_version': model.__class__.__module__
}
}, f)
return True
except Exception as e:
print(f"保存模型失敗:{e}")
return False

# 加載模型
def load_model_pickle(filepath):
try:
with open(filepath, 'rb') as f:
data = pickle.load(f)
return data['model'], data['metadata']
except Exception as e:
print(f"加載模型失敗:{e}")
return None, None

2.2 joblib

優點:

缺點:

使用示例:

from joblib import dump, load

# 保存模型
def save_model_joblib(model, filepath):
try:
dump({
'model': model,
'metadata': {
'creation_date': '2025-02-10',
'framework_version': model.__class__.__module__
}
}, filepath, compress=3)
return True
except Exception as e:
print(f"保存模型失敗:{e}")
return False

# 加載模型
def load_model_joblib(filepath):
try:
data = load(filepath)
return data['model'], data['metadata']
except Exception as e:
print(f"加載模型失敗:{e}")
return None, None


三、主流機器學習框架的模型保存方法

3.1 Scikit-learn 模型

from sklearn.ensemble import RandomForestClassifier
import joblib

# 創建和訓練模型
rf_model = RandomForestClassifier()
rf_model.fit(X_train, y_train)

# 方法 1:使用 joblib(推薦)
joblib.dump(rf_model, 'rf_model.joblib')
rf_model = joblib.load('rf_model.joblib')

# 方法 2:使用 pickle
import pickle
with open('rf_model.pkl', 'wb') as f:
pickle.dump(rf_model, f)
with open('rf_model.pkl', 'rb') as f:
rf_model = pickle.load(f)

3.2 XGBoost 模型

import xgboost as xgb

# 創建和訓練模型
xgb_model = xgb.XGBClassifier()
xgb_model.fit(X_train, y_train)

# 方法 1:XGBoost 原生格式(推薦)
# 保存
xgb_model.save_model('xgb_model.json') # JSON 格式
xgb_model.save_model('xgb_model.ubj') # 二進制格式

# 加載
xgb_model.load_model('xgb_model.json')
xgb_model.load_model('xgb_model.ubj')

# 方法 2:使用 pickle
with open('xgb_model.pkl', 'wb') as f:
pickle.dump(xgb_model, f)

3.3 LightGBM 模型

import lightgbm as lgb

# 創建和訓練模型
lgb_model = lgb.LGBMClassifier()
lgb_model.fit(X_train, y_train)

# 方法 1:LightGBM 原生格式(推薦)
# 保存
lgb_model.save_model('lgb_model.txt') # 文本格式
lgb_model.booster_.save_model('lgb_model.txt',
num_iteration=lgb_model.best_iteration_)

# 加載
lgb_model = lgb.Booster(model_file='lgb_model.txt')

3.4 CatBoost 模型

from catboost import CatBoostClassifier

# 創建和訓練模型
cat_model = CatBoostClassifier()
cat_model.fit(X_train, y_train)

# 方法 1:CatBoost 原生格式(推薦)
# 保存
cat_model.save_model('cat_model.cbm') # 二進制格式
cat_model.save_model('cat_model.json', format='json') # JSON 格式

# 加載
cat_model.load_model('cat_model.cbm')
cat_model.load_model('cat_model.json', format='json')


四、深度學習框架的模型保存

4.1 PyTorch 模型

import torch

# 保存完整模型
torch.save(model, 'model.pth')
# 僅保存模型參數(推薦)
torch.save(model.state_dict(), 'model_params.pth')

# 加載完整模型
model = torch.load('model.pth')
# 加載模型參數
model = YourModelClass()
model.load_state_dict(torch.load('model_params.pth'))

4.2 TensorFlow/Keras 模型

import tensorflow as tf

# 保存完整模型
model.save('model_folder')
# 僅保存權重
model.save_weights('model_weights')

# 加載完整模型
model = tf.keras.models.load_model('model_folder')
# 加載權重
model = YourModelClass()
model.load_weights('model_weights')


五、最佳實踐與建議

5.1 模型保存的完整方案

def save_model_complete(model, filepath, model_info=None):
"""完整的模型保存方案"""
import json
from datetime import datetime

# 基本信息
save_info = {
'model_type': model.__class__.__name__,
'framework': model.__class__.__module__,
'save_time': datetime.now().isoformat(),
'version': '1.0.0',
}

# 添加自定義信息
if model_info:
save_info.update(model_info)

# 保存模型
try:
# 選擇合適的保存方法
if hasattr(model, 'save_model'):
# 使用模型原生保存方法
model.save_model(filepath)
else:
# 使用 joblib 作為默認方法
joblib.dump(model, filepath)

# 保存元數據
meta_filepath = filepath + '.meta.json'
with open(meta_filepath, 'w') as f:
json.dump(save_info, f, indent=2)

return True
except Exception as e:
print(f"保存模型失敗:{e}")
return False

5.2 版本控制建議

  1. 使用語義化版本號
  2. 保存模型時包含訓練數據的版本信息
  3. 記錄所有依賴包的版本
  4. 使用 git-lfs 管理大型模型文件

5.3 安全性建議

  1. 避免加載不信任來源的 pickle 文件
  2. 使用加密存儲敏感模型
  3. 實施訪問控制機制
  4. 定期備份重要模型

5.4 性能優化建議

  1. 大型模型使用內存映射加載
  2. 選擇適當的壓縮級別
  3. 考慮模型裁剪和量化
  4. 使用異步加載機制

5.5 格式選擇建議

六、常見問題與解決方案

6.1 版本兼容性問題

6.2 大型模型處理

6.3 跨平臺遷移

上一篇:

深度學習入門:萬字長文帶你回顧RCNN,帶你了解Fast RCNN到Faster RCNN

下一篇:

Vue3.4+Element-plus+Vite通用后臺管理系統
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費