机器学习手册学习笔记--保存和加载训练后的模型

364 阅读2分钟

仅供自己复习回顾使用,若有侵权可删除

保存和加载 scikit-learn 模型

pickle 是 Python 特有的数据格式。

具体来讲,我们使用 joblib(它是一个库,作用是让 pickle 文件适用于 NumPy 数组很大的情况,在 scikit-learn 训练后的模型中,这种情况很常见)来保存模型。
当保存 scikit-learn 模型时,要留心,因为你所保存的模型有可能在各个版本的 scikitlearn 中不兼容,所以在文件名中写上模型所用的 scikit-learn 版本就会很有用。

# 加载库
from sklearn.ensemble import RandomForestClassifier
from sklearn import datasets
#from sklearn.externals import joblib
import joblib
# 加载数据
iris = datasets.load_iris()
features = iris.data
target = iris.target

# 创建决策树分类器对象
classifer = RandomForestClassifier()
# 训练模型
model = classifer.fit(features, target)

# 获得 scikit-learn 的版本
scikit_version = joblib.__version__
# 把模型保存为 pickle 文件
joblib.dump(model,"model_{version}.pkl".format(version=scikit_version))


# 从文件中加载模型
classifer = joblib.load("model.pkl")

# 创建新的样本
new_observation = [[ 5.2, 3.2, 1.1, 0.1]]
# 预测样本的分类
classifer.predict(new_observation)

保存和加载 Keras 模型

Keras 不推荐使用 pickle 格式来保存模型,而是要将模型保存为HDF5 文件。

HDF5 文件包含了你需要的一切,不仅包含加载模型做预测所需要的结构和训练后的参数,而且包含重新训练所需要的各种设置(即损失、优化器的设置和当前状态)。

# 加载库
import numpy as np
from keras.datasets import imdb
from keras.preprocessing.text import Tokenizer
from keras import models
from keras import layers
from keras.models import load_model
# 设置随机种子
np.random.seed(0)
# 设定想要的特征数量
number_of_features = 1000
# 从影评数据中加载数据和目标向量
(train_data, train_target), (test_data, test_target) = imdb.load_data(
num_words=number_of_features)
# 把影评数据转换为 one-hot 编码的特征矩阵
tokenizer = Tokenizer(num_words=number_of_features)
train_features = tokenizer.sequences_to_matrix(train_data, mode="binary")
test_features = tokenizer.sequences_to_matrix(test_data, mode="binary")
# 启动神经网络
network = models.Sequential()
# 添加使用 ReLu 激活函数的全连接层
network.add(layers.Dense(units=16,activation="relu",input_shape=(number_of_features,)))
# 添加使用 sigmoid 激活函数的全连接层
network.add(layers.Dense(units=1, activation=” sigmoid” ))

# 编译神经网络
network.compile(loss="binary_crossentropy", # 交叉熵
                        optimizer=optimizer, # 优化器
                        metrics=["accuracy"]) # 将准确率作为性能指标
# 训练神经网络
history = network.fit(train_features, # 特征值
                            target_train, # 目标向量
                            epochs=3, # epoch 数量
                            verbose=0, # 没有输出
                            batch_size=100, # 每个批次的观察值数量
                            validation_data=(test_features, test_target)) # 测试数据

# 保存神经网络
network.save("model.h5")

# 加载神经网络
network = load_model("model.h5")