昇思 MindSpore 报错调试宝典(一):数据加载与处理类

相信大家在使用昇思MindSpore时,会在不同情况下遇到不同类型的报错,为了帮助各位在遇到报错时可以自行定位-调试-解决,发布昇思MindSpore报错调试宝典系列文章,供大家学习参考!作为第一篇,我们以数据处理类型报错开始,从Python Call Stack、Dataset Pipeline Error Message、C++ Call Stack等多个维度快速定位问题并调试,相信大家在了解学习后都能够有所收获,当然如果有任何问题请留言咨询!后续会有更多类型报错的调试宝典,敬请期待!详情请看下方长图。

水果榨汁儿,我爱喝水果榨汁儿,我可以随意混搭,再配上水果寿司儿;报错调试,我要解决报错调试,我可以分析定位,再加上调试处理就完事儿!本期用案例讲解数据加载与处理类报错的解决流程,走过路过不要错过!敬请期待下一期!文字内容:某天,小孢子出门游学遇到了MindSpore,这可把好学的小孢子高兴坏了,立马头脑风暴一样抛出了很多困惑!小孢子:MindSpore,你好呀!在使用MindSpore时常常会遇到一些报错,令人头大,作为资深智能框架,能透露小tips如何快速找到问题并调试的呢?MindSpore: MindSpore在处理网络报错时给开发者提供了多种调试功能,我们可以用一个简单的数据加载与处理类的问题来讲解一下整个流程。这边首先自定义一个Python数据处理类,将其接入MindSpore的数据处理流水线中并获取处理后的数据。
昇思 MindSpore 报错调试宝典(一):数据加载与处理类_第1张图片
报错信息:
昇思 MindSpore 报错调试宝典(一):数据加载与处理类_第2张图片
小孢子:所以报错信息透露了怎样的信息呢?MindSpore:快拿小笔记本记好!MindSpore2.0版本开始报错信息可是进行了全面的升级哦~
昇思 MindSpore 报错调试宝典(一):数据加载与处理类_第3张图片
如下dataset的报错信息主要分为三个部分,可以按照问题定位需要查看对应部分:①Python Call Stack,与框架用户脚本相关的报错栈信息②Dataset Pipeline Error Message,数据处理管道错误信息③C++ Call Stack,与框架开发者相关的调试报错信息。
昇思 MindSpore 报错调试宝典(一):数据加载与处理类_第4张图片
在上图的运行报错信息中,②Dataset Pipeline Error Message表示的信息为:运行python代码时出现的异常报错,建议检查Python代码或查看Python相关的调用栈。因此可以从①Python Call Stack抓取到的Python调用栈继续分析:这里看到的Traceback信息是典型的Python调用栈。从调用栈一级一级调用的信息中可以看到,最后出错是调用了File: "test_api.py"中第43行的语句data = self.data[index] / self.scale,导致最后出现了异常ZeroDivisionError,显然这是一个除零异常。小孢子:明白啦!现在我们已经完成了定位问题这一部分,接下来就是要调试啦~MindSpore:没错!调试环节可以在报错语句前后加一些打印值,确认除数self.scale在什么情况下会变成0,同时也可以遍历数据确认一下是生成第几条数据发生的错误。
昇思 MindSpore 报错调试宝典(一):数据加载与处理类_第5张图片
在getitem中添加了一些打印,再次运行代码,可以看到self.scale初始值为2,每次调用一次getitem都会对self.scale – 1,所以调用2次之后,self.scale就会变为0,因此在第2次执行self.data[index] / self.scale时出现了除零报错。
昇思 MindSpore 报错调试宝典(一):数据加载与处理类_第6张图片
为了简单处理此情况,我们就可以在self.scale等于0的时候,额外定义该数值从而避免出现除零错误,导致数据处理异常。
昇思 MindSpore 报错调试宝典(一):数据加载与处理类_第7张图片
最终,数据处理流程就调通啦~运行结果:
昇思 MindSpore 报错调试宝典(一):数据加载与处理类_第8张图片
小孢子:哇!也就是说,在遇到数据加载与处理的报错时,都可以按照上述操作来,首先对于报错信息进行全面分析,然后定位问题代码,最后进行代码的调试和解决~MindSpore:Bingo,你可真是个小聪明!小孢子:今天真的受益匪浅啊!!我要好好回去研究一翻,有问题再来跟你咨询哦~MindSpore:哈哈,好的,随时讨论!

你可能感兴趣的:(机器学习)