一名 MindSpore 新手的爬坑记录~~
作为一个 DL 的小白,本身也非计算机科班出身,在使用 mindspore 的一个多月中踩了不少坑,搞了一个 NLP 里的经典模型 Seq2seq,虽然精度还没有达标,跪。这就来给大家总结一下新手常见的 error 吧,希望对大家有所帮助。
1.版本问题
目前 MindSpore 主要有 1.0.1 和 1.1.1 两个版本,1.1 版本优化了不少 MindSpore 的性能和代码风格,但你要是用了 1.0 版本的机器去运行 1.1 版本下的代码就会出现挺多错误,具体这两个版本的不同官方有给出详解,如下链接 https://gitee.com/mindspore/mindspore/blob/r1.1/RELEASE.md 。但是,肯定有好多小伙伴开发的时候没有注意到这里吧,小丑就是我自己。
总结一下我在开发过程中遇到的因版本原因而导致报错的吧
mindspore.Parameter 在 1.0 版本中参数‘name’是必需的,而在 1.1 版本中有默认值
mindspore.nn.LSTM 在 1.0 版本中不支持 NPU,但是可以使用 mindspore.ops.DynamicRNN 代替。后者目前在仅支持 NPU 平台,不支持 CPU 和 GPU,在性能上没有差别,因为前者就是用后者的源码实现的。
2.语法问题
语法问题是最常见的 error, 一般在 PYNATIVE 模式下可以清楚的显示出错的原因。但是经过我数次踩坑,大家最好先别用 PYNATIVE 模式开发模型,否则会有各种奇怪的错误,比如:
最好在图模式下去运行你的模型,mindspore 默认运行模式为 PYNATIVE 模式,需要手动设置图模式:
图模式下出现语法错误报错主要是 TypeError: Parse Resolve node failed NodeInfo: In file ....,这种情况下在报错日志前后会出现调用栈信息,也就是出错代码的位置,调用栈以‘#’开头。 此时可以检查一下代码的缩进、变量是否已定义或者名称书写是否正确以及变量的作用域问题等。
图模式下我们定义的类中不能直接使用 python 的 print 去打印信息,否则会报错,但是 MindSpore 提供了 ops.Print 接口,可以在图模式中打印你想输出的信息。
在 mindspore 中继承 nn.cell 的类中一般有两个方法,init()和 construct(),所有的初始化都要放在 init 中,如果初始化不小心放在了 construct 中,也会报错。
Tensor 的 shape 问题,报错为 ValueError: For 'tensor setitem with tensor', ...。检查一下 tensor 的 shape,可以打印出来看看。
版权声明: 本文为 InfoQ 作者【依旧廖凯】的原创文章。
原文链接:【http://xie.infoq.cn/article/c8475625da7aae7c3a8836f24】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论