当前位置:   article > 正文

昇思25天打卡营-第一天_昇思25天学习打卡营

昇思25天学习打卡营

昇思25天打卡营-第一天

昇思25天打卡营-第一天

1.基本介绍

2快速入门网络构建模型训练

1.基本介绍

昇思MindSpore是一个深度学习框架,就像pytorch和tensorflow的框架那样,但他比这些框架有更多的优势。有如下特性:

  • 易开发

  • 高效执行

  • 全场景统一部署

2快速入门

首先,先导入minspore的库,

import mindspore
from mindspore import nn
from mindspore.dataset import vision, transforms
from mindspore.dataset import MnistDataset

实现处理数据集,使用的是Minst数据集,因为要下载数据集要先安装download,在命令行可以用pip指令,在这个学习中他提供notebook,使用notebook来download数据集。

  1. from download import download
  2. url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \
  3.     "notebook/datasets/MNIST_Data.zip"
  4. path = download(url, "./", kind="zip", replace=True)

输出结果如下图所示,

MNIST数据集目录结构如下:

MNIST_Data
└── train
    ├── train-images-idx3-ubyte (60000个训练图片)
    ├── train-labels-idx1-ubyte (60000个训练标签)
└── test
    ├── t10k-images-idx3-ubyte (10000个测试图片)
    ├── t10k-labels-idx1-ubyte (10000个测试标签)

这是数据集的分支,每个目录下有的照片介绍。

我在第一次进行数据进分类发生了错误,

我重新启动kernel后可能没有重新导入MnistDataset,我重新导入后就好了。

后面对数据处理操作,MindSpore的dataset使用数据处理流水线(Data Processing Pipeline),需指定map、batch、shuffle等操作。这里我们使用map对图像数据及标签进行变换处理,然后将处理好的数据集打包为大小为64的batch。

网络构建

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

接下来进行模型训练

模型训练

模型训练包含三个步骤:刚好MindSpore有自动微分机制,记下来我们进行

  1. 正向计算:定义正向计算函数;

  2. 反向传播:使用value_and_grade通过函数变换获得梯度计算函数;

  3. 参数优化:定义训练函数,使用set_train设置为训练模式,执行正向计算、反向传播和参数优化。

接着定义测试函数,训练通过多次迭代,每轮遍历训练的数据集,打印loss和accuracy来观察他们的变化。

我前期看他指出来了一行线,我以为出错了。

后来才发现是还没有训练完,

Epoch 1
-------------------------------
loss: 2.307751  [  0/938]
loss: 1.660392  [100/938]
loss: 0.839929  [200/938]
loss: 0.571368  [300/938]
loss: 0.642053  [400/938]
loss: 0.470834  [500/938]
loss: 0.322452  [600/938]
loss: 0.491557  [700/938]
loss: 0.348474  [800/938]
loss: 0.259468  [900/938]
Test: 
 Accuracy: 90.4%, Avg loss: 0.322547 
​
Epoch 2
-------------------------------
loss: 0.341447  [  0/938]
loss: 0.248998  [100/938]
loss: 0.274333  [200/938]
loss: 0.589658  [300/938]
loss: 0.196311  [400/938]
loss: 0.243522  [500/938]
loss: 0.666025  [600/938]
loss: 0.308877  [700/938]
loss: 0.461304  [800/938]
loss: 0.308582  [900/938]
Test: 
 Accuracy: 92.9%, Avg loss: 0.248863 
​
Epoch 3
-------------------------------
loss: 0.389259  [  0/938]
loss: 0.231386  [100/938]
loss: 0.122059  [200/938]
loss: 0.315415  [300/938]
loss: 0.291719  [400/938]
loss: 0.201986  [500/938]
loss: 0.189134  [600/938]
loss: 0.296406  [700/938]
loss: 0.245108  [800/938]
loss: 0.314172  [900/938]
Test: 
 Accuracy: 94.0%, Avg loss: 0.208696 
​
Done!

这个是loss的变化结果,通过多轮的迭代accuracy一直在增加,从一轮90.4%第三轮到达94.0%。后面保存模型的参数。

加载保存的权重分为两步:

  1. 重新实例化模型对象,构造模型。

  2. 加载模型参数,并将其加载至模型上

我说加载结果怎么为空,param_not_load是未被加载的参数列表,为空时代表所有参数均加载成功。

重新实例化模型对象,然后加载完模型参数,看看预测结果和实际结果对比。

这其中还是错了两个,准确率还是挺高的有80%。

最后输出自己的名字和时间。最后这个时间我改成北京时间,

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

闽ICP备14008679号