活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp
签名:Sam9029
保存与加载模型
没有多少内容,就把使用静态图加速
一起看了
- 先说说现有理解的概念
在学习深度学习的过程中,经常需要保存训练好的模型参数,以便进行微调或部署。
同时,为了提高模型运行效率,还需要了解如何使用静态图加速。
1. 保存与加载模型
保存与加载模型权重
- 模型微调(Fine-tuning):在训练了一个基础模型后,我们可能希望在此基础上对特定任务进行微调。保存的模型权重可以作为预训练模型的起点,加载这些权重后,我们可以在此基础上继续训练,而无需从头开始。
文档没有讲 保存和加载模型权重 是有什么作用:网上说的也不清楚, 还是有些不理解
代码示例
首先,来看如何使用MindSpore框架保存和加载模型权重。
import numpy as np
import mindspore
from mindspore import nn
from mindspore import Tensordef network():model = nn.SequentialCell(nn.Flatten(),nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))return model# 保存模型
model = network()
mindspore.save_checkpoint(model, "model.ckpt")# 加载模型---保存和加载模型权重
model = network()
param_dict = mindspore.load_checkpoint("model.ckpt")
param_not_load, _ = mindspore.load_param_into_net(model, param_dict)
print(param_not_load) # 如果为空列表,表示加载成功
在上述代码中,首先定义了一个简单的神经网络结构。使用mindspore.save_checkpoint
函数,可以将模型的权重保存到文件中。加载模型时,需要先创建一个与保存时相同的模型实例,然后使用mindspore.load_checkpoint
和mindspore.load_param_into_net
函数来加载权重。
思考:保存和加载模型的过程对于模型的迁移和部署至关重要。在实际应用中,可能需要根据不同的需求,选择保存整个模型或是仅保存权重。
2. 使用静态图加速
静态图与动态图
在MindSpore中,有两种运行模式:动态图(PyNative模式)和静态图(Graph模式)。
- 动态图模式:计算图的构建和计算同时发生,适合调试,但不利于优化。
- 静态图模式:计算图的构建和计算分离,适合高性能场景,可以通过编译优化提高执行效率。
代码示例
以下是使用静态图模式加速模型的示例。
import numpy as np
import mindspore as ms
from mindspore import nn, Tensor# 设置为静态图模式
ms.set_context(mode=ms.GRAPH_MODE)class Network(nn.Cell):def init(self):super().init()self.flatten = nn.Flatten()self.dense_relu_sequential = nn.SequentialCell(nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))model = Network()
input = Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))
output = model(input)
print(output)
在静态图模式下,通过ms.set_context
函数设置运行模式,然后定义网络结构。
由于静态图模式会在执行前对计算图进行优化,因此在网络结构固定且追求高性能的场景下,推荐使用静态图模式。
静态图模式虽然在性能上有优势,但牺牲了一定的灵活性。在实际开发中,需要根据项目需求和开发阶段来选择使用动态图还是静态图。