昇思MindSpore学习入门-数据处理管道支持python对象

数据处理管道中的特定操作(如自定义数据集GeneratorDataset、自定义map增强操作、自定义batch(per_batch_map=...))支持任意Python类型对象作为输入。为了支持此特性,数据管道使用了Python(dict)字典去管理不同类型的对象。与其他类型相比,Python字典类型在数据管道中不会被转换成C++中的类型,而是以引用的形式保留在数据管道中。

注意,虽然目前数据管道只新增了识别字典类型的对象,但并不限制字典中的对象内容,因此也可以将其他Python类型封装进字典中并传入到数据处理管道中,以达到支持任意Python对象的目的。因此此教程主要介绍如何构造字典类型的数据输入到数据管道,并在迭代器中取得数据。

构造Python字典到数据处理管道

将字典输入到数据处理管道中可在以下几个操作中实现:

  1. 自定义数据集GeneratorDataset,用户将组织好的字典以返回值的形式输入到数据处理管道中;
  2. 自定义map增强操作,用户可以定义Python可调用对象,在该对象中返回字典数据;
  3. 自定义batch(per_batch_map=...)操作,用户在batch操作的per_batch_map中处理并返回字典数据。

自定义数据集GeneratorDataset处理字典对象

下面这个例子展示了如何通过GeneratorDataset将字典对象传送到数据处理管道。

示例中的my_generator返回了2个元素,分别对应2个数据列,其中字典被视为其中一列,即col1。特别的,数据处理管道的规则一般会检查返回值是否可以被转换为NumPy类型,但若返回值为字典则会例外,且字典中存储的元素没有限制(包括键/值的数量和的类型)。

自定义map增强操作处理字典对象

与GeneratorDataset相同,每个字典对象被看作一个数据列,且其中的元素没有限制。

这个例子说明如何通过map操作和自定义Python方法,将字典类型加入到数据处理管道中:

batch操作处理字典对象

当对数据集使用batch操作时,如果有一个数据列中包含有字典对象,数据处理管道会将多组样本中的字典的相同键组合在一起。因此对数据进行batch操作前,确保所有的字典对象都必须具有相同的键。

batch操作的结果(对于该列)也将是一个字典,其中所有值都是NumPy数组。如果这种转换产生了np.object_类型的数组,由于模型训练侧的限制,将向用户显示一条错误消息并且终止数据处理管道。

下面展示了当数据管道中存在Python字典时,batch操作是如何把字典中"power"键的元素组合起来的。

如果用户提供了per_batch_map函数,字典中的对应元素将根据键分组到Python列表中。这个例子说明如何通过batch操作和per_batch_map方法,将字典类型加入到数据处理管道中:

从数据处理管道中获取Python字典

直接迭代数据集对象即可获得字典类型的数据。当使用迭代器获取数据时,数据处理管道会尝试将字典对象中的所有值转成Tensor类型(如果output_numpy设置为True,则将转为NumPy类型)。

注意,上述类型转换操作是递归进行的,即应用于嵌套字典内的所有值以及列表和元组内的所有元素。无法被转成NumPy数组/Tensor类型的对象(例如类对象)会被直接传入到模型,若模型无法处理该对象类型将会报错。

下面的例子展示了通过迭代器获取字典数据或其他数据。

在模型训练/推理场景,从数据管道获取字典类型数据时有以下注意事项。

  • 数据下沉模式下,由于数据下沉通道当前无法支持字典类型的数据,字典类型的数据发送到下沉通道会造成错误。因此可以考虑关闭数据下沉模式(dataset_sink_mode=False),或在最后一个数据处理节点将字典类型的数据展开为列表或元组类型的数据,例如:
相关推荐
火山引擎开发者社区3 小时前
TLS for DeepSeek Harness 可观测实践:从系统总览到会话复盘
人工智能
葡萄成熟时 !4 小时前
JAVA 常用API学习笔记
java·笔记·学习
数字融合5 小时前
透明化地铁线视频孪生综合监控项目技术
大数据·人工智能·virtualenv
MicrosoftReactor5 小时前
技术速递|Canvas 如何让 Agentic Workflow 更可见、可控、更高效
ai·agent·canvas
鼎艺创新科技5 小时前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
剩下了什么5 小时前
float32 与 float64 精度陷阱:如何在 Go 中避免错误使用
开发语言·后端·golang
指尖时光.5 小时前
Three.js 超全入门综合案例
开发语言·javascript·ecmascript
十三画者6 小时前
【文献分享】ConfRetro:融合3D构象信息的逆合成预测Transformer框架
人工智能·深度学习·数据挖掘·数据分析·transformer·数据可视化
前沿在线6 小时前
百度文心助手推出任务引擎 2.0,日活用户同比增长 83%,日均对话轮次增长超 2 倍
人工智能·ai·大模型
zandy10116 小时前
AI办公工具选哪个?千问办公、百度搭子、WorkBuddy三款高阶智能体深度拆解
人工智能·ai办公工具