mindsphere平台 (MindSpore!这款刚刚开源的深度学习框架我爱了!)

文章编号:8998 更新时间:2024-02-21 分类:互联网资讯 阅读次数:

资讯内容

【摘要】本文重要经过两个实践运行案例:一是基于本地JupyterNotebook的MNIST手写数据识别;二是基于华为云主机的CIFAR-10图像分类,对开源框架MindSpore启动引见。

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

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

MindSpore最大的特点就是开发门槛大大降低,提高开发效率,这样可以清楚缩小模型开发期间。

因此,经常使用MindSpore的长处可以总结为以下四点:

●繁难的开发体验

●灵敏的调试形式

●充散施展配件潜能

●全场景极速部署

既然开源了,那就连忙上手,试一试这款开源的MindSpore怎样样!本文我将引见MindSpore的装置和上手教程,经过一个繁难的图像识别案例来跑完整个AI训练和测试流程。

一、MindSpore的装置

开源框架MindSpore的装置方法有很多,可以在Windows、Ubuntu上装置,也可以在华为Ascend910上装置。各种详尽的装置方法请见上方的链接:

上方引见两种最繁难的装置方法!

1.Docker装置 mindsphere平台MindSpore

Docker装置最为繁难,可参考:

以0.3.0-alpha版本为例:

dockerpullmindspore/mindspore-cpu:0.3.0-alpha

dockerpullmindspore/mindspore-gpu:0.3.0-alpha

装置好后,可以看到装置的镜像,并经常使用上方的命令创立一个你的容器:

dockerrun-itmindspore/mindspore-cpu:0.3.0-alpha/bin/bash

2.Win10+Anaconda+MindSpore

经常使用Win10+Anaconda+MindSpore的形式启动装置也十分繁难,本文将驳回这种形式装置MindSpore。

在MindSpore装置首页里,选用装置关系性能:

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

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

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

2).经常使用上方的命令,创立一个虚构环境mindspore(名字可以自定义),并进入虚构环境:

condacreate-nmindsporepython=3.7.5condaactivatemindspore

3).装置依赖库,依据列出的依赖库,经常使用conda命令装置。例如

condainstallnumpy

4).依据之前选用的关系性能,在网站:当选用所要相应的MindSpore版本:

mindspore-0.3.0-cp37-cp37m-win_amd64.whl

可以将.whl文件下载到本地,经常使用pip装置(经常使用conda命令在线装置速度或者比拟慢,因此可以选用将.whl文件下载到本地,经常使用pip命令装置):

pipinstallmindspore-0.3.0-cp37-cp37m-win_amd64.whl

最后测试能否装置成功,进入Pythonshell,口头如下命令,假设没有揭示Nomodulenamed'mindspore'等加载失误的消息,则说明装置成功。

至此,装置成功!

二、基于本地Jupyter成功MNIST手写数据集分类

1.装置JupyterNotebook

首先,在虚构环境mindspore中装置JupyterNotebook。方法是:关上Anaconda组件AnacondaNavigator。

在AnacondaNavigator中,Applicationon选用刚建设的虚构环境mindspore,在组件JupyterNotebook下点击install,装置。装置成功后如下图:

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

2.下载数据集

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

MNIST数据集下载页面:

经常使用MindSpore,咱们可以经过间接定义一个download_dataset函数来智能下载MNIST数据集:

defdownload_dataset():"""Downloadthe>该函数成功将数据集智能下载在本地的./MNIST_Data目录下,训练集放在子目录/train下,测试集放在子目录/test下。

3.数据预处置

MNIST数据集预备好了之后,下一步就要对数据集启动一些预处置,包括图片尺寸调整为32x32(由于咱们经常使用的是LeNet-5网络,前面会引见),像素归一化、batch_size设为32(可调整),等等。

MindSpore提供了mindspore.dataset.MnistDataset来间接定义Minist数据集,十分繁难。经常使用mindspore.dataset.MnistDataset.map映射函数,将数据操作运行到数据集。

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

defcreate_dataset(data_path,batch_size=32,repeat_size=1,num_parallel_workers=1):"""create>经过上方的函数,就成功了对刚下载的MNIST数据集的预处置。

4.定义网络

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

1)模型初始化

经常使用mindspore.common.initializer.TruncatedNormal方法对参数启动初始化,定义conv和fc_with_initialize区分对卷积层和全衔接层启动初始化。

importmindspore.nnasnnfrommindspore.common.initializerimportTruncatedNormaldefconv(in_channels,out_channels,kernel_size,stride=1,padding=0):"""Convlayerweightinitial."""weight=weight_variable()returnnn.Conv2d(in_channels,out_channels,kernel_size=kernel_size,stride=stride,padding=padding,weight_init=weight,has_bias=False,)deffc_with_initialize(input_channels,out_channels):"""Fclayerweightinitial."""weight=weight_variable()bias=weight_variable()returnnn.Dense(input_channels,out_channels,weight,bias)defweight_variable():"""Weightinitial."""returnTruncatedNormal(0.02)

经常使用mindspore.common.initializer.TruncatedNormal方法,可以十分方便地成功网络权重系数的初始化操作,不须要自定义初始化函数。

2)定义LeNet-5网络

MindSpore来定义LeNet-5网络也很繁难,依据网络结构,定义相应的卷积层和全衔接层即可。在初始化函数__init__种定义神经网络的各层,而后经过定义construct方法来成功神经网络的前向结构。

classLeNet5(nn.Cell):"""Lenetnetworkstructure."""#definetheoperatorrequireddef__init__(self):super(LeNet5,self).__init__()self.conv1=conv(1,6,5)self.conv2=conv(6,16,5)self.fc1=fc_with_initialize(16*5*5,120)self.fc2=fc_with_initialize(120,84)self.fc3=fc_with_initialize(84,10)self.relu=nn.ReLU()self.max_pool2d=nn.MaxPool2d(kernel_size=2,stride=2)self.flatten=nn.Flatten()#usetheprecedingoperatorstoconstructnetworksdefconstruct(self,x):x=self.conv1(x)x=self.relu(x)x=self.max_pool2d(x)x=self.conv2(x)x=self.relu(x)x=self.max_pool2d(x)x=self.flatten(x)x=self.fc1(x)x=self.relu(x)x=self.fc2(x)x=self.relu(x)x=self.fc3(x)returnx

LeNet-5是一个十分典型且繁难的卷积神经网络,从construct方法可以详细看到LeNet-5各层的结构。

3)定义损失函数

MindSpore允许的损失函数有SoftmaxCrossEntropyWithLogits、L1Loss、MSELoss等。这里经常使用SoftmaxCrossEntropyWithLogits交叉熵损失函数。

frommindspore.nn.lossimportSoftmaxCrossEntropyWithLogits#definethelossfunctionnet_loss=SoftmaxCrossEntropyWithLogits(is_grad=False,sparse=True,)

4)定义网络梯度降低算法

MindSpore允许的梯度降低算法有Adam、AdamWeightDecay、Momentum等。这里经常使用盛行的Momentum算法。其中,学习率设为0.01,momentum参数设为0.9。

#learningratesettinglr=0.01momentum=0.9#definetheoptimizernet_opt=nn.Momentum(network.trainable_params(),lr,momentum)

5.训练网络

1)模型保留

mindspore.train.callback.ModelCheckpoint方法可以保留网络模型和参数。

config_ck=CheckpointConfig(save_checkpoint_steps=1875,keep_checkpoint_max=10)#savethenetworkmodelandparametersforsubsequencefine-tuningckpoint_cb=ModelCheckpoint(prefix="checkpoint_lenet",config=config_ck)

2)训练网络

训练网络经常使用model.train方法启动。这里把epoch_size设置为1,对数据集启动1个迭代的训练。训练的环节中会打印loss值的变动。

frommindspore.nn.metricsimportAccuracyfrommindspore.train.callbackimportLossMonitorfrommindspore.trainimportModeldeftrain_net(args,model,epoch_size,mnist_path,repeat_size,ckpoint_cb,sink_mode):"""definethetrainingmethod"""print("==============StartingTraining==============")#loadtraining>其中,mnist_path是MNIST数据集门路。

3)配件消息

在主函数中,别忘了性能MindSpore运转的配件消息。由于咱们是在CPU环境下,所以‘--device_target’设置为CPU。

parser=argparse.ArgumentParser(description='MindSporeLeNetExample')parser.add_argument('--device_target',type=str,,choices=['Ascend','GPU','CPU'],)args=parser.parse_args(args=[])context.set_context(mode=context.GRAPH_MODE,device_target=args.device_target)

这里的'--device_target'自动是CPU,依据配件状况也可以选用Ascend或GPU。经常使用的是图形式context.GRAPH_MODE。

4)模型训练

口头程序,模型训练开局。训练环节中会打印loss值:

...epoch:1step:262,lossis1.9212162epoch:1step:263,lossis1.8498616epoch:1step:264,lossis1.7990671epoch:1step:265,lossis1.9492403epoch:1step:266,lossis2.0305142epoch:1step:267,lossis2.0657792epoch:1step:268,lossis1.9582214epoch:1step:269,lossis0.9459006epoch:1step:270,lossis0.8167224epoch:1step:271,lossis0.7432692...

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

训练成功之后,失掉保留的模型文件:

checkpoint_lenet-1_1875.ckpt

6.模型测试

在失掉模型文件后,经常使用model.eval()接口读入测试数据集,经过模型运转测试数据集失掉的结果。定义测试函数test_net():

deftest_net(args,network,model,mnist_path):"""Definetheevaluationmethod."""print("==============StartingTesting==============")#loadthesavedmodelforevaluationparam_dict=load_checkpoint("checkpoint_lenet-1_1875.ckpt")#loadparametertothenetworkload_param_into_net(network,param_dict)#loadtesting>运转测试网络:
test_net(args,network,model,mnist_path)==============StartingTesting============================Accuracy:{'Accuracy':0.9663461538461539}==============

最终,可以看到刚刚训练的LeNet-5网络模型在测试集上的精度是96.63%,成果十分不错。

至此,咱们经常使用MindSpore框架训练LeNet-5模型曾经成功。成功了基于本地Jupyter成功MNIST手写数据集分类。总的来说,MindSpore提供了很多模块化的方法来启动模型搭建和训练,十分繁难咱们能够极速搭建一个神经网络模型。大家可以依据自己实践需求,上手搭建一个自己的神经网络试试。

本节完整代码:

三、在云主机上经常使用MindSpore

除了可以在本地经常使用MindSpore框架之外,咱们还可以在华为云主机上经常使用MindSpore。在华为云上经常使用MindSpore的还有一个好处是,咱们可以放开经常使用昇腾AI处置器资源池作为配件。

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

1.预备ModelArts

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

详细操作:

2)失掉访问密钥并成功ModelArts性能。

详细操作:

3)创立OBS桶

详细操作:

2.放开主机昇腾AI处置器资源

为了在ModelArts上经常使用华为云昇腾AI处置器,咱们须要放开体验资历,放开形式也很繁难,可在上方的网站上启动放开:

放开时的内容大家可以填细心些,普通反常的话两个上班日就批上去了。

3.数据预备

1)下载CIFAR-10数据集

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

CIFAR-10数据集下载地址:

留意下载CIFAR-10binaryversion版本。

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

ModelArts经常使用对象存储服务(ObjectStorageService,简称OBS)启动数据存储,因此,在开局训练义务之前,须要将数据上行至OBS。

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

创立OBS桶mine-ms-dataset(称号可修正,上方相似)。

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

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

└─对象存储/mine-ms-dataset/mine-cifar-10├─train│>4.程序预备

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

将网址:

中的两个.py文件>代码目录mine-resnet50_cifar10_train结构如下:

└─对象存储/mine-resnet50-train├─mine-resnet50_cifar10_train│>5.创立训练义务

预备好数据和口头脚本以后,上方就可以在云主机上创立训练义务了。

1)进入ModelArts控制台

关上华为云ModelArts主页

点击进入控制台。

2)经常使用MindSpore作为罕用框架创立训练作业

在左侧导航栏当选用训练治理>训练作业,自动进入训练作业列表。

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

在创立训练作业页面,训练作业称号自定义,例如mine-resnet50-trainjob。填写训练作业关系参数,详细性能参数如下:

性能完之后,点击下一步->提交->前往训练作业列表,可以看到训练作业mine-resnet50-trainjob正在运转:

整个运转环节大略8分半钟,显示运转成功,示意模型训练测试成功。

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

咱们还可以从OBS种下载日志文件并检查。

以上就是在云上经常使用MindSpore的繁难教程。

四、总结:

从我团体的经常使用觉得来看,MindSpore用起来还是很随手的,而且函数封装得比拟繁复,经常使用起来较为繁难。经过手把手的教程,大家齐全可以自己入手实操一下,感触一下开源框架MindSpore的魅力。

大家也可以依据自己的详细运行场景和适用案例,经常使用MindSpore,搭建神经网络模型,处置实践疑问。无论是计算机视觉还是人造言语处置,置信MindSpore都能给大家带来流利的体验。

参考资料:

点击关注,第一期间了解华为云新颖技术~

颁布于2020-07-0211:31
标签: 深度学习库前端框架华为云主机TensorLayer

本文地址: https://yihaiquanyi.com/article/957aff39a7d3f6fc8a6a.html

上一篇:华为云的云服务器华为云的云服务器底层技术...
下一篇:云服务器如何搭建云服务器如何选择配置需要...

发表评论