!27106 Update chinese doc

Merge pull request !27106 from luoyang/code_docs_chinese
This commit is contained in:
i-robot 2021-12-03 14:09:44 +00:00 committed by Gitee
commit 983326c963
12 changed files with 707 additions and 5 deletions

View File

@ -0,0 +1,32 @@
mindspore.dataset.CSVDataset
=============================
Class mindspore.dataset.CSVDataset(dataset_files, field_delim=',', column_defaults=None, column_names=None, num_samples=None, num_parallel_workers=None, shuffle=<Shuffle.GLOBAL: 'global'>, num_shards=None, shard_id=None, cache=None)
读取和解析逗号分隔值CSV数据文件作为源数据集。
生成的数据集的列取决于源CSV文件。
**参数:**
- **dataset_files** (Union[str, list[str]])数据集文件路径支持单文件路径字符串、多文件路径字符串列表或可被glob库模式匹配的字符串文件列表将在内部进行字典排序。
- **field_delim** (str可选):指定用于分隔字段的分隔符(默认为',')。
- **column_defaults** (list可选)以列表形式指定每个CSV字段的数据类型默认为None有效的类型包括float、int或string。如果未指定该列表则所有列的数据类型将被视为string。
- **column_names** (list[str],可选)指定数据集生成的列名默认值为None。如果未指定该列表则将CSV文件第一行的字段作为列名生成。
- **num_samples** (int可选)指定从数据集中读取的样本数默认为None即读取所有样本
- **num_parallel_workers** (int可选):指定读取数据的工作线程数(默认值None即使用mindspore.dataset.config中配置的线程数
- **shuffle** (Union[bool, Shuffle level], 可选)每个epoch中数据混洗的模式默认为为mindspore.dataset.Shuffle.GLOBAL
如果为False则不混洗如果为True等同于将`shuffle`设置为mindspore.dataset.Shuffle.GLOBAL。另外也可以传入枚举变量设置shuffle级别
- Shuffle.GLOBAL混洗文件和样本。
- Shuffle.FILES仅混洗文件。
- **num_shards** (int, 可选)指定分布式训练时将数据集进行划分的分片数默认值None。指定此参数后, `num_samples` 表示每个分片的最大样本数。
- **shard_id** (int, 可选)指定分布式训练时使用的分片ID号默认值None。只有当指定了 `num_shards` 时才能指定此参数。
- **cache** (DatasetCache, 可选)数据缓存客户端实例用于加快数据集处理速度默认为None不使用缓存
**异常:**
- **RuntimeError**:参数`dataset_files` 所指的文件无效或不存在。
- **RuntimeError**:参数`num_parallel_workers` 超过系统最大线程数。
- **RuntimeError**:指定了`num_shards`参数,但是未指定`shard_id`参数。
- **RuntimeError**:指定了`shard_id`参数,但是未指定`num_shards`参数。
**样例:**
>>> csv_dataset_dir = ["/path/to/csv_dataset_file"] # 此列表可以包含1个或多个CSV文件
>>> dataset = ds.CSVDataset(dataset_files=csv_dataset_dir, column_names=['col1', 'col2', 'col3', 'col4'])

View File

@ -0,0 +1,130 @@
mindspore.dataset.CelebADataset
===============================
Class mindspore.dataset.CelebADataset(dataset_dir, num_parallel_workers=None, shuffle=None, usage='all', sampler=None, decode=False, extensions=None, num_samples=None, num_shards=None, shard_id=None, cache=None)
用于读取和解析CelebA数据集的源数据文件。
目前仅支持读取解析标注文件`list_attr_celeba.txt`作为数据集的标注。
生成的数据集有两列::py:obj:`[image, attr]`
:py:obj:`image` 的数据类型为uint8。
:py:obj:`attr` 的数据类型为uint32并以one-hot编码的形式生成。
**参数:**
- **dataset_dir** (str):包含数据集文件的根目录路径。
- **num_parallel_workers** (int可选)指定读取数据的工作线程数默认值None即使用mindspore.dataset.config中配置的线程数
- **shuffle** (bool可选)是否混洗数据集默认为None下表中会展示不同配置的预期行为
- **usage** (str可选):指定数据集的子集,可取值为'train''valid''test'或'all'。(默认值为'all',即全部样本图片)。
- **sampler** (Sampler可选)指定从数据集中选取样本的采样器默认为None下表中会展示不同配置的预期行为
- **decode** (bool可选)是否对读取的图像进行解码操作默认为False
- **extensions** (list[str],可选)指定文件扩展后缀仅读取这些后缀的文件到数据集中默认为None
- **num_samples** (int可选)指定从数据集中读取的样本数可以小于数据集总数默认值为None即全部样本图片)。
- **num_shards** (int, 可选)指定分布式训练时将数据集进行划分的分片数默认值None。指定此参数后, `num_samples` 表示每个分片的最大样本数。
- **shard_id** (int, 可选)指定分布式训练时使用的分片ID号默认值None。只有当指定了 `num_shards` 时才能指定此参数。
- **cache** (DatasetCache, 可选)数据缓存客户端实例用于加快数据集处理速度默认为None不使用缓存
**异常:**
- **RuntimeError**:参数`dataset_dir`不包含任何数据文件。
- **RuntimeError**:参数`num_parallel_workers`超过系统最大线程数。
- **RuntimeError**: 同时指定了`sampler``shuffle`
- **RuntimeError**: 同时指定了`sampler``num_shards`
- **RuntimeError**: 指定了`num_shards`参数,但是未指定`shard_id`参数。
- **RuntimeError**: 指定了`shard_id`参数,但是未指定`num_shards`参数。
- **ValueError**: `shard_id`参数错误小于0或者大于等于 `num_shards`)。
**注:**
- 此数据集可以指定`sampler`参数,但`sampler``shuffle` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
:widths: 25 25 50
:header-rows: 1
* - 参数`sampler`
- 参数`shuffle`
- 预期数据顺序
* - None
- None
- 随机排列
* - None
- True
- 随机排列
* - None
- False
- 顺序排列
* - 参数`sampler`
- None
- 由`sampler`行为定义的顺序
* - 参数`sampler`
- True
- 不允许
* - 参数`sampler`
- False
- 不允许
**示例:**
>>> celeba_dataset_dir = "/path/to/celeba_dataset_directory"
>>>
>>> # 从CelebA数据集中随机读取5个样本图片
>>> dataset = ds.CelebADataset(dataset_dir=celeba_dataset_dir, usage='train', num_samples=5)
>>>
>>> # 注:在生成的数据集对象中,每一次迭代得到的数据行都有"image"和"attr" 两个键
**关于CelebA数据集**
CelebFaces Attributes DatasetCelebA数据集是一个大规模的人脸属性数据集拥有超过20万名人图像每个图像都有40个属性标注。
此数据集包含了大量不同姿态、各种背景的人脸图像,种类丰富、数量庞大、标注充分。数据集总体包含:
* 10177个不同的身份
* 202599张人脸图像
* 每张图像拥有5个五官位置标注40个属性标签。
此数据集可用于各种计算机视觉任务的训练和测试,包括人脸识别、人脸检测、五官定位、人脸编辑和合成等。
原始CelebA数据集结构
.. code-block::
.
└── CelebA
├── README.md
├── Img
│ ├── img_celeba.7z
│ ├── img_align_celeba_png.7z
│ └── img_align_celeba.zip
├── Eval
│ └── list_eval_partition.txt
└── Anno
├── list_landmarks_celeba.txt
├── list_landmarks_align_celeba.txt
├── list_bbox_celeba.txt
├── list_attr_celeba.txt
└── identity_CelebA.txt
您可以将数据集解压成如下的文件结构并通过MindSpore的API进行读取。
.. code-block::
.
└── celeba_dataset_directory
├── list_attr_celeba.txt
├── 000001.jpg
├── 000002.jpg
├── 000003.jpg
├── ...
**引用:**
.. code-block::
@article{DBLP:journals/corr/LiuLWT14,
author = {Ziwei Liu and Ping Luo and Xiaogang Wang and Xiaoou Tang},
title = {Deep Learning Face Attributes in the Wild},
journal = {CoRR},
volume = {abs/1411.7766},
year = {2014},
url = {http://arxiv.org/abs/1411.7766},
archivePrefix = {arXiv},
eprint = {1411.7766},
timestamp = {Tue, 10 Dec 2019 15:37:26 +0100},
biburl = {https://dblp.org/rec/journals/corr/LiuLWT14.bib},
bibsource = {dblp computer science bibliography, https://dblp.org},
howpublished = {http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html}
}

View File

@ -0,0 +1,150 @@
mindspore.dataset.CocoDataset
==============================
Class mindspore.dataset.CocoDataset(dataset_dir, annotation_file, task='Detection', num_samples=None, num_parallel_workers=None, shuffle=None, decode=False, sampler=None, num_shards=None, shard_id=None, cache=None, extra_metadata=False)
用于读取和解析COCO数据集的源数据文件。
该API支持解析COCO2017数据集支持四种类型的机器学习任务分别是目标检测、关键点检测、物体分割和全景分割。
根据不同`task`参数设置,生成数据集具有不同的输出列:
- `task` = :py:obj:`Detection`, 输出列: :py:obj:`[image, dtype=uint8]`, :py:obj:`[bbox, dtype=float32]`, :py:obj:`[category_id, dtype=uint32]`, :py:obj:`[iscrowd, dtype=uint32]`.
- `task` = :py:obj:`Stuff`, 输出列: :py:obj:`[image, dtype=uint8]`, :py:obj:`[segmentation,dtype=float32]`, :py:obj:`[iscrowd,dtype=uint32]`.
- `task` = :py:obj:`Keypoint`, 输出列: :py:obj:`[image, dtype=uint8]`, :py:obj:`[keypoints, dtype=float32]`, :py:obj:`[num_keypoints, dtype=uint32]`.
- `task` = :py:obj:`Panoptic`, 输出列: :py:obj:`[image, dtype=uint8]`, :py:obj:`[bbox, dtype=float32]`, :py:obj:`[category_id, dtype=uint32]`, :py:obj:`[iscrowd, dtype=uint32]`, :py:obj:`[area, dtype=uint32]`.
**参数:**
- **dataset_dir** (str):包含数据集文件的根目录路径。
- **annotation_file** (str)数据集标注JSON文件的路径。
- **task** (str可选)指定COCO数据的任务类型。支持的任务类型包括`Detection``Stuff``Panoptic``Keypoint`(默认为`Detection`)。
- **num_samples** (int可选)指定从数据集中读取的样本数可以小于数据集总数默认值为None即全部样本图片)。
- **num_parallel_workers** (int可选)指定读取数据的工作线程数默认值None即使用mindspore.dataset.config中配置的线程数
- **shuffle** (bool可选)是否混洗数据集默认为None下表中会展示不同配置的预期行为
- **decode** (bool可选)是否对读取的图像进行解码操作默认为False
- **sampler** (Sampler可选)指定从数据集中选取样本的采样器默认为None下表中会展示不同配置的预期行为
- **num_shards** (int, 可选)指定分布式训练时将数据集进行划分的分片数默认值None。指定此参数后, `num_samples` 表示每个分片的最大样本数。
- **shard_id** (int, 可选)指定分布式训练时使用的分片ID号默认值None。只有当指定了 `num_shards` 时才能指定此参数。
- **cache** (DatasetCache, 可选)数据缓存客户端实例用于加快数据集处理速度默认为None不使用缓存
- **extra_metadata** (bool可选)用于指定是否额外输出一列数据用于表示图像元信息。如果为True则将额外输出一列数据名为:py:obj:`[_meta-filename, dtype=string]` 默认值为False
**异常:**
- **RuntimeError**: 参数`dataset_dir`不包含任何数据文件。
- **RuntimeError**: 参数`num_parallel_workers`超过系统最大线程数。
- **RuntimeError**: 同时指定了`sampler``shuffle`
- **RuntimeError**: 同时指定了`sampler``num_shards`
- **RuntimeError**: 指定了`num_shards`参数,但是未指定`shard_id`参数。
- **RuntimeError**: 指定了`shard_id`参数,但是未指定`num_shards`参数。
- **RuntimeError**: 解析JSON文件失败。
- **ValueError** 指定的任务不为`Detection``Stuff``Panoptic``Keypoint`
- **ValueError** 参数`annotation_file`对应的文件不存在。
- **ValueError** 参数`dataset_dir`路径不存在。
- **ValueError**: 参数`shard_id`错误小于0或者大于等于 `num_shards`)。
**注:**
- 当指定`extra_metadata`为True时除非显式使用`rename`算子以删除元信息列明的前缀('_meta-')
否则迭代的数据行中不会出现'[_meta-filename, dtype=string]'列。
- CocoDataset的`sampler`参数不支持指定PKSampler。
- 此数据集可以指定`sampler`参数,但`sampler``shuffle` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
:widths: 25 25 50
:header-rows: 1
* - 参数`sampler`
- 参数`shuffle`
- 预期数据顺序
* - None
- None
- 随机排列
* - None
- True
- 随机排列
* - None
- False
- 顺序排列
* - 参数`sampler`
- None
- 由`sampler`行为定义的顺序
* - 参数`sampler`
- True
- 不允许
* - 参数`sampler`
- False
- 不允许
**样例:**
>>> coco_dataset_dir = "/path/to/coco_dataset_directory/images"
>>> coco_annotation_file = "/path/to/coco_dataset_directory/annotation_file"
>>>
>>> # 1读取COCO数据集中`Detection`任务中的数据。
>>> dataset = ds.CocoDataset(dataset_dir=coco_dataset_dir,
... annotation_file=coco_annotation_file,
... task='Detection')
>>>
>>> # 2读取COCO数据集中`Stuff`任务中的数据。
>>> dataset = ds.CocoDataset(dataset_dir=coco_dataset_dir,
... annotation_file=coco_annotation_file,
... task='Stuff')
>>>
>>> # 3读取COCO数据集中`Panoptic`任务中的数据。
>>> dataset = ds.CocoDataset(dataset_dir=coco_dataset_dir,
... annotation_file=coco_annotation_file,
... task='Panoptic')
>>>
>>> # 4读取COCO数据集中`Keypoint`任务中的数据。
>>> dataset = ds.CocoDataset(dataset_dir=coco_dataset_dir,
... annotation_file=coco_annotation_file,
... task='Keypoint')
>>>
>>> # 在生成的COCO数据集对象中每一次迭代得到的数据行都有"image"和"annotation"两个键。
**关于COCO数据集**
Microsoft Common Objects in ContextCOCO是一个大型数据集该数据集专门为目标检测语义分割和字幕生成任务而设计。
它拥有330K张图像标记数量大于200K个、1500000个目标实例、80个目标类别、91个对象类别、每张图片均有5个字幕、带关键点标注的人有250000个。
与流行的ImageNet数据集相比COCO的类别较少但每个类别中的图片样本非常多。
您可以解压缩原始COCO-2017数据集文件如下目录结构并通过MindSpore的API读取。
.. code-block::
.
└── coco_dataset_directory
├── train2017
│ ├── 000000000009.jpg
│ ├── 000000000025.jpg
│ ├── ...
├── test2017
│ ├── 000000000001.jpg
│ ├── 000000058136.jpg
│ ├── ...
├── val2017
│ ├── 000000000139.jpg
│ ├── 000000057027.jpg
│ ├── ...
└── annotation
├── captions_train2017.json
├── captions_val2017.json
├── instances_train2017.json
├── instances_val2017.json
├── person_keypoints_train2017.json
└── person_keypoints_val2017.json
**引用:**
.. code-block::
@article{DBLP:journals/corr/LinMBHPRDZ14,
author = {Tsung{-}Yi Lin and Michael Maire and Serge J. Belongie and
Lubomir D. Bourdev and Ross B. Girshick and James Hays and
Pietro Perona and Deva Ramanan and Piotr Doll{\'{a}}r and C. Lawrence Zitnick},
title = {Microsoft {COCO:} Common Objects in Context},
journal = {CoRR},
volume = {abs/1405.0312},
year = {2014},
url = {http://arxiv.org/abs/1405.0312},
archivePrefix = {arXiv},
eprint = {1405.0312},
timestamp = {Mon, 13 Aug 2018 16:48:13 +0200},
biburl = {https://dblp.org/rec/journals/corr/LinMBHPRDZ14.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}

View File

@ -0,0 +1,13 @@
..py:method:: add_sampler(new_sampler)
为当前数据集添加采样器。
**参数:**
**new_sampler** (Sampler) :作用于当前数据集的采样器。
样例:
>>> # dataset为任意数据集实例
>>> # 对该数据集应用DistributedSampler
>>> new_sampler = ds.DistributedSampler(10, 2)
>>> dataset.add_sampler(new_sampler)

View File

@ -0,0 +1,13 @@
..py:method:: use_sampler(new_sampler)
为当前数据集更换一个新的采样器。
**参数:**
**new_sampler** (Sampler) :替换的新采样器。
样例:
>>> # dataset为任意数据集实例
>>> # 将该数据集的采样器更换为DistributedSampler
>>> new_sampler = ds.DistributedSampler(10, 2)
>>> dataset.use_sampler(new_sampler)

View File

@ -0,0 +1,124 @@
mindspore.dataset.GeneratorDataset
===================================
Class mindspore.dataset.GeneratorDataset(source, column_names=None, column_types=None, schema=None, num_samples=None, num_parallel_workers=1, shuffle=None, sampler=None, num_shards=None, shard_id=None, python_multiprocessing=True, max_rowsize=6)
通过调用Python数据源从Python中生成数据作为源数据集。
生成的数据集的列名和列类型取决于用户定义的Python数据源。
**参数:**
- **source** (Union[Callable, Iterable, Random Accessible])
一个Python的可调用对象可以是一个可迭代的Python对象或支持随机访问的Python对象。
要求传入的可调用对象,可以通过`source().next()`的方式返回一个由NumPy数组构成的元组。
要求传入的可迭代对象,可以通过`iter(source).next()`的方式返回一个由NumPy数组构成的元组。
要求传入的支持随机访问对象,可以通过`source[idx]`的方式返回一个由NumPy数组构成的元组。
- **column_names** (Union[str, list[str]],可选)指定数据集生成的列名默认值为None用户必须提供此参数或通过参数`schema`指定列名。
- **column_types** ((list[mindspore.dtype],可选)指定生成数据集各个数据列的数据类型默认为None
如果未指定该参数,则自动推断类型;如果指定了该参数,将在数据输出时做类型匹配检查。
- **schema** (Union[Schema, str],可选)读取模式策略用于指定读取数据列的数据类型、数据维度等信息支持传入JSON文件或`Schema`对象的路径。
对于数据集生成的列名,用户需要提供`column_names``schema`进行指定,如果同时指定两者,则将优先从`schema`获取列名信息。
- **num_samples** (int可选)指定从数据集中读取的样本数默认为None
- **num_parallel_workers** (int可选)指定读取数据的工作线程数默认值为1
- **shuffle** (bool可选):是否混洗数据集。只有输入的`source`参数带有可随机访问属性__getitem__才可以指定该参数。默认值为None下表中会展示不同配置的预期行为
- **sampler** (Union[Sampler, Iterable],可选):指定从数据集中选取样本的采样器。只有输入的`source`参数带有可随机访问属性__getitem__才可以指定该参数默认值为None下表中会展示不同配置的预期行为
- **num_shards** (int, 可选): 分布式训练时将数据集划分成指定的分片数默认值None。指定此参数后`num_samples` 表示每个分片的最大样本数。需要输入`data`支持可随机访问才能指定该参数。
- **shard_id** (int, 可选): 分布式训练时指定使用的分片ID号默认值None。只有当指定了 `num_shards` 时才能指定此参数。
- **python_multiprocessing** (bool可选)启用Python多进程模式加速运算默认为True。当传入Python对象的计算量很大时开启此选项可能会有较好效果。
- **max_rowsize** (int可选)指定在多进程之间复制数据时共享内存分配的最大空间数量级为MB默认为6MB仅当参数`python_multiprocessing`设为True时此参数才会生效。
**异常:**
- **RuntimeError**Python对象`source`在执行期间引发异常。
- **RuntimeError**:参数`column_names`指定的列名数量与`source`的输出数据数量不匹配。
- **RuntimeError**:参数`num_parallel_workers`超过最大线程数。
- **RuntimeError**: 同时指定了`sampler``shuffle`
- **RuntimeError**: 同时指定了`sampler``num_shards`
- **RuntimeError**: 指定了`num_shards`参数,但是未指定`shard_id`参数。
- **RuntimeError**: 指定了`shard_id`参数,但是未指定`num_shards`参数。
- **ValueError**: `shard_id`参数错误小于0或者大于等于 `num_shards`)。
**注:**
- 此数据集可以指定`sampler`参数,但`sampler``shuffle` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
:widths: 25 25 50
:header-rows: 1
* - 参数`sampler`
- 参数`shuffle`
- 预期数据顺序
* - None
- None
- 随机排列
* - None
- True
- 随机排列
* - None
- False
- 顺序排列
* - 参数`sampler`
- None
- 由`sampler`行为定义的顺序
* - 参数`sampler`
- True
- 不允许
* - 参数`sampler`
- False
- 不允许
**样例:**
>>> import numpy as np
>>>
>>> # 1定义一个Python生成器作为GeneratorDataset的可调用对象。
>>> def generator_multidimensional():
... for i in range(64):
... yield (np.array([[i, i + 1], [i + 2, i + 3]]),)
>>>
>>> dataset = ds.GeneratorDataset(source=generator_multidimensional, column_names=["multi_dimensional_data"])
>>>
>>> # 2定义一个Python生成器返回多列数据作为GeneratorDataset的可调用对象。
>>> def generator_multi_column():
... for i in range(64):
... yield np.array([i]), np.array([[i, i + 1], [i + 2, i + 3]])
>>>
>>> dataset = ds.GeneratorDataset(source=generator_multi_column, column_names=["col1", "col2"])
>>>
>>> # 3定义一个可迭代数据集对象作为GeneratorDataset的可调用对象。
>>> class MyIterable:
... def __init__(self):
... self._index = 0
... self._data = np.random.sample((5, 2))
... self._label = np.random.sample((5, 1))
...
... def __next__(self):
... if self._index >= len(self._data):
... raise StopIteration
... else:
... item = (self._data[self._index], self._label[self._index])
... self._index += 1
... return item
...
... def __iter__(self):
... self._index = 0
... return self
...
... def __len__(self):
... return len(self._data)
>>>
>>> dataset = ds.GeneratorDataset(source=MyIterable(), column_names=["data", "label"])
>>>
>>> # 4定义一个支持随机访问数据集对象作为GeneratorDataset的可调用对象。
>>> class MyAccessible:
... def __init__(self):
... self._data = np.random.sample((5, 2))
... self._label = np.random.sample((5, 1))
...
... def __getitem__(self, index):
... return self._data[index], self._label[index]
...
... def __len__(self):
... return len(self._data)
>>>
>>> dataset = ds.GeneratorDataset(source=MyAccessible(), column_names=["data", "label"])
>>>
>>> # 注意Python的list、dict、tuple也是支持随机可访问的同样可以作为GeneratorDataset的输入
>>> dataset = ds.GeneratorDataset(source=[(np.array(0),), (np.array(1),), (np.array(2),)], column_names=["col"])

View File

@ -0,0 +1,72 @@
mindspore.dataset.ManifestDataset
==================================
Class mindspore.dataset.ManifestDataset(dataset_file, usage='train', num_samples=None, num_parallel_workers=None, shuffle=None, sampler=None, class_indexing=None, decode=False, num_shards=None, shard_id=None, cache=None)
读取Manifest文件作为源数据集。
生成的数据集有两列::py:obj:`[image, label]`
:py:obj:`image` 的数据类型为uint8类型。
:py:obj:`label` 的数据类型是uint64类型的标量。
**参数:**
- **dataset_file** (str):数据集文件的目录路径。
- **usage** (str可选):指定数据集的子集,可取值为'train'、'eval'和'inference' (默认为'train')。
- **num_samples** (int可选)指定从数据集中读取的样本数默认值为None即全部样本图片)。
- **num_parallel_workers** (int可选)指定读取数据的工作线程数默认值None即使用mindspore.dataset.config中配置的线程数
- **shuffle** (bool可选)是否混洗数据集默认为None下表中会展示不同配置的预期行为
- **sampler** (Sampler可选)指定从数据集中选取样本的采样器默认为None下表中会展示不同配置的预期行为
- **class_indexing** (dict可选)指定文件夹名称到类标签的映射要求映射规则为str到int默认为None文件夹名称将按字母顺序排列每类都有一个唯一的索引从0开始
- **decode** (bool, 可选)是否对读取的图像进行解码操作默认为False
- **num_shards** (int, 可选): 分布式训练时将数据集划分成指定的分片数默认值None。指定此参数后`num_samples` 表示每个分片的最大样本数。
- **shard_id** (int, 可选): 分布式训练时指定使用的分片ID号默认值None。只有当指定了 `num_shards` 时才能指定此参数。
- **cache** (DatasetCache, 可选)数据缓存客户端实例用于加快数据集处理速度默认为None不使用缓存
**异常:**
- **RuntimeError**:参数`dataset_files`不存在或无效。
- **RuntimeError**:参数`num_parallel_workers`超过系统最大线程数。
- **RuntimeError**:同时指定了`sampler``shuffle`
- **RuntimeError**:同时指定了`sampler``num_shards``shard_id`
- **RuntimeError**: 指定了`num_shards`参数,但是未指定`shard_id`参数。
- **RuntimeError**: 指定了`shard_id`参数,但是未指定`num_shards`参数。
- **RuntimeError**:参数`class_indexing`的类型不是字典。
- **ValueError**: `shard_id`参数错误小于0或者大于等于 `num_shards`)。
**注:**
- 如果`decode`参数指定为False`image`列的shape为[image_size],否则为[H,W,C]。
- 此数据集可以指定`sampler`参数,但`sampler``shuffle` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
:widths: 25 25 50
:header-rows: 1
* - 参数`sampler`
- 参数`shuffle`
- 预期数据顺序
* - None
- None
- 随机排列
* - None
- True
- 随机排列
* - None
- False
- 顺序排列
* - 参数`sampler`
- None
- 由`sampler`行为定义的顺序
* - 参数`sampler`
- True
- 不允许
* - 参数`sampler`
- False
- 不允许
**样例:**
>>> manifest_dataset_dir = "/path/to/manifest_dataset_file"
>>>
>>> # 1使用八个线程读取Manifest数据集文件并指定读取"train"子集数据
>>> dataset = ds.ManifestDataset(dataset_file=manifest_dataset_dir, usage="train", num_parallel_workers=8)
>>>
>>> # 2 对Manifest数据集进行分布式训练并将数据集拆分为2个分片当前数据集仅加载分片ID号为0的数据
>>> dataset = ds.ManifestDataset(dataset_file=manifest_dataset_dir, num_shards=2, shard_id=0)

View File

@ -0,0 +1,67 @@
mindspore.dataset.MindDataset
==============================
Class mindspore.dataset.MindDataset(dataset_file, columns_list=None, num_parallel_workers=None, shuffle=None, num_shards=None, shard_id=None, sampler=None, padded_sample=None, num_padded=None, num_samples=None, cache=None)
读取和解析MindRecord数据文件作为源数据集。
生成的数据集的列名和列类型取决于MindRecord文件中的保存的列名与类型。
**参数:**
- **dataset_file** (Union[str, list[str]])MindRecord文件路径支持单文件路径字符串、多文件路径字符串列表。
如果`dataset_file`的类型是字符串则它代表一组具有相同前缀名的MindRecord文件同一路径下具有相同前缀名的其他MindRecord文件将会被自动寻找并加载。
如果`dataset_file`的类型是列表则它表示所需读取的MindRecord数据文件。
- **columns_list** (list[str],可选)指定从MindRecord文件中读取的数据列默认为None读取所有列
- **num_parallel_workers** (int可选)指定读取数据的工作线程数默认值None即使用mindspore.dataset.config中配置的线程数
- **shuffle** (Union[bool, Shuffle level], 可选)每个epoch中数据混洗的模式默认为为mindspore.dataset.Shuffle.GLOBAL
如果为False则不混洗如果为True等同于将`shuffle`设置为mindspore.dataset.Shuffle.GLOBAL。另外也可以传入枚举变量设置shuffle级别
- Shuffle.GLOBAL混洗文件和样本。
- Shuffle.FILES仅混洗文件。
- Shuffle.INFILE保持读入文件的序列仅混洗每个文件中的数据。
- **num_shards** (int, 可选): 分布式训练时将数据集划分成指定的分片数默认值None。指定此参数后`num_samples` 表示每个分片的最大样本数。
- **shard_id** (int, 可选): 分布式训练时指定使用的分片ID号默认值None。只有当指定了 `num_shards` 时才能指定此参数。
- **sampler** (Sampler可选)指定从数据集中选取样本的采样器默认为None下表中会展示不同配置的预期行为
当前此数据集仅支持以下采样器SubsetRandomSampler、PkSampler、RandomSampler、SequentialSampler和DistributedSampler。
- **padded_sample** (dict可选): 指定额外添加到数据集的样本可用于在分布式训练时补齐分片数据注意字典的键名需要与column_list指定的列名相同。
- **num_padded** (int可选)指定额外添加的数据集样本的数量。在分布式训练时可用于为数据集补齐样本使得总样本数量可被num_shards整除。
- **num_samples** (int可选)指定从数据集中读取的样本数默认值为None表示所有样本)。
- **cache** (DatasetCache, 可选)数据缓存客户端实例用于加快数据集处理速度默认为None不使用缓存
**异常:**
- **RuntimeError**:参数`dataset_files`无效或不存在。
- **RuntimeError**:参数`num_parallel_workers`超过最大线程数。
- **RuntimeError**:指定了`num_shards`,但`shard_id`为None。
- **RuntimeError**:指定了`shard_id`,但`num_shards`为None。
- **ValueError**: `shard_id`参数错误小于0或者大于等于 `num_shards`)。
**注:**
- 此数据集可以指定`sampler`参数,但`sampler``shuffle` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
:widths: 25 25 50
:header-rows: 1
* - 参数`sampler`
- 参数`shuffle`
- 预期数据顺序
* - None
- None
- 随机排列
* - None
- True
- 随机排列
* - None
- False
- 顺序排列
* - 参数`sampler`
- None
- 由`sampler`行为定义的顺序
* - 参数`sampler`
- True
- 不允许
* - 参数`sampler`
- False
- 不允许
**样例:**
>>> mind_dataset_dir = ["/path/to/mind_dataset_file"] # 此列表可以包含1个或多个MindRecord文件
>>> dataset = ds.MindDataset(dataset_file=mind_dataset_dir)

View File

@ -0,0 +1,53 @@
mindspore.dataset.TFRecordDataset
=================================
Class mindspore.dataset.TFRecordDataset(dataset_files, schema=None, columns_list=None, num_samples=None, num_parallel_workers=None, shuffle=<Shuffle.GLOBAL: 'global'>, num_shards=None, shard_id=None, shard_equal_rows=False, cache=None)
读取和解析以TFData格式存储的数据集文件作为源数据集。
生成的数据集的列名和列类型取决于TFRecord文件中的保存的列名与类型。
**参数:**
- **dataset_files** (Union[str, list[str]])数据集文件路径支持单文件路径字符串、多文件路径字符串列表或可被glob库模式匹配的字符串文件列表将在内部进行字典排序。
- **schema** (Union[str, Schema],可选):读取模式策略,用于指定读取数据列的数据类型、数据维度等信息。
支持传入JSON文件或`Schema`对象的路径默认为None将使用TFData文件中的元数据构造`Schema`对象)。
- **columns_list** (list[str],可选)指定从TFRecord文件中读取的数据列默认为None读取所有列
- **num_samples** (int可选)指定从数据集中读取的样本数默认为None
如果`num_samples`为None并且numRows字段由参数`schema`定义)不存在,则读取所有数据集;
如果`num_samples`为None并且numRows字段由参数`schema`定义的值大于0则读取numRows条数据
如果`num_samples`和numRows字段由参数`schema`定义的值都大于0仅有参数`num_samples`生效且读取给定数量的数据。
- **num_parallel_workers** (int可选)指定读取数据的工作线程数默认值None即使用mindspore.dataset.config中配置的线程数
- **shuffle** (Union[bool, Shuffle level], 可选)每个epoch中数据混洗的模式默认为为mindspore.dataset.Shuffle.GLOBAL
如果为False则不混洗如果为True等同于将`shuffle`设置为mindspore.dataset.Shuffle.GLOBAL。另外也可以传入枚举变量设置shuffle级别
- Shuffle.GLOBAL混洗文件和样本。
- Shuffle.FILES仅混洗文件。
- **num_shards** (int, 可选): 分布式训练时将数据集划分成指定的分片数默认值None。指定此参数后`num_samples` 表示每个分片的最大样本数。
- **shard_id** (int, 可选): 分布式训练时指定使用的分片ID号默认值None。只有当指定了 `num_shards` 时才能指定此参数。
- **shard_equal_rows** (bool可选) 分布式训练时为所有分片获取等量的数据行数默认为False
如果`shard_equal_rows`为False则可能会使得每个分片的数据条目不相等从而导致分布式训练失败。
因此当每个TFRecord文件的数据数量不相等时建议将此参数设置为True。注意只有当指定了 `num_shards` 时才能指定此参数。
- **cache** (DatasetCache, 可选)数据缓存客户端实例用于加快数据集处理速度默认为None不使用缓存
**异常:**
- **RuntimeError**:参数`dataset_files`无效或不存在。
- **RuntimeError**:参数`num_parallel_workers`超过最大线程数。
- **RuntimeError**:指定了`num_shards`,但`shard_id`为None。
- **RuntimeError**:指定了`shard_id`,但`num_shards`为None。
- **ValueError**:参数`shard_id`无效小于0或者大于等于`num_shards`)。
**示例:**
>>> from mindspore import dtype as mstype
>>>
>>> tfrecord_dataset_dir = ["/path/to/tfrecord_dataset_file"] # 此列表可以包含1个或多个TFRecord文件
>>> tfrecord_schema_file = "/path/to/tfrecord_schema_file"
>>>
>>> # 1) 从tfrecord_dataset_dir路径的文件读取数据集。
>>> # 由于未指定Schema则将TFRecord文件数据的第一行的元数据将用作Schema。
>>> dataset = ds.TFRecordDataset(dataset_files=tfrecord_dataset_dir)
>>>
>>> # 2) 用户使用自定义的Schema从tfrecord_dataset_dir路径的文件读取数据集。
>>> schema = ds.Schema()
>>> schema.add_column(name='col_1d', de_type=mstype.int64, shape=[2])
>>> dataset = ds.TFRecordDataset(dataset_files=tfrecord_dataset_dir, schema=schema)
>>>
>>> # 3) 用户通过传入JSON文件构造Schema从tfrecord_dataset_dir路径的文件读取数据集。
>>> dataset = ds.TFRecordDataset(dataset_files=tfrecord_dataset_dir, schema=tfrecord_schema_file)

View File

@ -0,0 +1,29 @@
mindspore.dataset.TextFileDataset
==================================
Class mindspore.dataset.TextFileDataset(dataset_files, num_samples=None, num_parallel_workers=None, shuffle=<Shuffle.GLOBAL: 'global'>, num_shards=None, shard_id=None, cache=None)
用于读取和解析文本格式的文件作为源数据集。
生成的数据集有一个数据列py:obj:`[text]`类型为string。
**参数:**
- **dataset_files** (Union[str, list[str]])数据集文件路径支持单文件路径字符串、多文件路径字符串列表或可被glob库模式匹配的字符串文件列表将在内部进行字典排序。
- **num_samples** (int可选)指定从数据集中读取的样本数默认为None即读取所有样本
- **num_parallel_workers** (int可选):指定读取数据的工作线程数(默认值None即使用mindspore.dataset.config中配置的线程数
- **shuffle** (Union[bool, Shuffle level], 可选)每个epoch中数据混洗的模式默认为为mindspore.dataset.Shuffle.GLOBAL
如果为False则不混洗如果为True等同于将`shuffle`设置为mindspore.dataset.Shuffle.GLOBAL。另外也可以传入枚举变量设置shuffle级别
- Shuffle.GLOBAL混洗文件和样本。
- Shuffle.FILES仅混洗文件。
- **num_shards** (int, 可选)指定分布式训练时将数据集进行划分的分片数默认值None。指定此参数后, `num_samples` 表示每个分片的最大样本数。
- **shard_id** (int, 可选)指定分布式训练时使用的分片ID号默认值None。只有当指定了 `num_shards` 时才能指定此参数。
- **cache** (DatasetCache, 可选)数据缓存客户端实例用于加快数据集处理速度默认为None不使用缓存
**异常:**
- **RuntimeError**`dataset_files` 所指的文件无效或不存在。
- **RuntimeError**`num_parallel_workers` 超过系统最大线程数。
- **RuntimeError**:指定了`num_shards`参数,但是未指定`shard_id`参数。
- **RuntimeError**:指定了`shard_id`参数,但是未指定`num_shards`参数。
**样例:**
>>> text_file_dataset_dir = ["/path/to/text_file_dataset_file"] # # 此列表可以包含1个或多个文本文件
>>> dataset = ds.TextFileDataset(dataset_files=text_file_dataset_dir)

View File

@ -0,0 +1,18 @@
mindspore.dataset
该模块提供了加载和处理各种通用数据集的API如MNIST、CIFAR-10、CIFAR-100、VOC、COCO、ImageNet、CelebA、CLUE等
也支持加载业界标准格式的数据集包括MindRecord、TFRecord、Manifest等。此外用户还可以使用此模块定义和加载自己的数据集。
该模块还提供了在加载时进行数据采样的API如SequentialSample、RandomSampler、DistributedSampler等。
大多数数据集可以通过指定参数`cache`启用缓存服务,以提升整体数据处理效率。
请注意Windows平台上还不支持缓存服务因此在Windows上加载和处理数据时请勿使用。更多介绍和限制
请参考`Single-Node Tensor Cache <https://www.mindspore.cn/docs/programming_guide/zh-CN/master/cache.html>`_
在API示例中常用的模块导入方法如下
.. code-block::
import mindspore.dataset as ds
from mindspore.dataset.transforms import c_transforms

View File

@ -1745,8 +1745,8 @@ class Dataset:
>>> import numpy as np
>>>
>>> def generator1():
>>> for i in range(1, 100):
>>> yield np.ones((16, i, 83)), np.array(i)
... for i in range(1, 100):
... yield np.ones((16, i, 83)), np.array(i)
>>>
>>> dataset = ds.GeneratorDataset(generator1, ["data1", "data2"])
>>> dataset.set_dynamic_columns(columns={"data1": [16, None, 83], "data2": []})
@ -1767,8 +1767,8 @@ class Dataset:
>>> import numpy as np
>>>
>>> def generator1():
>>> for i in range(1, 100):
>>> yield np.ones((16, i, 83)), np.array(i)
... for i in range(1, 100):
... yield np.ones((16, i, 83)), np.array(i)
>>>
>>> dataset = ds.GeneratorDataset(generator1, ["data1", "data2"])
>>> dataset.set_dynamic_columns(columns={"data1": [16, None, 83], "data2": []})
@ -5799,6 +5799,7 @@ class Schema:
RuntimeError: If column's type field is missing.
Examples:
>>> from mindspore.dataset import Schema
>>> schema = Schema()
>>> columns1 = [{'name': 'image', 'type': 'int8', 'shape': [3, 3]},
>>> {'name': 'label', 'type': 'int8', 'shape': [1]}]
@ -6126,7 +6127,7 @@ class VOCDataset(MappableDataset):
Examples:
>>> voc_dataset_dir = "/path/to/voc_dataset_directory"
>>>
>>> dataset = ds.VOCDataset(dataset_dir=voc_dataset_dir)
>>> dataset = ds.VOCDataset(dataset_dir=voc_dataset_dir, task="Detection")
>>> class_indexing = dataset.get_class_indexing()
"""
if self.task != "Detection":