送你 5 个 MindSpore 算子使用经验
本文分享自华为云社区《【MindSpore易点通】算子使用经验总结》,作者:Skytier。
MindSpore 给大家提供了很多算子进行使用,今天给大家简单介绍下常用的一些算子使用时需要注意的内容。
使用 mindspore.nn.BatchNorm 注意 momentum 参数
Batch Normalization 里有一个 momentum 参数, 该参数作用于 mean 和 variance 的计算上, 保留了历史 Batch 里的 mean 和 variance 值,即 moving_mean 和 moving_variance, 借鉴优化算法里的 Momentum 算法将历史 Batch 里的 mean 和 variance 的作用延续到当前 Batch。
经验总结:
MindSpore 中 BatchNorm1d、BatchNorm2d 的 momentum 参数(定义该参数的变量名称为 momentum_ms),该参数与 PyTorch 里 BN 的 momentum 参数(定义该参数的变量名称为 momentum_py)的关系为:
使用 mindspore.nn.Dropout 注意概率参数
dropout 算子的 prob 参数是用来设置节点值为 0 的概率
经验总结:
MindSpore 中 dropout 的 keep_prob 参数,该参数与 PyTorch 里 dropout 的 p 参数的关系为: keep_prob=1−p
使用 mindspore.nn.SmoothL1Loss 注意问题
在网络训练中,一般会把 Loss 的结果对 Batch Size 求平均;PyTorch 的 Loss 算子一般会有是否求平均的参数,而 MindSpore 里面的 Loss 算子没有这个参数。
经验总结:
Mindspore.nn.SmoothL1Loss(beta=1.0)没有做平均,需要自己做求均值操作,否则可能会出现:
具体示例代码如下:
使用 mindspore.ops.operations.L2Normalize 注意 axis 参数的指定
L2Normalize 算子需要指定 axis 来决定需要处理的轴。
经验总结:
两者有很大差异;
迁移 PyTorch 网络使用 L2Normalize 算子时,请指定 axis 参数,示例如下:
在测试的时候使用 mindspore.nn.Dropout
dropout 算子只在训练中使用,测试的时候需要去掉。
经验总结:
PyTorch 预测模式下 Dropout 自动不生效,而 MindSpore 预测模式下如果网络结构中有 Dropout 层,仍然会做 drop。所以需要在测试的代码中手动去掉 dropout,示例代码如下:
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/b9041c9db5f449a142de7d0d5】。文章转载请联系作者。
评论