- 简单认识下mindspore框架
- 什么是mindspore?
- MindSpore是华为推出的一款开源深度学习框架,旨在简化深度学习模型的开发、训练和部署过程。这个全场景AI框架于2019年8月推出,随后于2020年3月28日正式开源。其目标是实现易开发、高效执行、全场景统一部署。MindSpore提供了一套端到端的开发工具和算法库,使用户能够更轻松地构建和部署深度学习模型。
- 主流的学习框架有哪些,该框架和主流的有什么区别?
- 有几个主流的深度学习框架,包括TensorFlow、PyTorch、Keras和MXNet。这些框架在深度学习领域被广泛应用,各有自己的特点和优势。
- TensorFlow是由Google开发的开源深度学习框架,它具有强大的生态系统和广泛的支持。PyTorch是由Facebook开发的深度学习框架,被认为在动态计算图方面更灵活。Keras是一个高层神经网络API,可以在TensorFlow、Theano和CNTK上运行。MXNet是亚马逊支持的深度学习框架,具有高效的分布式训练能力。
- MindSpore与这些主流框架的区别在于其全场景AI能力,以及提供的端到端解决方案。MindSpore专注于简化深度学习模型的开发和部署过程,旨在提供更高效的执行和统一的部署体验。同时,MindSpore还注重隐私保护和安全性,为用户提供全面的解决方案。
- 简单总结:mindspore 是华为推出的深度学习框架,提供全场景AI能力,以及的端到端解决方案。具有易开发、高效执行、全场景统一的特点。
- 模型训练的一般步骤和流程
- 第一步:获取数据
- 使用下载的数据集Mnist(包含大量手写数字的图像)
- 第二步:数据预处理
- 拆分训练集和测试集(不用此步骤,数据集做了)
- 使用数据处理流水线(Data Processing Pipeline)使用map对图像数据及标签进行变换处理,然后将处理好的数据集打包为大小为64的batch。
- 第三步: 网络构建
- Flatten层用于将输入数据展平,SequentialCell层包含了三个全连接层,并且每个全连接层后面跟着一个ReLU激活函数。在construct方法中,对输入数据进行展平操作,然后通过定义好的全连接层和激活函数计算出模型的输出logits。
-
# Define model 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) ) def construct(self, x): x = self.flatten(x) logits = self.dense_relu_sequential(x) return logits model = Network() print(model)
- 第四步:模型训练
- 在模型训练中,一个完整的训练过程(step)需要实现以下三步:
- 正向计算:模型预测结果(logits),并与正确标签(label)求预测损失(loss)。
- 反向传播:利用自动微分机制,自动求模型参数(parameters)对于loss的梯度(gradients)。
- 参数优化:将梯度更新到参数上。
-
# 1. Define forward function def forward_fn(data, label): logits = model(data) loss = loss_fn(logits, label) return loss, logits # 2. Get gradient function grad_fn = mindspore.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=True) # 3. Define function of one-step training def train_step(data, label): (loss, _), grads = grad_fn(data, label) optimizer(grads) return loss def train(model, dataset): size = dataset.get_dataset_size() model.set_train() for batch, (data, label) in enumerate(dataset.create_tuple_iterator()): loss = train_step(data, label) if batch % 100 == 0: loss, current = loss.asnumpy(), batch print(f"loss: {loss:>7f} [{current:>3d}/{size:>3d}]")
- 得到训练结果
Accuracy: 94.0%, Avg loss: 0.206913
- 第五步:预测和检验
- 先保存训练好的模型
- 加载模型
- 使用测试集进行验证,并输出结果
- 第一步:获取数据
昇思25天学习打卡营第1天|模型训练的基本步骤
于 2024-06-26 22:15:04 首次发布