[MindSpore]报错RuntimeError: Exception thrown from PyFunc.
1 报错描述
1.1 系统环境
ardware Environment(Ascend/GPU/CPU): CPU
Software Environment:
– MindSpore version (source or binary): 1.7.0
– Python version (e.g., Python 3.7.5): 3.7.6
– OS platform and distribution (e.g., Linux Ubuntu 16.04): Windows-10-10.0.19041-SP0
– GCC/Compiler version (if compiled from source):
1.2 基本信息
1.2.1脚本
此案例为创建一个做超分辨率的数据集,使用mindspore.dataset.GeneratorDataset接口实现自定义方式的进行数据集加载。
1.2.2报错
报错信息:RuntimeError: Exception thrown from PyFunc. Invalid python function, the ‘source’ of ‘GeneratorDataset’ should return same number of NumPy arrays as specified in column_names, the size of column_names is:1 and number of returned NumPy array is:2
2 原因分析
根据报错信息提示,GeneratorDataset中使用到的数据返回字段应与指定的列名个数一致,但目前指定列名个数为1,返回列数为2。按照数据返回列数分析,应定义两个列名, 但源码中:DS=ds.GeneratorDataset(dataset,column_names=[“LR,HR”]),[“LR,HR”]表示为一个字段,故应在此部分进行修改。
3 解决方法
DS=ds.GeneratorDataset(dataset,column_names=[“LR,HR”])
改为与输入数据返回字段相匹配的形式:
DS=ds.GeneratorDataset(dataset,column_names=[“LR”,“HR”])
此时正常执行,可创建自定义数据集,输出如下:
4 总结
定位报错问题的步骤:
1、找到报错的用户代码行:for data in DS.create_dict_iterator():;
2、根据日志报错信息中的提示,定位到自定义数据返回时出现问题。GeneratorDataset返回与定义的columns字段不一致,导致报错。
3、自定义数据集创建时返回与定义的字段保持一致。
5 参考文档
mindspore教程->数据处理->自定义数据集
https://www.mindspore.cn/tutorials/zh-CN/master/advanced/dataset/custom.html