初读:2021年4月7日至2021年4月15日
啃书进度会在目录中标出来。本次目标是完成第四章 4.6节用MindSpore实现神经网络的代码部分(P52-P54)。
AlexNet论文中代码实现使用了双RTX580 GPU,model_zoo官方模型也是基于双GPU卡实现。我只有一个1050Ti,官方配置的模型跑不起来,而且似乎AlexNet对于这块卡也过大了,自己写的的模型跑半分钟就挂掉。为了完成今天的作业,勉强用CPU上一个epoch。闲言少叙,继续啃书:
4.6.2 详细步骤
下面描述使用AlexNet网络训练和推理的详细步骤,并给出示例代码。官方的AlexNet源码链接:https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/alexnet。
1. 加载MindSpore模块
使用MindSpore API前需要先导入MindSpore API和辅助模块,如代码4.1所示。
2. 导入数据集
使用MindSpore 数据格式API创建数据集,并对数据进行预处理。本例使用cifar10数据集。数据集下载链接:http://www.cs.toronto.edu/~kriz/cifar.html。下载“CIFAR-10 binary version ”并解压。
3. 定义AlexNet网络
核心代码如代码4.2所示
__init__()函数完成卷积层和全连接层的初始化。初始化参数包括输入个数、输出个数、卷积层参数以及卷积核大小。因为原始数据集的图片大小是32×32×3,所以在创建数据集的过程中需要将输入大小转变成227×227×3。
4. 设置超参数并创建网络
定义损失函数和优化器。损失函数使用SoftmaxCrossEntroyWithLogit,采用Softmax进行交叉熵计算。选用Momentum优化器,学习率设置为0.1,动量为0.9,核心 代码如代码4.3 所示
5. 训练网络模型
把网络、损失函数和优化器传入模型中,调用train()方法即可开始训练,返回“Epoch time”说明训练过程结束。核心 代码如代码4.4所示。
不得不说,用CPU训练的速度实在慢。用cifar10这么小的数据集,一个epoch用了将近半小时,ImageNet就别想了。归根到底,想玩深度学习,配置必须要能接得住才行。
转自文章链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=121267
感谢作者的努力与分享,侵权立删!