交互效果网站,怎么套网站,石家庄网络推广公司,帝国cms 网站地图 自定义大家好#xff0c;我是刘明#xff0c;明志科技创始人#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享#xff0c;如果你也喜欢我的文章#xff0c;就点个关注吧 MindSpore中可以把用于训练网络模型的数据… 大家好我是刘明明志科技创始人华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享如果你也喜欢我的文章就点个关注吧 MindSpore中可以把用于训练网络模型的数据集转换为MindSpore特定的格式数据MindSpore Record格式从而更加方便地保存和加载数据。其目标是归一化用户的数据集并进一步通过MindDataset接口实现数据的读取并用于训练过程。 此外MindSpore还针对部分数据场景进行了性能优化使用MindSpore Record数据格式可以减少磁盘IO、网络IO开销从而获得更好的使用体验。
MindSpore Record数据格式具备的特征如下 实现数据统一存储、访问使得训练时数据读取更加简便。 数据聚合存储、高效读取使得训练时数据方便管理和移动。 高效的数据编解码操作使得用户可以对数据操作无感知。 可以灵活控制数据切分的分区大小实现分布式数据处理。
Record文件结构
如下图所示MindSpore Record文件由数据文件和索引文件组成。
其中数据文件包含文件头、标量数据页、块数据页用于存储用户归一化后的训练数据且单个MindSpore Record文件建议小于20G用户可将大数据集进行分片存储为多个MindSpore Record文件。
而索引文件则包含基于标量数据如图像Label、图像文件名等生成的索引信息用于方便地检索、统计数据集信息。
数据文件中的文件头、标量数据页、块数据页的具体用途如下所示 文件头是MindSpore Record文件的元信息主要用来存储文件头大小、标量数据页大小、块数据页大小、Schema信息、索引字段、统计信息、文件分区信息、标量数据与块数据对应关系等。 标量数据页主要用来存储整型、字符串、浮点型数据如图像的Label、图像的文件名、图像的长宽等信息即适合用标量来存储的信息会保存在这里。 块数据页主要用来存储二进制串、NumPy数组等数据如二进制图像文件本身、文本转换成的字典等。
转换成Record格式
下面主要介绍如何将CV类数据和NLP类数据转换为MindSpore Record文件格式并通过MindDataset接口实现MindSpore Record文件的读取。
转换CV类数据集
本示例主要以包含100条记录的CV数据集并将其转换为MindSpore Record格式为例子介绍如何将CV类数据集转换成MindSpore Record文件格式并使用MindDataset接口读取。
首先需要创建100张图片的数据集并对齐进行保存其样本包含file_name字符串、label整型、 data二进制三个字段然后使用MindDataset接口读取该MindSpore Record文件。
生成100张图像并转换成MindSpore Record文件格式。
from PIL import Image
from io import BytesIO
from mindspore.mindrecord import FileWriterfile_name test_vision.mindrecord
# 定义包含的字段
cv_schema {file_name: {type: string},label: {type: int32},data: {type: bytes}}# 声明MindSpore Record文件格式
writer FileWriter(file_name, shard_num1, overwriteTrue)
writer.add_schema(cv_schema, it is a cv dataset)
writer.add_index([file_name, label])# 创建数据集
data []
for i in range(100):sample {}white_io BytesIO()Image.new(RGB, ((i1)*10, (i1)*10), (255, 255, 255)).save(white_io, JPEG)image_bytes white_io.getvalue()sample[file_name] str(i1) .jpgsample[label] i1sample[data] white_io.getvalue()data.append(sample)if i % 10 0:writer.write_raw_data(data)data []if data:writer.write_raw_data(data)writer.commit()
上面示例运行无报错说明数据集转换成功。
通过MindDataset接口读取MindSpore Record文件格式。
from mindspore.dataset import MindDataset
from mindspore.dataset.vision import Decode# 读取MindSpore Record文件格式
data_set MindDataset(dataset_filesfile_name)
decode_op Decode()
data_set data_set.map(operationsdecode_op, input_columns[data], num_parallel_workers2)# 样本计数
print(Got {} samples.format(data_set.get_dataset_size()))
转换NLP类数据集
本示例首先创建一个包含100条记录的MindSpore Record文件格式其样本包含八个字段均为整型数组然后使用MindDataset接口读取该MindSpore Record文件。
生成100条文本数据并转换成MindSpore Record文件格式。
import numpy as np
from mindspore.mindrecord import FileWriter# 输出的MindSpore Record文件完整路径
file_name test_text.mindrecord# 定义样本数据包含的字段
nlp_schema {source_sos_ids: {type: int64, shape: [-1]},source_sos_mask: {type: int64, shape: [-1]},source_eos_ids: {type: int64, shape: [-1]},source_eos_mask: {type: int64, shape: [-1]},target_sos_ids: {type: int64, shape: [-1]},target_sos_mask: {type: int64, shape: [-1]},target_eos_ids: {type: int64, shape: [-1]},target_eos_mask: {type: int64, shape: [-1]}}# 声明MindSpore Record文件格式
writer FileWriter(file_name, shard_num1, overwriteTrue)
writer.add_schema(nlp_schema, Preprocessed nlp dataset.)# 创建虚拟数据集
data []
for i in range(100):sample {source_sos_ids: np.array([i, i 1, i 2, i 3, i 4], dtypenp.int64),source_sos_mask: np.array([i * 1, i * 2, i * 3, i * 4, i * 5, i * 6, i * 7], dtypenp.int64),source_eos_ids: np.array([i 5, i 6, i 7, i 8, i 9, i 10], dtypenp.int64),source_eos_mask: np.array([19, 20, 21, 22, 23, 24, 25, 26, 27], dtypenp.int64),target_sos_ids: np.array([28, 29, 30, 31, 32], dtypenp.int64),target_sos_mask: np.array([33, 34, 35, 36, 37, 38], dtypenp.int64),target_eos_ids: np.array([39, 40, 41, 42, 43, 44, 45, 46, 47], dtypenp.int64),target_eos_mask: np.array([48, 49, 50, 51], dtypenp.int64)}data.append(sample)if i % 10 0:writer.write_raw_data(data)data []if data:writer.write_raw_data(data)writer.commit()
通过MindDataset接口读取MindSpore Record格式文件。
from mindspore.dataset import MindDataset# 读取MindSpore Record文件格式
data_set MindDataset(dataset_filesfile_name, shuffleFalse)# 样本计数
print(Got {} samples.format(data_set.get_dataset_size()))# 打印部分数据
count 0
for item in data_set.create_dict_iterator(output_numpyTrue):print(source_sos_ids:, item[source_sos_ids])count 1if count 10:break
Dataset转存MindRecord
MindSpore提供转换常用数据集的工具类能够将常用的数据集转换为MindSpore Record文件格式。
转存CIFAR-10数据集
用户可以通过Dataset.save类将CIFAR-10原始数据转换为MindSpore Record并使用MindDataset接口读取。
下载CIFAR-10数据集并使用Cifar10Dataset加载。
from download import download
from mindspore.dataset import Cifar10Dataseturl https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/cifar-10-binary.tar.gzpath download(url, ./, kindtar.gz, replaceTrue)
dataset Cifar10Dataset(./cifar-10-batches-bin/) # 加载数据
调用Dataset.save接口将CIFAR-10数据集转存为MindSpore Record文件格式。
dataset.save(cifar10.mindrecord)
通过MindDataset接口读取MindSpore Record文件格式。
import os
from mindspore.dataset import MindDataset# 读取MindSpore Record文件格式
data_set MindDataset(dataset_filescifar10.mindrecord)# 样本计数
print(Got {} samples.format(data_set.get_dataset_size()))if os.path.exists(cifar10.mindrecord) and os.path.exists(cifar10.mindrecord.db):os.remove(cifar10.mindrecord)os.remove(cifar10.mindrecord.db)