当前位置:   article > 正文

昇思MindSpore 25天学习打卡营|day1

昇思mindspore 25天学习打卡营

01.基本介绍

昇思MindSpore

昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标。

易开发:API友好、调试难度低。

高效执行:计算效率、数据预处理效率和分布式训练效率。

全场景:框架同时支持云、边缘以及端侧场景。

昇思MindSpore总体框架图:

执行流程:

展示各个模块之间整体配合。

层次结构:

昇思MindSpore向用户提供了3个不同层次的API,支撑用户进行AI应用(算法/模型)开发,从高到低分别为High-Level Python API、Medium-Level Python API以及Low-Level Python API。高阶API提供了更好的封装性,低阶API提供更好的灵活性,中阶API兼顾灵活及封装,满足不同领域和层次的开发者需求。

02.快速入门

通过MindSpore的API来快速实现一个简单的深度学习模型。

处理数据集

MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset)数据变换(Transforms)实现高效的数据预处理。

在教程中,使用Mnist数据集来训练。使用 mindspore.dataset 提供的数据变换进行预处理

网络构建

mindspore.nn类是构建所有网络的基类,也是网络的基本单元。当用户需要自定义网络时,可以继承 nn.Cell 类,并重写 __init__ 方法和 construct 方法。 __init__ 包含所有网络层的定义,construct 中包含数据(Tensor)的变换过程。

  1. # Define model
  2. class Network(nn.Cell):
  3. def __init__(self):
  4. super().__init__()
  5. self.flatten = nn.Flatten()
  6. self.dense_relu_sequential = nn.SequentialCell(
  7. nn.Dense(28*28, 512),
  8. nn.ReLU(),
  9. nn.Dense(512, 512),
  10. nn.ReLU(),
  11. nn.Dense(512, 10)
  12. )
  13. def construct(self, x):
  14. x = self.flatten(x)
  15. logits = self.dense_relu_sequential(x)
  16. return logits
  17. model = Network()
  18. print(model)

模型训练与测试

  1. # Instantiate loss function and optimizer
  2. loss_fn = nn.CrossEntropyLoss()
  3. optimizer = nn.SGD(model.trainable_params(), 1e-2)
  4. # 1. Define forward function
  5. def forward_fn(data, label):
  6. logits = model(data)
  7. loss = loss_fn(logits, label)
  8. return loss, logits
  9. # 2. Get gradient function
  10. grad_fn = mindspore.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=True)
  11. # 3. Define function of one-step training
  12. def train_step(data, label):
  13. (loss, _), grads = grad_fn(data, label)
  14. optimizer(grads)
  15. return loss
  16. def train(model, dataset):
  17. size = dataset.get_dataset_size()
  18. model.set_train()
  19. for batch, (data, label) in enumerate(dataset.create_tuple_iterator()):
  20. loss = train_step(data, label)
  21. if batch % 100 == 0:
  22. loss, current = loss.asnumpy(), batch
  23. print(f"loss: {loss:>7f} [{current:>3d}/{size:>3d}]")
  1. def test(model, dataset, loss_fn):
  2. num_batches = dataset.get_dataset_size()
  3. model.set_train(False)
  4. total, test_loss, correct = 0, 0, 0
  5. for data, label in dataset.create_tuple_iterator():
  6. pred = model(data)
  7. total += len(data)
  8. test_loss += loss_fn(pred, label).asnumpy()
  9. correct += (pred.argmax(1) == label).asnumpy().sum()
  10. test_loss /= num_batches
  11. correct /= total
  12. print(f"Test: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n")
  13. epochs = 3
  14. for t in range(epochs):
  15. print(f"Epoch {t+1}\n-------------------------------")
  16. train(model, train_dataset)
  17. test(model, test_dataset, loss_fn)
  18. print("Done!")

训练过程需多次迭代数据集,一次完整的迭代称为一轮(epoch)。在每一轮,遍历训练集进行训练,结束后使用测试集进行预测。打印每一轮的loss值和预测准确率(Accuracy),可以看到loss在不断下降,Accuracy在不断提高。

训练结果及完成时间:

学习心得:这是我第一次接触Mindspore,与pytorch不同的是Mindspore旨在提供易开发、高效执行和全场景覆盖,注重开发效率和执行性能,在性能优化方面有优势。而MindSpore 提供了特定的工具,可以将 PyTorch 模型转换为 MindSpore 模型,以利用其特定硬件优化。通过训练一个简单的Mindspore模型,了解了一些训练步骤和机制。对于Mindspore有更深的兴趣。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/783325
推荐阅读
相关标签
  

闽ICP备14008679号