- MindSpore深度学习高阶技术
- 陈雷编著
- 750字
- 2023-08-25 10:46:30
1.1.3 使用示例
对于常用的数据集,如CIFAR-10、CIFAR-100、MNIST、ImageNet,以及常用的文件格式,如CSV、TFRecord,MindSpore提供了相应的Python接口,可以将它们一键转换为MindRecord数据格式,详情可参见MindSpore官网的API文档。下面主要介绍如何自定义转换CV(Computer Vision,计算机视觉)类和NLP(Natural Language Processing,自然语言处理)类的数据集。
1.转换CV类数据集
本示例主要介绍如何自定义转换CV类数据集为MindRecord。
首先导入代码所需的相关模块,如代码1.3所示。
代码1.3 导入相关模块
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P20_34319.jpg?sign=1739407308-R63iOSbMi9bbAT0MipxNDCJcrbToc5nr-0-2c2e8753c3afc707c77c68af9d993ec9)
定义MindRecord文件名,清除工作路径中的重名文件,并创建文件写入句柄,如代码1.4所示,其中shard_num为MindRecord文件分片数量。
代码1.4 创建文件写入句柄
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P20_34320.jpg?sign=1739407308-fnO1DswpAUVXdcXg5Vi2SIkqdYEdFaSo-0-926f63ccfee6ca073b6fff007f661095)
定义schema数据结构信息,包含file_name、label和data三个字段,数据类型分别为string、int32和bytes,定义索引字段为file_name和label,如代码1.5所示。
代码1.5 定义数据格式和索引
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P20_34321.jpg?sign=1739407308-OzQkwbxXr5ibVCy8FLYuHyuhmloPMAb9-0-77646b46f0fc15b2ff7af60d0c1e48e2)
为了便于演示,此处使用Image.new方法生成100张图像并写入MindRecord文件,如代码1.6所示,实际使用中用户可自行替换为需要存储的数据。
代码1.6 定义数据列表并写入MindRecord文件
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P21_34322.jpg?sign=1739407308-bCSbQHGVGhGImXJdbGDtT1J0sQ2ikSNe-0-72ef469bbc4c7da5d5a696f887141c14)
运行代码后,工作目录下将会生成test.mindrecord和test.mindrecord.db文件,其中存储了定义的CV数据信息。
2.转换NLP类数据集
本示例主要介绍如何自定义转换NLP类数据集为MindRecord。为了便于演示,此处略去了将文本转换为字典序的预处理过程。
同样需要导入代码所需的相关模块,如代码1.7所示。
代码1.7 导入相关模块
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P21_34325.jpg?sign=1739407308-XVyoVwS64JnCasbLIKE7nPkVXd4VhgPQ-0-711b550d73d2ea40a635a56a4fffbbc1)
定义MindRecord文件名,清除工作路径中的重名文件,并创建文件写入句柄,如代码1.8所示,其中shard_num为MindRecord文件分片数量。
代码1.8 创建文件写入句柄
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P21_34326.jpg?sign=1739407308-j8nfoKTxNidLCdiojVQpYSHpSuQXoBVK-0-e6f410a1ce72e86d21ff04680fb007bb)
定义schema数据结构信息,包含source_sos_ids、source_sos_mask、source_eos_ids、source_eos_mask、target_sos_ids、target_sos_mask、target_eos_ids、target_eos_mask等字段,数据类型都为int64,数据维度为-1,表示变长向量,如代码1.9所示。
代码1.9 定义数据格式和索引
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P22_34327.jpg?sign=1739407308-D1nB2NxtzTd3TgulzuTxD4WU6jQmvSWY-0-ed15a4c30faa70e90a6044dbf71bfcb5)
为了便于演示,此处使用NumPy根据索引生成数据并写入MindRecord文件,如代码1.10所示,实际使用中用户可自行替换为文本经预处理后得到的字典序数据。
代码1.10 定义数据列表并写入MindRecord文件
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P22_34328.jpg?sign=1739407308-u03ME4HqkrZNhtlpYV9hppAbNBy4bUzp-0-dfc5210c5fe9d14d780591b7ff4b0c55)
运行代码后,工作目录下将会生成test.mindrecord和test.mindrecord.db文件,其中存储了定义的NLP数据信息。