MindSpore中的算子
-
算子的调用是构建模型的基础,准确的找到能满足需求的算子并能正确的使用,可以有事半功倍的效果。本次就分享下MindSpore中算子的使用和遇到问题时的解决方法给大家。
一般情况下在自定义网络模型时会用到各种类型的算子,MindSpore中分为Primitive算子和nn算子,Primitive算子是开放给用户的最低阶算子接口,一个Primitive算子对应一个原语,它封装了底层的Ascend、GPU、AICPU、CPU等多种算子的具体实现,为用户提供基础算子能力。还可以继续分为计算算子和框架算子。计算算子主要负责具体的计算,而框架算子主要用于构图,自动微分等功能,都可以从mindspore.ops模块导入使用。同时mindspore.nn模块是对mindspore.ops模块的封装。所以在构建网络模型时建议使用mindspore.nn模块,优点是使用方便,当然如果想要探索更多算子的信息,建议使用mindspore.ops模块。
需求大致可以分成两种,自定义网络模型时的算子需求和从第三方框架迁移模型时对标算子的需求。方法:在mindspore中,可以手动将embedding的padding_idx位置对应的权重初始化为0;并且在训练时通过mask的操作,过滤掉padding_idx位置对应的Loss。MindSpore中与Mask相关的算子有:nn.Dropout、RandomChoicWithMask、NMSWithMask。
当然即使找到了符合需求的算子,并且单独运行时也没有问题,也不能够避免在加入到自己的项目代码中完全不报错。在算子使用中通常的报错原因是使用的MindSpore版本和参考的教程不一致、算子不支持目前的硬件环境以及传入的参数不符合算子要求,所以为了避免不必要的报错,下面给大家提供几个查看接口的正确姿势:
根据自己安装的MindSpore版本查找对应版本的接口;第三方模型迁移时建议先通过API映射查找;查看算子是否支持自己的硬件平台以及内存大小;重点:到算子详情页查看参数和参数的类型。
西南地区IT社群(QQ)
- 云南
- 【昆明网页设计交流吧】243627302
- 【昆明nodejs交流吧】 243626749
- 【VUE】838405306
- 【云南程序员总群】343606807
- 【昆明UI设计】104031254
- 【云南软件外包】15547313
- 贵州
- 【PHP/java源码/站长交流群】55692114
- 四川
- 【成都Java/JavaWeb交流】86669225
- 【vaScript+PHP+MySql】116270060
- 【UI设计/设计交流学习群】135794928
- 重庆
- 【诺基亚 JAVA游戏博物馆】 559479780
- 【PHP,Java,Python,C++接单】 442103442
- 西藏