昇思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),或在最后一个数据处理节点将字典类型的数据展开为列表或元组类型的数据,例如:
相关推荐
懒洋洋大魔王8 分钟前
7.Java高级编程 多线程
java·开发语言·jvm
=(^.^)=哈哈哈8 分钟前
Golang如何优雅的退出程序
开发语言·golang·xcode
学习使我变快乐10 分钟前
C++:用类实现链表,队列,栈
开发语言·c++·链表
茶馆大橘12 分钟前
【黑马点评】已解决java.lang.NullPointerException异常
java·开发语言
lmy_t16 分钟前
C++之第十二课
开发语言·c++
马剑威(威哥爱编程)20 分钟前
除了递归算法,要如何优化实现文件搜索功能
java·开发语言·算法·递归算法·威哥爱编程·memoization
yunhuibin20 分钟前
ffmpeg面向对象——参数配置秘密探索及其设计模式
学习·设计模式·ffmpeg
Terry Cao 漕河泾25 分钟前
SRT3D: A Sparse Region-Based 3D Object Tracking Approach for the Real World
人工智能·计算机视觉·3d·目标跟踪
多猫家庭30 分钟前
宠物毛发对人体有什么危害?宠物空气净化器小米、希喂、352对比实测
人工智能·宠物
我码玄黄31 分钟前
THREE.js:网页上的3D世界构建者
开发语言·javascript·3d