基于MindSpore的SGD优化器实现-体验过程记录
Mindspore是华为开发的深度学习框架,我加入了mindspore社区,希望在里面能和大家相互学习共同进步,有感兴趣的小伙伴欢迎一起加入。

在基于MindSpore的SGD优化器实现这一体验活动中,我学习到了关于随机梯度下降SGD的使用方法,以及这一方法的优化参数的使用,以下是对于学习的总结:
MindSpore框架中的SGD优化器,通过结合动量、阻尼、Nesterov动量和梯度中心化等多种优化技术,旨在提高模型训练的效率和性能。动量技术帮助解决了梯度消失问题,通过积累之前的更新方向来加速当前梯度;阻尼则减轻了梯度爆炸的影响,保护模型参数不受极端梯度值的影响;Nesterov动量作为动量的变种,通过预测梯度方向来优化参数更新;梯度中心化通过调整梯度方向,使其更集中于参数空间中心,提高了训练稳定性。这些技术的共同目标是使梯度下降算法能够更好地适应不同的训练场景,提高模型的收敛速度和准确性。掌握这些优化技术的原理和应用,对于深度学习模型的训练和调优具有重要意义。
同时我跟着范例进行了实验,我的结果与范例略有不同,下面是我的实验结果:

首先是使用基于SGD的三种不同参数配置的模型检测精度和训练轮数的关系,可以看到因为我们这个任务比较简单,使用lenet在训练了一个epoch之后,精度都超过了60%,这里和官方案例不同,官方案例的仅基于SGD的方法第一个epoch过后才10%,这是可能是因为收敛到了不同的局部最优解。同时我们可以看到,加了动量和Nesterov动量后效果要明显优于不加的那一组。

接着是loss随训练轮数的变化,可以发现,加了动量和Nesterov动量后效果同样要明显优于不加的那一组,在3-4个epoch后基本就收敛了,而仅基于SGD的那一组要到7-8个epoch才收敛。
在训练的过程中,我尝试使用GPU进行训练加速,因为用GPU训实在太慢了,平均一个epoch要30多秒,我下载了能够支持cuda10.1和10.6的mindspore2.2.4版本,同时设置了上下文为GPU环境,但是还是报错了,可能是因为我的cuda是11.6版本的,但是它难道不会向下兼容吗,这是我在这个体验过程中的一个困惑。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐

所有评论(0)