写点什么

一名 MindSpore 新手的爬坑记录~~

用户头像
依旧廖凯
关注
发布于: 2021 年 03 月 12 日
一名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 模式,需要手动设置图模式:

from mindspore import contextcontext.set_context(mode=context.GRAPH_MODE)
复制代码

图模式下出现语法错误报错主要是 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,可以打印出来看看。


发布于: 2021 年 03 月 12 日阅读数: 7
用户头像

依旧廖凯

关注

还未添加个人签名 2021.02.27 加入

还未添加个人简介

评论

发布
暂无评论
一名MindSpore新手的爬坑记录~~