【啃书吧:深度学习与MindSpore实践】第三章 3.4 用MindSpore实现简单神经网络(下)

初读:2021年1月18日至2021年1月21日

啃书进度会在目录中标出来。本次目标是完成第三章 3.4节用MindSpore实现简单神经网络的代码部分(P34-P36)。

进度010.png

这一节的内容对我来说挑战不小,所以上一周只完成了LeNet网络原理部分,重点是理解各层的功能和参数。本周接着把是运行代码部分啃下来,重点是把LeNet训练模型跑下来,不涉及模型的性能评估。

3.4.2  详细步骤

下面描述使用LeNet网络训练和推理的详细步骤,并给出示例代码。

1. 加载MindSpore模块

使用MindSpore API前需要先导入MindSpore API和辅助模块,如代码3.1所示

代码3.1.png

2. 导入数据集

使用MindSpore 数据格式API创建Mnist数据集。创建之前需要先下载Mnist数据集,链接:http://yann.lecun.com/exdb/mnist/index.html。 训练和测试数据分别解压到不同的目录下。在我的机器里是这样存的:

数据解压.png

3. 定义LeNet网络

核心代码如代码3.2所示

代码3.2.png

__init__()函数完成卷积层和全连接层的初始化。初始化参数包括输入个数、输出个数、卷积层参数以及卷积核大小。因为原始数据集的图片大小是28×28,所以在创建数据集的过程中需要将输入大小转变成32×32.

construct()函数实现前向传播。根据定义对输入依次进行卷积、激活、池化等操作,最后返回计算结果 。在全连接层之前,先对数据进行展开操作,使用Flatten()函数,在保留第0轴的前提下将输入张量进行扁平化处理。

4.  设置超参数并创建网络

定义损失函数和优化器。损失函数使用SoftmaxCrossEntroyWithLogit,采用Softmax进行交叉熵计算。选用Momentum优化器,学习率设置为0.1,动量为0.9,核心 代码如代码3.3 所示

代码3.3.png

5. 训练网络模型

把网络、损失函数和优化器传入模型中,调用train()方法即可开始训练,返回“Epoch time”说明训练过程结束。核心 代码如代码3.4所示

代码3.4.png

跑通的LeNet网络代码见附件。

另外,MindSpore官网有基于LeNet的手写字识别教程——实现一个图片分类应用,每一步的作用、重要参数、执行效果,包括检验模型的性能等等都写得清清楚楚,而且图文并茂非常直观,强烈建议仔细研读。

转自文章链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=102880

感谢作者的努力与分享,侵权立删!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值