有一个疑问,mindspore自定义数据集类的时候,getitem只能返回tuple包裹的numpy数组,这样做是有什么特殊的考虑吗,pytorch对于gititem的返回类型是没有限制,后续对数据的处理也灵活一些。
解答:
1. 首先,这个是因为基于MindSpore的数据预处理部分的所有操作间(dataset -> map -> map -> batch)传递都是numpy,所以我们也要求 getitem 返回也是tuple的numpy,这样可以后续所有的增强操作保持一样的逻辑。
这个可以参考 yolo网络模型的数据预处理部分(GeneratorDataset -> .map -> .map -> .batch):
official/cv/yolov5/src/yolo_dataset.py · MindSpore/models - 码云 - 开源中国 (gitee.com)
2. 我们也支持用户自定义的 python 增强操作,这里面也要求用户是按tuple的numpy返回,用户以tuple的方式返回多个numpy,即:(numpy1, numpy2, ...) ,是可以对应样本的多个字段。
1. list的返回对用户来说,和tuple差别不大。只是使用习惯的问题。
2. 对于dict,我们最初的想法是统一所有 op 输出,所以选择了 都是按 tuple(numpy, numpy, ...) 这样的方式。如果也支持dict,会不会也让用户疑惑用法都不统一?也容易出错,比如:返回的dict中字段与 output_columns 对应不起来。