关于算法:MindSpore这款刚刚开源的深度学习框架我爱了

37次阅读

共计 7025 个字符,预计需要花费 18 分钟才能阅读完成。

转载地址:https://bbs.huaweicloud.com/f…

作者:红色石头

MindSpore!这款刚刚开源的深度学习框架我爱了!

1.jpg

犹记得往年的华为开发者大会 HDC 2020 上,始终受人注目的深度学习框架 MindSpore 终于开源了。

我之前始终关注 MindSpore,还是挺期待的。MindSpore 是一款反对端、边、云独立 / 协同的对立训练和推理框架。与 TensorFlow、PyTorch 等风行深度学习框架对标,MindSpore 旨在大幅度降低 AI 利用开发门槛,让人工智能无处不在。

2.jpg

MindSpore 最大的特点就是开发门槛大大降低,进步开发效率,这样能够显著缩小模型开发工夫。

因而,应用 MindSpore 的劣势能够总结为以下四点:

简略的开发体验

灵便的调试模式

充分发挥硬件潜能

全场景疾速部署

既然开源了,那就连忙上手,试一试这款开源的 MindSpore 怎么样!本文我将介绍 MindSpore 的装置和上手教程,通过一个简略的图像识别案例来跑残缺个 AI 训练和测试流程。

一、MindSpore 的装置
开源框架 MindSpore 的装置办法有很多,能够在 Windows、Ubuntu 上装置,也能够在华为 Ascend 910 上装置。各种详尽的装置办法请见上面的链接:

https://www.mindspore.cn/install

上面介绍两种最简略的装置办法!

  1. Docker 装置

Docker 装置最为简略,可参考:

https://gitee.com/mindspore/m…

以 0.3.0-alpha 版本为例:

CPU:

docker pull mindspore/mindspore-cpu:0.3.0-alpha

GPU:

docker pull mindspore/mindspore-gpu:0.3.0-alpha

装置好后,能够看到装置的镜像,并应用上面的命令创立一个你的容器:

1

docker run -it mindspore/mindspore-cpu:0.3.0-alpha /bin/bash

  1. Win10+Anaconda+MindSpore

应用 Win10 +Anaconda+MindSpore 的形式进行装置也非常简单,本文将采纳这种形式装置 MindSpore。

在 MindSpore 装置首页里,抉择装置相干配置:

版本:0.3.0-alpha

硬件平台:CPU

操作系统:Windows-64

编程语言:Python 3.7.5

首先,在 Win10 上装置 Anaconda,Anaconda 是一个开源的 Python 发行版本,其蕴含了 conda、Python 等 180 多个迷信包及其依赖项。

而后,创立一个虚拟环境。

1). 关上 Anaconda 组件中的 Anaconda Prompt 终端:

3.jpg

2). 应用上面的命令,创立一个虚拟环境 mindspore(名字能够自定义),并进入虚拟环境:

1

2

conda create -n mindspore python=3.7.5

conda activate mindspore

3). 装置依赖库,依据 https://gitee.com/mindspore/m… 列出的依赖库,应用 conda 命令装置。例如:

1

conda install numpy

4). 依据之前抉择的相干配置,在网站:https://www.mindspore.cn/vers… 中抉择所要相应的 MindSpore 版本:

mindspore-0.3.0-cp37-cp37m-win_amd64.whl

能够将.whl 文件下载到本地,应用 pip 装置(应用 conda 命令在线装置速度可能比较慢,因而能够抉择将.whl 文件下载到本地,应用 pip 命令装置):

1

pip install mindspore-0.3.0-cp37-cp37m-win_amd64.whl

最初测试是否装置胜利,进入 Python shell,执行如下命令,如果没有提醒 No module named ‘mindspore’ 等加载谬误的信息,则阐明装置胜利。

4.jpg

至此,装置实现!

二、基于本地 Jupyter 实现 MNIST 手写数据集分类

  1. 装置 Jupyter Notebook

首先,在虚拟环境 mindspore 中装置 Jupyter Notebook。办法是:关上 Anaconda 组件 Anaconda Navigator。

5.jpg

在 Anaconda Navigator 中,Application on 抉择刚建设的虚拟环境 mindspore,在组件 Jupyter Notebook 下点击 install,装置。装置实现后如下图:

6.jpg

点击 Notebook 下的 Launch,即可关上 Jupyter Notebook。

  1. 下载数据集

MNIST 手写数据集想必大家都很相熟了,蕴含 0-9 的数字,由 60000 张训练图片和 10000 张测试图片组成。

7.jpg

MNIST 数据集下载页面:

http://yann.lecun.com/exdb/mn…

应用 MindSpore,咱们能够通过间接定义一个 download_dataset 函数来主动下载 MNIST 数据集:

c1.png

该函数实现将数据集主动下载在本地的 ./MNIST_Data 目录下,训练集放在子目录 /train 下,测试集放在子目录 /test 下。

  1. 数据预处理

MNIST 数据集筹备好了之后,下一步就要对数据集进行一些预处理,包含图片尺寸调整为 32×32(因为咱们应用的是 LeNet-5 网络,前面会介绍),像素归一化、batch_size 设为 32(可调整),等等。

MindSpore 提供了 mindspore.dataset.MnistDataset 来间接定义 Minist 数据集,十分不便。应用 mindspore.dataset.MnistDataset.map 映射函数,将数据操作利用到数据集。

咱们定义 create_dataset() 函数来创立数据集:

c2.png

通过下面的函数,就实现了对刚下载的 MNIST 数据集的预处理。

  1. 定义网络

LeNet-5 是一种用于手写体字符识别的十分高效的卷积神经网络。LeNet-5 共有 7 层,不蕴含输出,每层都蕴含可训练参数;每个层有多个 Feature Map,每个 FeatureMap 通过一种卷积滤波器提取输出的一种特色。

8.jpg

1) 模型初始化

应用 mindspore.common.initializer.TruncatedNormal 办法对参数进行初始化,定义 conv 和 fc_with_initialize 别离对卷积层和全连贯层进行初始化。

c3.png

应用 mindspore.common.initializer.TruncatedNormal 办法,能够十分便捷地实现网络权重系数的初始化操作,不须要自定义初始化函数。

2) 定义 LeNet-5 网络

MindSpore 来定义 LeNet-5 网络也很简略,依据网络结构,定义相应的卷积层和全连贯层即可。在初始化函数 init 种定义神经网络的各层,而后通过定义 construct 办法来实现神经网络的前向结构。

c4.png

LeNet-5 是一个十分典型且简略的卷积神经网络,从 construct 办法能够具体看到 LeNet-5 各层的构造。

3) 定义损失函数

MindSpore 反对的损失函数有 SoftmaxCrossEntropyWithLogits、L1Loss、MSELoss 等。这里应用 SoftmaxCrossEntropyWithLogits 穿插熵损失函数。

from mindspore.nn.loss import SoftmaxCrossEntropyWithLogits

define the loss function

net_loss = SoftmaxCrossEntropyWithLogits(is_grad=False, sparse=True, reduction=’mean’)
4) 定义网络梯度降落算法

MindSpore 反对的梯度降落算法有 Adam、AdamWeightDecay、Momentum 等。这里应用风行的 Momentum 算法。其中,学习率设为 0.01,momentum 参数设为 0.9。

learning rate setting lr = 0.01 momentum = 0.9 # define the optimizer net_opt = nn.Momentum(network.trainable_params(), lr, momentum)

  1. 训练网络

1) 模型保留

mindspore.train.callback.ModelCheckpoint 办法能够保留网络模型和参数。

config_ck = CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10)

save the network model and parameters for subsequence fine-tuning

ckpoint_cb = ModelCheckpoint(prefix=”checkpoint_lenet”, config=config_ck)
2) 训练网络

训练网络应用 model.train 办法进行。这里把 epoch_size 设置为 1,对数据集进行 1 个迭代的训练。训练的过程中会打印 loss 值的变动。

c5.png

其中,mnist_path 是 MNIST 数据集门路。

3) 硬件信息

在主函数中,别忘了配置 MindSpore 运行的硬件信息。因为咱们是在 CPU 环境下,所以‘–device_target’设置为“CPU”。

这里的 ‘–device_target’ 默认是“CPU”,依据硬件状况也能够抉择“Ascend”或“GPU”。应用的是图模式“context.GRAPH_MODE”。

4) 模型训练

执行程序,模型训练开始。训练过程中会打印 loss 值:

c7.png

能够看到 loss 总体来说会逐渐减小,精度逐步提高,最终的 loss 为 0.067。

训练实现之后,失去保留的模型文件:

checkpoint_lenet-1_1875.ckpt

  1. 模型测试

在失去模型文件后,应用 model.eval() 接口读入测试数据集,通过模型运行测试数据集失去的后果。定义测试函数 test_net():

c8.png

运行测试网络:

test_net(args, network, model, mnist_path)
============== Starting Testing ============== ============== Accuracy:{‘Accuracy’: 0.9663461538461539} ==============
最终,能够看到刚刚训练的 LeNet-5 网络模型在测试集上的精度是 96.63%,成果十分不错。

至此,咱们应用 MindSpore 框架训练 LeNet-5 模型曾经实现。实现了基于本地 Jupyter 实现 MNIST 手写数据集分类。总的来说,MindSpore 提供了很多模块化的办法来进行模型搭建和训练,十分不便咱们可能疾速搭建一个神经网络模型。大家能够依据本人理论需要,上手搭建一个本人的神经网络试试。

本节残缺代码:

https://gitee.com/mindspore/d…

三、在云服务器上应用 MindSpore
除了能够在本地应用 MindSpore 框架之外,咱们还能够在华为云服务器上应用 MindSpore。在华为云上应用 MindSpore 的还有一个益处是,咱们能够申请应用昇腾 AI 处理器资源池作为硬件。

ModelArts 是华为云提供的面向开发者的一站式 AI 开发平台,而且集成了 MindSpore。上面咱们将在 ModelArts 下应用 ResNet-50 网络辨认 CIFAR-10 图片。

  1. 筹备 ModelArts

1) 进入华为云官网,注册账号。

具体操作:

https://support.huaweicloud.c…

2) 获取拜访密钥并实现 ModelArts 配置。

具体操作:

https://support.huaweicloud.c…

3) 创立 OBS 桶

具体操作:

https://support.huaweicloud.c…

  1. 申请服务器昇腾 AI 处理器资源

为了在 ModelArts 上应用华为云昇腾 AI 处理器,咱们须要申请体验资格,申请形式也很简略,可在上面的网站上进行申请:

https://console.huaweicloud.c…

9.jpg

申请时的内容大家能够填认真些,个别失常的话两个工作日就批下来了。

  1. 数据筹备

1) 下载 CIFAR-10 数据集

CIFAR-10 该数据集共有 60000 张彩* 像,这些图像是 3232,分为 10 个类,每类 6000 张图。

10.jpg

CIFAR-10 数据集下载地址:

http://www.cs.toronto.edu/~kr…

留神下载 CIFAR-10 binary version 版本。

2) 新建一个本人的 OBS 桶(例如:mine-ms-dataset)

ModelArts 应用对象存储服务(Object Storage Service,简称 OBS)进行数据存储,因而,在开始训练任务之前,须要将数据上传至 OBS。

首先,登录 OBS 治理控制台:

https://storage.huaweicloud.c…

创立 OBS 桶 mine-ms-dataset(名称可批改,上面相似)。

而后,在刚创立的 OBS 桶里,创立用于存放数据的文件夹:在桶列表单击待操作的桶,在左侧导航栏,单击“对象”,新建文件夹 mine-cifar-10。

最初,将下载好的 CIFAR-10 数据集依照以下目录构造上传至数据目录 mine-cifar-10 中:

└─对象存储 /mine-ms-dataset/mine-cifar-10

├─train
│      data_batch_1.bin
│      data_batch_2.bin
│      data_batch_3.bin
│      data_batch_4.bin
│      data_batch_5.bin
│
└─eval
    test_batch.bin
  1. 程序筹备

新建一个 OBS 桶(例如:mine-resnet50-train),在桶中创立代码目录(例如:mine-resnet50_cifar10_train)。同时在该桶中创立 output 目录和 log 目录,用来寄存模型和日志。

将网址:

https://gitee.com/mindspore/d…

中的两个 .py 文件 dataset.py 和 resnet50_train.py 下载并上传到代码目录 mine-resnet50_cifar10_train 中。

代码目录 mine-resnet50_cifar10_train 构造如下:

└─对象存储 /mine-resnet50-train

├─mine-resnet50_cifar10_train
│      dataset.py
│      resnet50_train.py
│
├─output
└─log
  1. 创立训练任务

筹备好数据和执行脚本当前,上面就能够在云服务器上创立训练任务了。

1) 进入 ModelArts 控制台

关上华为云 ModelArts 主页

https://www.huaweicloud.com/p…

点击“进入控制台”。

2) 应用 MindSpore 作为罕用框架创立训练作业

在左侧导航栏中抉择“训练治理 > 训练作业”,默认进入“训练作业”列表。

在训练作业列表中,单击左上角“创立”,进入“创立训练作业”页面。

在创立训练作业页面,训练作业名称自定义,例如 mine-resnet50-trainjob。填写训练作业相干参数,具体配置参数如下:

11.jpg

值得注意的时,算法起源罕用框架抉择 Ascend-Powered-Engine,因为咱们应用的是硬件是华为云昇腾 AI 处理器。MindSpore 版本抉择 MindSpore-0.1-python3.7-aarch64 即可。

配置完之后,点击下一步 -> 提交 -> 返回训练作业列表,能够看到训练作业 mine-resnet50-trainjob 正在运行:

12.jpg

整个运行过程大略 8 分半钟,显示运行胜利,示意模型训练测试实现。

13.jpg

最初,点击训练作业 mine-resnet50-trainjob,在日志里能够看到模型在测试集上的准确率为 92.49%,阐明该模型成果不错。

14.jpg

咱们还能够从 OBS 种下载日志文件并查看。

以上就是在云上应用 MindSpore 的简略教程。

四、总结:
本文次要通过两个理论利用案例对开源框架 MindSpore 进行介绍。一是基于本地 Jupyter Notebook 的 MNIST 手写数据辨认;二是基于华为云服务器的 CIFAR-10 图像分类。两个案例均围绕并应用了 MindSpore。

从我集体的应用感觉来看,MindSpore 用起来还是很棘手的,而且函数封装得比拟简洁,应用起来较为不便。通过手把手的教程,大家齐全能够本人入手实操一下,感受一下开源框架 MindSpore 的魅力。

大家也能够依据本人的具体利用场景和实用案例,应用 MindSpore,搭建神经网络模型,解决理论问题。无论是计算机视觉还是自然语言解决,置信 MindSpore 都能给大家带来晦涩的体验。

参考资料:

https://www.mindspore.cn/

https://www.mindspore.cn/tuto…

https://support.huaweicloud.c…

正文完
 0