![MindSpore深度学习高阶技术](https://wfqqreader-1252317822.image.myqcloud.com/cover/710/47216710/b_47216710.jpg)
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=1739670169-10RMhRsZSeCyLIeFCe6f56h4q5W5LWtV-0-f6e601fc9c0035c294541fd35e7bf781)
定义MindRecord文件名,清除工作路径中的重名文件,并创建文件写入句柄,如代码1.4所示,其中shard_num为MindRecord文件分片数量。
代码1.4 创建文件写入句柄
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P20_34320.jpg?sign=1739670169-WvmCrFymTx7pc7bJyQpUryyvPXx30b5Q-0-c68d990e933e18aade9ee82d1733aeaa)
定义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=1739670169-wBMXmovA3CEQzv6MwTocv3xUTqPcsco0-0-70b9f762ddfa58f5f1f70fac4088d49f)
为了便于演示,此处使用Image.new方法生成100张图像并写入MindRecord文件,如代码1.6所示,实际使用中用户可自行替换为需要存储的数据。
代码1.6 定义数据列表并写入MindRecord文件
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P21_34322.jpg?sign=1739670169-TJOs194z6dGrVbL2IYGhKQSECa87gRGP-0-3f19f72a6a8701dd4f32fa1cbf0a51b6)
运行代码后,工作目录下将会生成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=1739670169-bdFda7WUzeoFEiQorQGh1Be8kYBjqW84-0-edf8c02cd3228108ac046d49d98c99a2)
定义MindRecord文件名,清除工作路径中的重名文件,并创建文件写入句柄,如代码1.8所示,其中shard_num为MindRecord文件分片数量。
代码1.8 创建文件写入句柄
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P21_34326.jpg?sign=1739670169-ZxvyI7z7nqJDHpTEe3ImtBxfA0lmj1Rx-0-a08faa4c3a93b4fae4333a0585aedf35)
定义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=1739670169-ZTXnYphLogK5RBF3ECjp4pCHLz56dxkM-0-81fabe9fb1041ccd963abde8a3a2e7d6)
为了便于演示,此处使用NumPy根据索引生成数据并写入MindRecord文件,如代码1.10所示,实际使用中用户可自行替换为文本经预处理后得到的字典序数据。
代码1.10 定义数据列表并写入MindRecord文件
![](https://epubservercos.yuewen.com/6AA9C3/26581519801336606/epubprivate/OEBPS/Images/Figure-P22_34328.jpg?sign=1739670169-FbM1MiMwKFYaCzzLOvYYwMu549nPo7vR-0-8ba20994c2f3b505f999946c3ebaca5e)
运行代码后,工作目录下将会生成test.mindrecord和test.mindrecord.db文件,其中存储了定义的NLP数据信息。