一、基础介绍
门槛最低的深度学习引导 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/463019160MindSpore入门实践 - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/463229660
1. 课程内容
- 快速入门:准备数据 - 创建模型 - 损失与优化 - 训练与推理
- 张量TENSOR:初始化 - 属性 - 索引 - 转换
- 数据处理:整体流程 - 加载 - 迭代 - 处理与增强
- 创建网络:定义模型 - 模型参数 - 构建网络
- 自动微分:求导 - 梯度缩放 - 停止计算
- 模型训练:超参 - 损失函数 - 优化器 - 训练
- 保存与加载:模型保存 - 加载模型 - 迁移学习
- 推理与部署:模型导出 - 转化格式 - 部署与体验
2. MindSpore全场景AI计算框架
3. MindSpore架构特点
- 用户态易用,用户态可以非常方便地去使用
- 运行态高效,运行的时候非常快速
- 部署态灵活,部署的时候非常灵活方便
4. MindSpore全场景AI计算框架的流程图
5. MindSpore全场景AI计算框架的API设计
- High-Level:封装如网络模型训练相关的Models、量化Quant和混合精度Amp的一些接口,做到高层封装来方便开发者使用
- Medium-Level:最常用的,提供类似于神经网络的操作,如损失函数、优化器和数据处理等接口
- Low-Level:用得比较少或者针对一些特殊的处理和特殊的场景或者深度用户才会使用到,如果觉着神经网络层或者nn层的API不够用的时候,就可以调用Opsv
6. 华为昇腾AI全栈解决方案
7. MindSpore的安装
MindSpore官网华为开源自研AI框架MindSpore。自动微分、并行加持,一次训练,可多场景部署。支持端边云全场景的深度学习训练推理框架,主要应用于计算机视觉、自然语言处理等AI领域,面向数据科学家、算法工程师等人群。主要具备基于源码转换的通用自动微分、自动实现分布式并行训练、数据处理、以及图执行引擎等功能特性。借助自动微分,轻松训练神经网络。框架开源,华为培育AI开发生态。
https://www.mindspore.cn/install
二、快速入门
- 快速入门:准备数据 - 创建模型 - 损失与优化 - 训练与推理
- MNIST数据集 + Lenet5网络模型
1. MindSpore Vision开发套件的安装
1. 访问 https://gitee.com/mindspore/vision
2. 克隆/下载
3. 在Terminal里面输出 git clone https://gitee.com/mindspore/vision.git
4. 在Terminal里面输出 cd vision
5. 在Terminal里面输出 python setup.py install
2. 快速入门:手写数字识别
2.1 下载并处理数据集
- MNIST数据集是由10类 (0-9) 28*28的灰度图片组成的,训练数据集包含60000张图片,测试数据集包含10000张图片
- MindSpore Vision套件提供了用于下载并处理MNIST数据集的Mnist模块,将数据集下载、解压到指定位置并进行数据处理如下
from mindvision.dataset import Mnist
download_train = Mnist(path="./mnist", split="train", batch_size=32, shuffle=True, resize=32, download=True)
download_eval = Mnist(path="./mnist", split="test", batch_size=32, resize=32, download=True)
dataset_train = download_train.run()
dataset_eval = download_eval.run()
# 参数说明
# path:数据集路径
# split:数据集类型,支持train、test、infer,默认train
# batch_size:每个训练批次设定的数据大小,默认为32,当前数据集轮次每一个迭代的大小,一起塞到网络模型里面训练的最小单位
# repeat_num:训练时遍历数据集的次数,默认为1
# shuffle:是否需要将数据集随机打乱 (可选参数)
# resize:输出图像的图像大小,默认为32*32
# download:是否需要下载数据集,默认为false
2.2 创建模型
- 按照LeNet的网络结构,LeNet除去输入层共有7层,其中有3个卷积层、2个子采样层和3个全连接层
- MindSpore Vision套件提供了LeNet网络模型接口lenet,定义网络模型如下
from mindvision.classification.models import lenet
network = lenet(num_classes=10)
2.3 定义损失函数和优化器
- 要训练神经网络模型。需要定义损失函数和优化器函数
- 损失函数这里使用交叉熵损失函数SoftmaxCrossEntropyWithLogits
- 优化器这里使用Momentum
import mindspore.nn as nn
from mindspore.train import Model
# 定义损失函数
net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')
# 定义优化器函数
net_opt = nn.Momentum(network.trainable_params(), learning_rate=0.01, momentum=0.9)
# 一般来说,学习率learning_rate不会设置太大,它控制着数据每次更新的幅度
# 动量momentum
2.4 训练及保存模型
- 在开始训练之前,MindSpore需要提前声明网络模型在训练过程中是否需要保存中间过程和结果,因此使用ModelCheckpoint接口用于保存网络模型和参数,以便进行后续的Fine-tuning (微调) 操作
from mindspore.train.callback import ModelCheckpoint,