赞
踩
昇思25天打卡营-第一天
1.基本介绍
2快速入门网络构建模型训练
昇思MindSpore是一个深度学习框架,就像pytorch和tensorflow的框架那样,但他比这些框架有更多的优势。有如下特性:
易开发
高效执行
全场景统一部署
首先,先导入minspore的库,
import mindspore from mindspore import nn from mindspore.dataset import vision, transforms from mindspore.dataset import MnistDataset
实现处理数据集,使用的是Minst数据集,因为要下载数据集要先安装download,在命令行可以用pip指令,在这个学习中他提供notebook,使用notebook来download数据集。
- from download import download
-
- url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \
- "notebook/datasets/MNIST_Data.zip"
- 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有自动微分机制,记下来我们进行
正向计算:定义正向计算函数;
反向传播:使用value_and_grade通过函数变换获得梯度计算函数;
参数优化:定义训练函数,使用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%。后面保存模型的参数。
加载保存的权重分为两步:
重新实例化模型对象,构造模型。
加载模型参数,并将其加载至模型上
我说加载结果怎么为空,param_not_load
是未被加载的参数列表,为空时代表所有参数均加载成功。
重新实例化模型对象,然后加载完模型参数,看看预测结果和实际结果对比。
这其中还是错了两个,准确率还是挺高的有80%。
最后输出自己的名字和时间。最后这个时间我改成北京时间,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。