乐趣区

关于机器学习:昇思-MindSpore-报错调试宝典一数据加载与处理类

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

水果榨汁儿,我爱喝水果榨汁儿,我能够随便混搭,再配上水果寿司儿;报错调试,我要解决报错调试,我能够剖析定位,再加上调试解决就完事儿!本期用案例解说数据加载与解决类报错的解决流程,走过路过不要错过!敬请期待下一期!文字内容:某天,小孢子出门游学遇到了 MindSpore,这可把好学的小孢子快乐坏了,立马头脑风暴一样抛出了很多困惑!小孢子:MindSpore,你好呀!在应用 MindSpore 时经常会遇到一些报错,令人头大,作为资深智能框架,能走漏小 tips 如何疾速找到问题并调试的呢?MindSpore:MindSpore 在解决网络报错时给开发者提供了多种调试性能,咱们能够用一个简略的数据加载与解决类的问题来解说一下整个流程。这边首先自定义一个 Python 数据处理类,将其接入 MindSpore 的数据处理流水线中并获取解决后的数据。

报错信息:

小孢子:所以报错信息走漏了怎么的信息呢?MindSpore:快拿小笔记本记好!MindSpore2.0 版本开始报错信息可是进行了全面的降级哦~

如下 dataset 的报错信息次要分为三个局部,能够依照问题定位须要查看对应局部:①Python Call Stack,与框架用户脚本相干的报错栈信息②Dataset Pipeline Error Message,数据处理管道错误信息③C++ Call Stack,与框架开发者相干的调试报错信息。

在上图的运行报错信息中,②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,同时也能够遍历数据确认一下是生成第几条数据产生的谬误。

在 getitem 中增加了一些打印,再次运行代码,能够看到 self.scale 初始值为 2,每次调用一次 getitem 都会对 self.scale – 1,所以调用 2 次之后,self.scale 就会变为 0,因而在第 2 次执行 self.data[index] / self.scale 时呈现了除零报错。

为了简略解决此状况,咱们就能够在 self.scale 等于 0 的时候,额定定义该数值从而避免出现除零谬误,导致数据处理异样。

最终,数据处理流程就调通啦~ 运行后果:

小孢子:哇!也就是说,在遇到数据加载与解决的报错时,都能够依照上述操作来,首先对于报错信息进行全面剖析,而后定位问题代码,最初进行代码的调试和解决~MindSpore:Bingo,你可真是个小聪明!小孢子:明天真的受益匪浅啊!!我要好好回去钻研一翻,有问题再来跟你征询哦~MindSpore:哈哈,好的,随时探讨!

退出移动版