算子编译没烦恼,Debug线性提升| 昇思MindSpore报错调试宝典(四):网络构建与训练类报错之算子编译错误

发布时间 2023-06-12 15:51:32作者: Skytier

上一期讲解了语法错误问题,本期给大家介绍遇到算子编译错误问题应该如何分析和解决,当算子参数值、类型、shape不满足要求时,或者是算子功能受到限制这些都属于算子编译错误,本期以构建ReduceSum单算子网络时输入超过该算子支持维度为例来分析讲解如何定位与调试。

具体内容请看海报~

MindSpore%E6%8A%A5%E9%94%99%E8%B0%83%E8%AF%95%E5%AE%9D%E5%85%B8%EF%BC%88%E5%9B%9B%EF%BC%89%EF%BC%9A%E7%BD%91%E7%BB%9C%E6%9E%84%E5%BB%BA%E4%B8%8E%E8%AE%AD%E7%BB%83%E7%B1%BB%E6%8A%A5%E9%94%99%E4%B9%8B%E7%AE%97%E5%AD%90%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%AF.png

 

文字版内容:

小孢子:你好呀,昇思MindSpore,我们又见面了!这次通过调用mindspore.ops.ResizeBicubic算子接口调整图像大小时遇到了报错,能帮我分析看看如何debug不?

MindSpore: 当然没问题!照旧先看看你的环境信息、脚本代码与报错~

小孢子:系统环境信息:


Hardware Environment(Ascend/GPU/CPU): CPU Software Environment: -- MindSpore version (source or binary): 2.0.0 -- Python version (e.g., Python 3.7.5): 3.7.5 -- OS platform and distribution (e.g., Linux Ubuntu 16.04): Ubuntu 4.15.0-74-generic -- GCC/Compiler version (if compiled from source):

训练脚本信息:


01 import mindspore 02 from mindspore import Tensor 03 import mindspore.ops as ops 04 05 resize_bicubic_op = ops.ResizeBicubic(align_corners=True,half_pixel_centers=False) 06 images = Tensor(x_np) 07 size = Tensor(size, mindspore.int32) 08 output = resize_bicubic_op(images, size) 09 print(output.asnumpy())

报错信息:


Exception raised:     Traceback (most recent call last):       File "< doctest_example.txt[4]>", line 1, in <module>         images = Tensor(x_np) NameError: name 'x_np' is not defined  #①       File "< doctest_example.txt[5]>", line 1, in <module>         size = Tensor(size, mindspore.int32) NameError: name 'size' is not defined #②       File "< doctest_example.txt[6]>", line 1, in <module>         output = resize_bicubic_op(images, size) NameError: name 'images' is not defined #③       File "< doctest_example.txt[7]>", line 1, in <module>         print(output.asnumpy()) NameError: name 'output' is not defined #④

MindSpore:首先我们查看报错信息,①中的异常是由于‘images = Tensor(x_np)’这段代码引起的,主要是命名定义类的错误,‘x_np’没有被赋予定义,同理②和③的错误异常也是由于‘size’、‘images’是没有被定义的,而④中的报错则是因为‘images’没有被定义,那么‘output = resize_bicubic_op(images, size)’这段代码就无法执行,那么最终也就无法打印输出结果;换句话说,由于定义的缺失导致mindspore.ops.ResizeBicubic算子缺少了一些输入,进而打印不出输出结果并产生报错。

小孢子:那我知道解决办法啦,既然缺少定义那就直接都给他们定义完整就行啦!这个我会!

修改后的正确代码如下:


01 import mindspore 02 from mindspore import Tensor 03 from mindspore import ops 04 05 x_np = np.array([1, 2, 3, 4]).astype(np.float32).reshape(1, 1, 2, 2) 06 size = (1, 4) 07 images = Tensor(x_np) 08 size = Tensor(size, mindspore.int32) 09 resize_bicubic_op = ops.ResizeBicubic(align_corners=True, half_pixel_centers=False) 10 output = resize_bicubic_op(images, size) 11 print(output.asnumpy())

MindSpore:你还真是一点就通!所以这个时候执行打印结果一定是符合预期的。

小孢子:对的!你快看执行结果:


 [[[[1. 1.3144622 1.6855378 2.]]]]

MindSpore:因此今天这个报错问题首先需要结合报错信息和打印结果,发现错误是由于算子未定义本身引起的,进而可以定位问题并修改出错,同时也提醒了我们需要关注变量定义、初始化的正确性。

小孢子:我记住啦!算子执行过程中也要考虑到方方面面才能避免出错!不多说啦,我要回去研究研究资源不足导致的报错咯~

MindSpore:好呀,下次我们交流这个问题!

小孢子:好的!期待下次见面!

 

参考链接:

【1】https://www.mindspore.cn/docs/zh-CN/r2.0.0-alpha/api_python/ops/mindspore.ops.ReduceSum.html?highlight=REDUCESUM

【2】https://www.hiascend.com/forum/thread-0232107351416081120-1-1.html

 

【昇思MindSpore报错解决地图】常见报错问题和解决方案:https://www.hiascend.com/forum/thread-0229108045633055169-1-1.html

 

往期回顾:

昇思MindSpore报错调试宝典(一):数据加载与处理类:https://www.hiascend.com/forum/thread-0215111378750918013-1-1.html

MindSpore报错调试宝典(二):网络构建与训练类报错之context配置问题:https://www.hiascend.com/forum/thread-0227112497811434016-1-1.html

昇思MindSpore报错调试宝典(三):网络构建与训练类报错之语法问题:https://www.hiascend.com/forum/thread-0232113194535560002-1-1.html