暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MindSpore CPU环境入门模型LeNet实践

布衣之旅 2021-02-11
438
选择MindSpore作为入门的AI框架,通过前面在windows环境非常简便的使用方式部署起来之后,按照惯例我们寻找一个官方提供的实例来试运行下,先从使用的角度大概理解下mindspore框架使用思路是怎样的,AI类应用程序化一般使用过程是怎样的?
切记,这个时候也别去深究模型的实现和内部机制,不然也容易放弃!先从使用,概要认识的角度来理解。



1.准备源码

官方在框架的源码中提供了一系列的代码实例,可以从如下渠道获取。
    GitHub:https://github.com/mindspore-ai/mindspore
    Gitee:https://gitee.com/mindspore/mindspore
    当前从入门的角度来看,暂时还不必深入源码来研究MindSpore框架本身,先通过本地部署的环境,可视化的IDE,将官方提供的运行实例run起来,现有一个直观的使用方面的理解。

    1)下载实例代码

    官方在Gitee(国内的代码托管机构,比较快)托管的MindSpore框架共有12个单独的仓库,分别对应不同的功能性体系,其中docs仓库框架相关的配套文档等内容在其中管理。
    Gitee的MindSpore的docs项目仓库地址如下(这里注意本地部署的mindspore环境,切换下载对应版本的docs工程):
      https://gitee.com/mindspore/docs.git
      下载到本地后的目录结构如下。

      2)docs工程说明

      docs工程单独仓库管理,一方面可以考虑按照版本管理docs,将不同的版本框架工程和不同版本的docs工程版本对应起来管理;另一方面,docs工程独立,很多内容可以和官网的web工程结合起来,将很多入门的说明、帮助内容在工程和web官网统一展示管理。
      本篇直接相关的是docs/tutorials/tutorial_code目录,该目录中存放了不同mindspore框架版本对应的各类异构环境下的实例代码。




      2.挑选入门的实例

      在当下的深度学习入门领域,神经网络是主流的一种深度学习的方法领域,采用网络模型来实现机器学习的自动化、自主性学习和应用能力是当前AI框架支持的主流内容。
      选择入门的实例从mindspore官网推荐,同时也结合其它框架的入门实例来看,LeNet是一种用于手写体字符识别的非常高效的卷积神经网络,那么按照推荐,就从LeNet网络的训练模型和推理的角度来看机器如何基于输入的数据来实现识别的。
      实例源码的具体路径:
        windows本地目录\docs\tutorials\tutorial_code\lenet
        该实例源码作为入门相对比较简单易理解,程序结合了mindspore框架提供的API能力,同时采用了该算法经典的数据集,也采用了深度学习的一般的训练和推理的使用过程来进行处理演示。




        3.本地化运行实例

        1)使用本地IDE“”打开lenet实例源码

        导入源码非常简单,从该实例源码结构来看非常简单,主要由两个源码文件组成:
          +lenet
          + utils
          - __init__.py #python模块化文件,空文件
          - dataset.py #数据集封装处理文件
          - lenet.py #主实例程序文件,包括该网络模型的训练和推理测试

          2)配置python环境

          打开程序运行配置页,选择python运行环境进行配置。

          配置环境如下:

          分别将程序运行实例名、程序main运行入口文件、python运行环境、以及可能的运行参数配置。

          3)运行配置好的程序:

          程序的运行步骤如下:

          • 数据集的下载(这里注意下,如果数据下载不完整,可以清空运行程序下载);

          • 结合数据进行模型训练;

          • 结合训练出的模型,使用测试数据进行推理验证。




          4.总结认识

          1)解读实例程序结构

          因为是计算机来实现人工智能的能力,所以基本上AI类的应用自然在程序结构上也不会脱离现有的模式,大部分依然是数据,输入/输出,程序处理这样的结构。
          LeNet实例也不例外,程序结构基本如下:

          • 数据集准备:

          MNIST数据集是一个非常有名的手写体数字识别数据集,很多地方这个数据集会被用作深度学习的入门样例。该数据集在网上公开,可以直接下载,官方给出的下载网址如下:
            官方网站 http://yann.lecun.com/exdb/mnist/
            在mindspore给出的实例中,程序这部分有一个辅助工具下载并解压,无需手动去完成这个步骤,该数据集共有4个文件,主要由于如下构成,分成两类:
            • train训练数据集

              train-images-idx3-ubyte.gz    #55000张训练集,5000张验证集
              train-labels-idx1-ubyte.gz #训练集图片对应的标签
              • test测试数据集

                t10k-images-idx3-ubyte.gz     #10000张测试集
                t10k-labels-idx1-ubyte.gz #测试集图片对应的标签
                • 数据处理辅助工具dataset.py

                该工具类只有简单的三个方法,主要目的是在指定的地方下载实例运行需要的数据集,另外完成下载后的解压工作。
                  #对外使用的数据集下载方法
                  def download_dataset()
                  #单个指定URL路径的文件下载方法
                  def download_progress(url, file_name)
                  #解压指定路径文件方法
                  def unzipfile(gzip_path)
                  三个基本方法的关系如下,数据集下载方法为外部使用入口方法,内部两个方法分别是具体下载和解压数据实现。


                  • 模型主程序封装

                  主程序训练和验证一个模型的基本步骤如下:

                  • “create_dataset”方法创建符合mindspore框架要求的数据集结构,是个通用方法封装,由于框架面临的原始数据集可能有很多不同样的格式,比如MNIST数据集就是一套较为常见的图片类数据字节存储格式,那么框架为了进行归一化处理,提供了相应的方法来进行数据集的统一转换。

                    create_dataset:
                    1)该方法内容即根据指定的文件路径,进行数据集的加载和转换处理;
                    2)初始化数据集上的基本操作;
                    3)最终返回该数据集对象;
                    • 训练模型封装方法

                      train_net:
                      1)该方法基本实现train类型数据集的创建和加载以及训练方法封装使用;
                      2)通过create_dataset通用数据集方法,拼装train数据集路径进行数据集构建;
                      3)通过网络模型的train核心方法完成训练数据集的加载和训练处理
                      network_model.train(epoch_size, ds_train, callbacks=[ckpoint_cb, LossMonitor()], dataset_sink_mode=sink_mode)
                      注意:这里有一个callbacks操作,就是按照要求训练生成阶段的checkpoint模型文件。
                      • 模型验证封装方法

                        test_net:
                        1)该方法主要实现了test类型数据集的创建和加载以及验证方法的封装使用;
                        2)通过加载指定的模型训练输出的checkpoint模型文件,获取参数字典;
                        3)将该参数字典注入到模型中去,同时加载测试验证数据集;
                        4)通过网络模型的eval方法,完成测试数据集和训练模型的验证处理。
                        acc = network_model.eval(ds_eval, dataset_sink_mode=False)
                        • 主程序“main”方法,负责组织程序的主体运行逻辑,串联该模型训练和验证的运行步骤。

                          1)解析运行参数,mindspore根据运行参数args.device_target指定来确认本地运行环境;
                          当前的运行环境为CPU,属于默认参数环境。
                          2)下载原始数据集,根据数据集辅助工具dataset.py提供的下载和解压方法完成原始数据集
                          下载和解压。
                          3)接下来的几个步骤是关系到深度学习的一般内容步骤,这部分暂时先不讨论,后续深入去理解,
                          基本上包含如下几个步骤:
                          a.学习参数设置;
                          b.定义loss函数;
                          c.创建指定网络模型对象,这里使用LetNet
                          d.定义优化器
                          e.定义生成checkpoint文件的配置信息
                          f.根据数据集训练模型,输出模型的checkpoint文件
                          g.根据模型的checkpoint文件,结合验证数据集,验证输出结果的准确性


                          2)mindspore框架使用方式

                          框架面向使用场景开放API,在python应用场景下通过一个lib的import方式为应用程序提供相应的深度学习使用的各个模块的核心能力,涵盖了数据集、计算组件、网络模型支持等一系列能力;
                          目前为止初步认识了一个入门的模型在mindspore大概是一个怎样的使用过程,尽管这些过程步骤的详细内部含义还没有深入理解;

                          但是我们已经结合程序的一般运行步骤对其有了初步概要的认识,下一篇,考虑结合对当前深度学习的一些概念的理解来加深对该入门实例的掌握。


                          文章转载自布衣之旅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论