通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

python如何保存建好的模型

python如何保存建好的模型

Python保存建好的模型的方法主要有:使用pickle、joblib、以及使用深度学习框架自带的保存方法。 例如,在使用Scikit-learn构建模型时,可以使用pickle或joblib来保存模型;在使用Keras或TensorFlow时,可以使用它们提供的保存功能。下面将详细介绍使用pickle保存模型的方法:

使用pickle保存模型非常简单且常用。首先需要在训练模型后使用pickle的dump函数将模型保存到文件中,之后可以使用load函数从文件中加载模型。以下是一个简单的示例:

import pickle

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier

加载数据集

iris = load_iris()

X, y = iris.data, iris.target

划分数据集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

训练模型

model = RandomForestClassifier(n_estimators=100)

model.fit(X_train, y_train)

保存模型

with open('random_forest_model.pkl', 'wb') as file:

pickle.dump(model, file)

加载模型

with open('random_forest_model.pkl', 'rb') as file:

loaded_model = pickle.load(file)

测试加载的模型

print(loaded_model.score(X_test, y_test))

通过pickle保存模型可以方便地将模型序列化到文件中,也可以从文件中读取模型进行预测。在实际应用中,这种方法非常高效和便捷。


一、使用PICKLE保存与加载模型

Pickle简介

Pickle是Python的标准库之一,用于将Python对象序列化和反序列化。序列化是指将对象转换为字节流的过程,而反序列化则是将字节流转换回对象的过程。Pickle非常适合保存和加载Scikit-learn模型,因为它能够保存任何Python对象,包括复杂的模型对象。

Pickle保存模型

使用pickle保存模型的步骤如下:

  1. 训练模型。
  2. 使用pickle的dump函数将模型保存到文件中。

以下是一个具体的例子:

import pickle

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier

加载数据集

iris = load_iris()

X, y = iris.data, iris.target

划分数据集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

训练模型

model = RandomForestClassifier(n_estimators=100)

model.fit(X_train, y_train)

保存模型

with open('random_forest_model.pkl', 'wb') as file:

pickle.dump(model, file)

在上述代码中,我们首先加载数据集并划分为训练集和测试集。然后,我们训练了一个随机森林分类器,并使用pickle的dump函数将训练好的模型保存到文件random_forest_model.pkl中。

Pickle加载模型

使用pickle加载模型的步骤如下:

  1. 打开保存模型的文件。
  2. 使用pickle的load函数从文件中加载模型。

以下是一个具体的例子:

# 加载模型

with open('random_forest_model.pkl', 'rb') as file:

loaded_model = pickle.load(file)

测试加载的模型

print(loaded_model.score(X_test, y_test))

在上述代码中,我们使用pickle的load函数从文件random_forest_model.pkl中加载模型,并使用加载的模型在测试集上进行评分。


二、使用JOBLIB保存与加载模型

Joblib简介

Joblib是一个专门用于在Python中进行大规模数据处理和模型保存的库。与pickle相比,joblib在处理大型numpy数组时更加高效。它非常适合保存和加载Scikit-learn模型,因为Scikit-learn模型通常包含大量的numpy数组。

Joblib保存模型

使用joblib保存模型的步骤如下:

  1. 训练模型。
  2. 使用joblib的dump函数将模型保存到文件中。

以下是一个具体的例子:

import joblib

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier

加载数据集

iris = load_iris()

X, y = iris.data, iris.target

划分数据集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

训练模型

model = RandomForestClassifier(n_estimators=100)

model.fit(X_train, y_train)

保存模型

joblib.dump(model, 'random_forest_model.joblib')

在上述代码中,我们使用joblib的dump函数将训练好的模型保存到文件random_forest_model.joblib中。

Joblib加载模型

使用joblib加载模型的步骤如下:

  1. 使用joblib的load函数从文件中加载模型。

以下是一个具体的例子:

# 加载模型

loaded_model = joblib.load('random_forest_model.joblib')

测试加载的模型

print(loaded_model.score(X_test, y_test))

在上述代码中,我们使用joblib的load函数从文件random_forest_model.joblib中加载模型,并使用加载的模型在测试集上进行评分。


三、使用KERAS保存与加载模型

Keras简介

Keras是一个高层神经网络API,能够快速构建和训练深度学习模型。Keras提供了多种方法来保存和加载模型,包括保存整个模型和仅保存模型的权重。

保存整个模型

保存整个模型包括模型的结构和权重,使用Keras的model.save函数可以实现这一点。

以下是一个具体的例子:

import tensorflow as tf

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense

构建模型

model = Sequential([

Dense(64, activation='relu', input_shape=(4,)),

Dense(3, activation='softmax')

])

编译模型

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

训练模型

model.fit(X_train, y_train, epochs=10, batch_size=32)

保存整个模型

model.save('keras_model.h5')

在上述代码中,我们使用Keras的model.save函数将训练好的模型保存到文件keras_model.h5中。

加载整个模型

使用Keras的tf.keras.models.load_model函数可以加载整个模型。

以下是一个具体的例子:

# 加载整个模型

loaded_model = tf.keras.models.load_model('keras_model.h5')

测试加载的模型

loaded_model.evaluate(X_test, y_test)

在上述代码中,我们使用Keras的tf.keras.models.load_model函数从文件keras_model.h5中加载模型,并使用加载的模型在测试集上进行评分。

仅保存模型权重

有时候我们只需要保存模型的权重,可以使用Keras的model.save_weights函数。

以下是一个具体的例子:

# 保存模型权重

model.save_weights('keras_weights.h5')

加载模型权重

加载模型权重之前,需要先构建相同结构的模型,然后使用Keras的model.load_weights函数加载权重。

以下是一个具体的例子:

# 构建相同结构的模型

model = Sequential([

Dense(64, activation='relu', input_shape=(4,)),

Dense(3, activation='softmax')

])

加载模型权重

model.load_weights('keras_weights.h5')

测试加载的模型

model.evaluate(X_test, y_test)

在上述代码中,我们首先构建了一个与保存权重时相同结构的模型,然后使用model.load_weights函数从文件keras_weights.h5中加载权重,并使用加载的模型在测试集上进行评分。


四、使用TENSORFLOW保存与加载模型

TensorFlow简介

TensorFlow是一个开源的深度学习框架,广泛应用于机器学习和人工智能领域。TensorFlow提供了多种方法来保存和加载模型,包括保存整个模型和仅保存模型的权重。

保存整个模型

保存整个模型包括模型的结构和权重,使用TensorFlow的tf.keras.Model.save函数可以实现这一点。

以下是一个具体的例子:

import tensorflow as tf

构建模型

model = tf.keras.Sequential([

tf.keras.layers.Dense(64, activation='relu', input_shape=(4,)),

tf.keras.layers.Dense(3, activation='softmax')

])

编译模型

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

训练模型

model.fit(X_train, y_train, epochs=10, batch_size=32)

保存整个模型

model.save('tf_model')

在上述代码中,我们使用TensorFlow的tf.keras.Model.save函数将训练好的模型保存到文件夹tf_model中。

加载整个模型

使用TensorFlow的tf.keras.models.load_model函数可以加载整个模型。

以下是一个具体的例子:

# 加载整个模型

loaded_model = tf.keras.models.load_model('tf_model')

测试加载的模型

loaded_model.evaluate(X_test, y_test)

在上述代码中,我们使用TensorFlow的tf.keras.models.load_model函数从文件夹tf_model中加载模型,并使用加载的模型在测试集上进行评分。

仅保存模型权重

有时候我们只需要保存模型的权重,可以使用TensorFlow的tf.keras.Model.save_weights函数。

以下是一个具体的例子:

# 保存模型权重

model.save_weights('tf_weights')

加载模型权重

加载模型权重之前,需要先构建相同结构的模型,然后使用TensorFlow的tf.keras.Model.load_weights函数加载权重。

以下是一个具体的例子:

# 构建相同结构的模型

model = tf.keras.Sequential([

tf.keras.layers.Dense(64, activation='relu', input_shape=(4,)),

tf.keras.layers.Dense(3, activation='softmax')

])

加载模型权重

model.load_weights('tf_weights')

测试加载的模型

model.evaluate(X_test, y_test)

在上述代码中,我们首先构建了一个与保存权重时相同结构的模型,然后使用tf.keras.Model.load_weights函数从文件夹tf_weights中加载权重,并使用加载的模型在测试集上进行评分。


五、使用PYTORCH保存与加载模型

PyTorch简介

PyTorch是一个开源的深度学习框架,以其动态计算图和灵活性受到广泛欢迎。PyTorch提供了多种方法来保存和加载模型,包括保存整个模型和仅保存模型的权重。

保存整个模型

保存整个模型包括模型的结构和权重,使用PyTorch的torch.save函数可以实现这一点。

以下是一个具体的例子:

import torch

import torch.nn as nn

import torch.optim as optim

定义模型

class Net(nn.Module):

def __init__(self):

super(Net, self).__init__()

self.fc1 = nn.Linear(4, 64)

self.fc2 = nn.Linear(64, 3)

def forward(self, x):

x = torch.relu(self.fc1(x))

x = torch.softmax(self.fc2(x), dim=1)

return x

model = Net()

定义损失函数和优化器

criterion = nn.CrossEntropyLoss()

optimizer = optim.Adam(model.parameters(), lr=0.001)

训练模型

for epoch in range(10):

optimizer.zero_grad()

outputs = model(torch.tensor(X_train, dtype=torch.float32))

loss = criterion(outputs, torch.tensor(y_train, dtype=torch.long))

loss.backward()

optimizer.step()

保存整个模型

torch.save(model, 'pytorch_model.pth')

在上述代码中,我们使用PyTorch的torch.save函数将训练好的模型保存到文件pytorch_model.pth中。

加载整个模型

使用PyTorch的torch.load函数可以加载整个模型。

以下是一个具体的例子:

# 加载整个模型

loaded_model = torch.load('pytorch_model.pth')

测试加载的模型

loaded_model.eval()

with torch.no_grad():

outputs = loaded_model(torch.tensor(X_test, dtype=torch.float32))

_, predicted = torch.max(outputs, 1)

accuracy = (predicted == torch.tensor(y_test)).sum().item() / len(y_test)

print('Accuracy:', accuracy)

在上述代码中,我们使用PyTorch的torch.load函数从文件pytorch_model.pth中加载模型,并使用加载的模型在测试集上进行评分。

仅保存模型权重

有时候我们只需要保存模型的权重,可以使用PyTorch的torch.save函数。

以下是一个具体的例子:

# 保存模型权重

torch.save(model.state_dict(), 'pytorch_weights.pth')

加载模型权重

加载模型权重之前,需要先构建相同结构的模型,然后使用PyTorch的model.load_state_dict函数加载权重。

以下是一个具体的例子:

# 定义相同结构的模型

model = Net()

加载模型权重

model.load_state_dict(torch.save('pytorch_weights.pth'))

测试加载的模型

model.eval()

with torch.no_grad():

outputs = model(torch.tensor(X_test, dtype=torch.float32))

_, predicted = torch.max(outputs, 1)

accuracy = (predicted == torch.tensor(y_test)).sum().item() / len(y_test)

print('Accuracy:', accuracy)

在上述代码中,我们首先定义了一个与保存权重时相同结构的模型,然后使用model.load_state_dict函数从文件pytorch_weights.pth中加载权重,并使用加载的模型在测试集上进行评分。


六、使用ONNX保存与加载模型

ONNX简介

ONNX(Open Neural Network Exchange)是一个开放的神经网络交换格式,旨在促进不同深度学习框架之间的互操作性。ONNX允许开发者将模型从一个框架导出,并在另一个框架中导入和使用。

导出模型到ONNX

ONNX提供了一种标准化的方式来保存模型。以下是一个将PyTorch模型导出为ONNX格式的示例:

import torch.onnx

定义输入张量

dummy_input = torch.tensor(X_train[0:1], dtype=torch.float32)

导出模型到ONNX

torch.onnx.export(model, dummy_input, 'model.onnx')

在上述代码中,我们使用PyTorch的torch.onnx.export函数将训练好的模型导出为ONNX格式,并保存到文件model.onnx中。

加载ONNX模型

可以使用ONNX Runtime来加载和运行ONNX模型。以下是一个具体的例子:

import onnxruntime as ort

创建ONNX Runtime推理会话

ort_session = ort.InferenceSession('model.onnx')

定义输入

input_name = ort_session.get_inputs()[0].name

input_data = {input_name: X_test.astype(np.float32)}

推理

outputs = ort_session.run(None, input_data)

获取预测结果

predicted = np.argmax(outputs[0], axis=1)

accuracy = np.sum(predicted == y_test) / len(y_test)

print('Accuracy:', accuracy)

在上述代码中,我们使用ONNX Runtime的InferenceSession类加载ONNX模型,并进行推理。最后,计算模型在测试集上的准确率。


七、使用MLFLOW保存与加载模型

MLflow简介

MLflow是一个开源的平台,旨在管理整个机器学习生命周期,包括实验跟踪、项目管理、模型部署和注册表。MLflow提供了一种标准化的方式来保存和加载模型。

保存模型到MLflow

以下是一个将模型保存到MLflow的示例:

import mlflow

import mlflow.sklearn

启动MLflow跟踪

mlflow.start_run()

训练模型

model = RandomForestClassifier(n_estimators=100)

model.fit(X_train, y_train)

保存模型到MLflow

mlflow.sklearn.log_model(model, 'model')

结束MLflow跟踪

mlflow.end_run()

在上述代码中,我们使用MLflow的mlflow.sklearn.log_model函数将训练好的模型保存到MLflow中。

加载MLflow模型

可以使用MLflow的mlflow.sklearn.load_model函数加载模型。以下是一个具体的例子

相关问答FAQs:

如何在Python中保存机器学习模型?
在Python中,保存机器学习模型通常可以使用picklejoblib库。pickle是Python内置的序列化库,可以将模型对象转换为字节流并保存到文件中。joblib更适合于大型numpy数组的高效序列化。使用joblib.dump(model, 'model.pkl')可以轻松保存模型,而使用joblib.load('model.pkl')则可重新加载模型。

保存模型时需要注意哪些事项?
在保存模型时,确保选择合适的文件格式和后缀名。通常,.pkl.joblib是常见的后缀名,能够明确指示文件内容。还需要注意模型的版本兼容性,确保在加载模型时使用与保存时相同的库版本。此外,考虑到模型的可复现性,建议同时保存模型的训练参数和数据预处理步骤。

如何验证保存的模型是否正常工作?
验证保存的模型可以通过重新加载模型并对测试数据进行预测来实现。在此过程中,可以计算模型的准确率或其他性能指标,以确保其性能未受到影响。使用训练集之外的数据进行验证可以提供更可靠的性能反馈。此外,将模型的预测结果与预期结果进行对比也是一个有效的验证方法。

相关文章