!27220 update api format

Merge pull request !27220 from yingchen/code_docs_1204
This commit is contained in:
i-robot 2021-12-04 07:05:27 +00:00 committed by Gitee
commit fe0e61e6cd
54 changed files with 2055 additions and 1887 deletions

View File

@ -94,4 +94,6 @@ mindspore.dataset.CLUEDataset
howpublished = {https://github.com/CLUEbenchmark/CLUE}
}
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -1,32 +1,39 @@
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)
.. py: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文件。
读取和解析逗号分隔值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不使用缓存
- **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`参数。
- **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'])
>>> csv_dataset_dir = ["/path/to/csv_dataset_file"] # 此列表可以包含1个或多个CSV文件
>>> dataset = ds.CSVDataset(dataset_files=csv_dataset_dir, column_names=['col1', 'col2', 'col3', 'col4'])
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -1,46 +1,44 @@
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)
.. py: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`作为数据集的标注。
用于读取和解析CelebA数据集的源数据文件。目前仅支持读取解析标注文件 `list_attr_celeba.txt` 作为数据集的标注。
生成的数据集有两列::py:obj:`[image, attr]`
:py:obj:`image` 的数据类型为uint8。
:py:obj:`attr` 的数据类型为uint32并以one-hot编码的形式生成。
生成的数据集有两列:`[image, attr]`。列: `image` 的数据类型为uint8。列: `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不使用缓存
- **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` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
- **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` )。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
.. note:: 此数据集可以指定 `sampler` 参数,但 `sampler``shuffle` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. list-table:: 配置 `sampler``shuffle` 的不同组合得到的预期排序结果
:widths: 25 25 50
:header-rows: 1
* - 参数`sampler`
- 参数`shuffle`
* - 参数 `sampler`
- 参数 `shuffle`
- 预期数据顺序
* - None
- None
@ -51,31 +49,33 @@ Class mindspore.dataset.CelebADataset(dataset_dir, num_parallel_workers=None, sh
* - None
- False
- 顺序排列
* - 参数`sampler`
* - 参数 `sampler`
- None
- 由`sampler`行为定义的顺序
* - 参数`sampler`
- 由 `sampler` 行为定义的顺序
* - 参数 `sampler`
- True
- 不允许
* - 参数`sampler`
* - 参数 `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_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个属性标签。
CelebFaces Attributes DatasetCelebA数据集是一个大规模的人脸属性数据集拥有超过20万名人图像每个图像都有40个属性标注。此数据集包含了大量不同姿态、各种背景的人脸图像种类丰富、数量庞大、标注充分。数据集总体包含
- 10177个不同的身份
- 202599张人脸图像
- 每张图像拥有5个五官位置标注40个属性标签。
此数据集可用于各种计算机视觉任务的训练和测试,包括人脸识别、人脸检测、五官定位、人脸编辑和合成等。
原始CelebA数据集结构
@ -128,3 +128,11 @@ Class mindspore.dataset.CelebADataset(dataset_dir, num_parallel_workers=None, sh
bibsource = {dblp computer science bibliography, https://dblp.org},
howpublished = {http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html}
}
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -1,56 +1,56 @@
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)
.. py: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数据集支持四种类型的机器学习任务分别是目标检测、关键点检测、物体分割和全景分割。
用于读取和解析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]`.
根据不同 `task` 参数设置,生成数据集具有不同的输出列:
- `task` = `Detection`, 输出列: `[image, dtype=uint8]`, `[bbox, dtype=float32]`, `[category_id, dtype=uint32]`, `[iscrowd, dtype=uint32]`
- `task` = `Stuff`, 输出列: `[image, dtype=uint8]`, `[segmentation,dtype=float32]`, `[iscrowd,dtype=uint32]`
- `task` = `Keypoint`, 输出列: `[image, dtype=uint8]`, `[keypoints, dtype=float32]`, `[num_keypoints, dtype=uint32]`
- `task` = `Panoptic`, 输出列: `[image, dtype=uint8]`, `[bbox, dtype=float32]`, `[category_id, dtype=uint32]`, `[iscrowd, dtype=uint32]`, `[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
- **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则将额外输出一列数据名为 `[_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` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
- **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` )。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
.. note::
- 当指定 `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`
* - 参数 `sampler`
- 参数 `shuffle`
- 预期数据顺序
* - None
- None
@ -61,47 +61,46 @@ Class mindspore.dataset.CocoDataset(dataset_dir, annotation_file, task='Detectio
* - None
- False
- 顺序排列
* - 参数`sampler`
- None
* - 参数 `sampler`
- No ne
- 由`sampler`行为定义的顺序
* - 参数`sampler`
* - 参数 `sampler`
- True
- 不允许
* - 参数`sampler`
* - 参数 `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_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的类别较少但每个类别中的图片样本非常多。
Microsoft Common Objects in ContextCOCO是一个大型数据集该数据集专门为目标检测语义分割和字幕生成任务而设计。它拥有330K张图像标记数量大于200K个、1500000个目标实例、80个目标类别、91个对象类别、每张图片均有5个字幕、带关键点标注的人有250000个。与流行的ImageNet数据集相比COCO的类别较少但每个类别中的图片样本非常多。
您可以解压缩原始COCO-2017数据集文件如下目录结构并通过MindSpore的API读取。
@ -148,3 +147,11 @@ Class mindspore.dataset.CocoDataset(dataset_dir, annotation_file, task='Detectio
biburl = {https://dblp.org/rec/journals/corr/LinMBHPRDZ14.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -111,6 +111,33 @@
... element_length_function, pad_info,
... pad_to_bucket_boundary)
.. py:method:: build_sentencepiece_vocab(columns, vocab_size, character_coverage, model_type, params)
用于从源数据集对象创建句子词表的函数。
**参数:**
- **columns** (list[str]):指定从哪一列中获取单词。
- **vocab_size** (int):词汇表大小。
- **character_coverage** (int)模型涵盖的字符百分比必须介于0.98和1.0之间。默认值如0.9995适用于具有丰富字符集的语言如日语或中文字符集1.0适用于其他字符集较小的语言,比如英语或拉丁文。
- **model_type** (SentencePieceModel)模型类型枚举值包括unigram默认值、bpe、char及word。当类型为word时输入句子必须预先标记。
- **params** (dict):依据原始数据内容构建祠表的附加参数,无附加参数时取值可以是空字典。
**返回:**
SentencePieceVocab从数据集构建的词汇表。
**样例:**
>>> from mindspore.dataset.text import SentencePieceModel
>>>
>>> # DE_C_INTER_SENTENCEPIECE_MODE 是一个映射字典
>>> from mindspore.dataset.text.utils import DE_C_INTER_SENTENCEPIECE_MODE
>>> dataset = ds.TextFileDataset("/path/to/sentence/piece/vocab/file", shuffle=False)
>>> dataset = dataset.build_sentencepiece_vocab(["text"], 5000, 0.9995,
... DE_C_INTER_SENTENCEPIECE_MODE[SentencePieceModel.UNIGRAM],
... {})
..py:method:: build_vocab(columns, freq_range, top_k, special_tokens, special_first)
基于数据集对象创建词汇表。
@ -882,20 +909,3 @@
**返回:**
str流水线的JSON字符串。
..py:method:: zip(datasets)
将数据集和输入的数据集或者数据集元组按列进行合并压缩。输入数据集中的列名必须不同。
**参数:**
**datasets** (Union[tuple, class Dataset]) - 数据集对象的元组或单个数据集对象与当前数据集一起合并压缩。
**返回:**
ZipDataset合并压缩后的数据集对象。
**样例:**
>>> # 创建一个数据集它将dataset和dataset_1进行合并
>>> dataset = dataset.zip(dataset_1)

View File

@ -0,0 +1,16 @@
..py:method:: zip(datasets)
将数据集和输入的数据集或者数据集元组按列进行合并压缩。输入数据集中的列名必须不同。
**参数:**
**datasets** (Union[tuple, class Dataset]) - 数据集对象的元组或单个数据集对象与当前数据集一起合并压缩。
**返回:**
ZipDataset合并压缩后的数据集对象。
**样例:**
>>> # 创建一个数据集它将dataset和dataset_1进行合并
>>> dataset = dataset.zip(dataset_1)

View File

@ -1,50 +1,49 @@
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)
.. py: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数据源。
通过调用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时此参数才会生效。
- **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`)。
- **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` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. note:: 此数据集可以指定 `sampler` 参数,但 `sampler``shuffle` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
.. list-table:: 配置 `sampler` `shuffle` 的不同组合得到的预期排序结果
:widths: 25 25 50
:header-rows: 1
* - 参数`sampler`
- 参数`shuffle`
* - 参数 `sampler`
- 参数 `shuffle`
- 预期数据顺序
* - None
- None
@ -55,70 +54,79 @@ Class mindspore.dataset.GeneratorDataset(source, column_names=None, column_types
* - None
- False
- 顺序排列
* - 参数`sampler`
* - 参数 `sampler`
- None
- 由`sampler`行为定义的顺序
* - 参数`sampler`
- 由 `sampler` 行为定义的顺序
* - 参数 `sampler`
- True
- 不允许
* - 参数`sampler`
* - 参数 `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"])
>>> 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"])
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -101,4 +101,10 @@ mindspore.dataset.ImageFolderDataset
├── classN
├── ...
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -1,47 +1,47 @@
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)
.. py: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类型的标量。
生成的数据集有两列: `[image, label]`。列 `image` 的数据类型为uint8类型。列 `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不使用缓存
- **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` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
- **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`)。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
.. note::
- 如果 `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`
* - 参数 `sampler`
- 参数 `shuffle`
- 预期数据顺序
* - None
- None
@ -52,21 +52,30 @@ Class mindspore.dataset.ManifestDataset(dataset_file, usage='train', num_samples
* - None
- False
- 顺序排列
* - 参数`sampler`
* - 参数 `sampler`
- None
- 由`sampler`行为定义的顺序
* - 参数`sampler`
- 由 `sampler` 行为定义的顺序
* - 参数 `sampler`
- True
- 不允许
* - 参数`sampler`
* - 参数 `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)
>>> 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)
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -1,47 +1,45 @@
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)
.. py: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文件中的保存的列名与类型。
读取和解析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不使用缓存
- **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` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
- **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` )。
.. list-table:: 配置`sampler``shuffle`的不同组合得到的预期排序结果
.. note:: 此数据集可以指定 `sampler` 参数,但 `sampler``shuffle` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. list-table:: 配置 `sampler``shuffle` 的不同组合得到的预期排序结果
:widths: 25 25 50
:header-rows: 1
* - 参数`sampler`
- 参数`shuffle`
* - 参数 `sampler`
- 参数 `shuffle`
- 预期数据顺序
* - None
- None
@ -52,16 +50,25 @@ Class mindspore.dataset.MindDataset(dataset_file, columns_list=None, num_paralle
* - None
- False
- 顺序排列
* - 参数`sampler`
* - 参数 `sampler`
- None
- 由`sampler`行为定义的顺序
* - 参数`sampler`
- 由 `sampler` 行为定义的顺序
* - 参数 `sampler`
- True
- 不允许
* - 参数`sampler`
* - 参数 `sampler`
- False
- 不允许
**样例:**
>>> mind_dataset_dir = ["/path/to/mind_dataset_file"] # 此列表可以包含1个或多个MindRecord文件
>>> dataset = ds.MindDataset(dataset_file=mind_dataset_dir)
>>> mind_dataset_dir = ["/path/to/mind_dataset_file"] # 此列表可以包含1个或多个MindRecord文件
>>> dataset = ds.MindDataset(dataset_file=mind_dataset_dir)
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -94,4 +94,10 @@ mindspore.dataset.MnistDataset
howpublished = {http://yann.lecun.com/exdb/mnist}
}
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -73,4 +73,10 @@ mindspore.dataset.NumpySlicesDataset
>>> df = pd.read_csv(filepath_or_buffer=csv_dataset_dir[0])
>>> dataset = ds.NumpySlicesDataset(data=dict(df), shuffle=False)
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -21,4 +21,10 @@ mindspore.dataset.PaddedDataset
>>> data = [{'image': np.zeros(1, np.uint8)}, {'image': np.zeros(2, np.uint8)}]
>>> dataset = ds.PaddedDataset(padded_samples=data)
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -1,53 +1,54 @@
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)
.. py: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文件中的保存的列名与类型。
读取和解析以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不使用缓存
- **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)
- **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)
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -1,29 +1,36 @@
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: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。
用于读取和解析文本格式的文件作为源数据集。生成的数据集有一个数据列: `[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不使用缓存
- **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`参数。
- **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)
>>> text_file_dataset_dir = ["/path/to/text_file_dataset_file"] # # 此列表可以包含1个或多个文本文件
>>> dataset = ds.TextFileDataset(dataset_files=text_file_dataset_dir)
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -15,8 +15,7 @@ mindspore.dataset.VOCDataset
- **dataset_dir** (str): 包含数据集文件的根目录的路径。
- **task** (str, 可选): 指定读取VOC数据的任务类型现在只支持 `Segmentation``Detection` (默认值 `Segmentation` )。
- **usage** (str, 可选): 指定数据集的子集(默认值 `train` )。如果 `task` 参数为 `Segmentation` ,则将在./ImageSets/Segmentation/usage + ".txt"中加载数据集图像和标注信息;如果 `task` 参数为 `Detection` ,则将在./ImageSets/Main/usage + ".txt"中加载数据集图像和标注信息;如果未设置任务和用法,默认将加载./ImageSets/Segmentation/train.txt中的数据集图像和标注信息。
- **class_indexing** (dict, 可选): 指定标签名称到类标签的映射要求映射规则为str到int
仅在 `Detection` 任务中有效默认值None文件夹名称将按字母顺序排列每类都有一个唯一的索引从0开始)。
- **class_indexing** (dict, 可选): 指定标签名称到类标签的映射要求映射规则为str到int仅在 `Detection` 任务中有效默认值None文件夹名称将按字母顺序排列每类都有一个唯一的索引从0开始)。
- **num_samples** (int, 可选): 指定从数据集中读取的样本数默认值为None所有图像样本
- **num_parallel_workers** (int, 可选): 指定读取数据的工作线程数默认值None即使用mindspore.dataset.config中配置的线程数
- **shuffle** (bool, 可选): 是否混洗数据集默认为None下表中会展示不同配置的预期行为
@ -44,8 +43,7 @@ mindspore.dataset.VOCDataset
- **ValueError**: `shard_id` 参数错误小于0或者大于等于 `num_shards` )。
.. note::
- 当指定 `extra_metadata` 为True时除非显式使用rename算子以删除元信息列明的前缀('_meta-')
否则迭代的数据行中不会出现'[_meta-filename, dtype=string]'列。
- 当指定 `extra_metadata` 为True时除非显式使用rename算子以删除元信息列明的前缀('_meta-'),否则迭代的数据行中不会出现'[_meta-filename, dtype=string]'列。
- 此数据集可以指定 `sampler` 参数,但 `sampler``shuffle` 是互斥的。下表展示了几种合法的输入参数及预期的行为。
.. list-table:: 配置 `sampler``shuffle` 的不同组合得到的预期排序结果
@ -144,4 +142,10 @@ mindspore.dataset.VOCDataset
howpublished = {http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html}
}
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -41,8 +41,7 @@ mindspore.dataset.WaitedDSCallback
.. py:method:: ds_epoch_begin(ds_run_context)
内部方法不能被调用或者重写。通过重写mindspore.dataset.DSCallback.ds_epoch_begin
实现与mindspore.train.callback.Callback.epoch_end回调同步。
内部方法不能被调用或者重写。通过重写mindspore.dataset.DSCallback.ds_epoch_begin 实现与mindspore.train.callback.Callback.epoch_end回调同步。
**参数:**

View File

@ -1,26 +0,0 @@
.. py:method:: build_sentencepiece_vocab(columns, vocab_size, character_coverage, model_type, params)
用于从源数据集对象创建句子词表的函数。
**参数:**
- **columns** (list[str]):指定从哪一列中获取单词。
- **vocab_size** (int):词汇表大小。
- **character_coverage** (int)模型涵盖的字符百分比必须介于0.98和1.0之间。默认值如0.9995适用于具有丰富字符集的语言如日语或中文字符集1.0适用于其他字符集较小的语言,比如英语或拉丁文。
- **model_type** (SentencePieceModel)模型类型枚举值包括unigram默认值、bpe、char及word。当类型为word时输入句子必须预先标记。
- **params** (dict):依据原始数据内容构建祠表的附加参数,无附加参数时取值可以是空字典。
**返回:**
SentencePieceVocab从数据集构建的词汇表。
**样例:**
>>> from mindspore.dataset.text import SentencePieceModel
>>>
>>> # DE_C_INTER_SENTENCEPIECE_MODE 是一个映射字典
>>> from mindspore.dataset.text.utils import DE_C_INTER_SENTENCEPIECE_MODE
>>> dataset = ds.TextFileDataset("/path/to/sentence/piece/vocab/file", shuffle=False)
>>> dataset = dataset.build_sentencepiece_vocab(["text"], 5000, 0.9995,
... DE_C_INTER_SENTENCEPIECE_MODE[SentencePieceModel.UNIGRAM],
... {})

View File

@ -96,4 +96,10 @@ mindspore.dataset.Cifar100Dataset
howpublished = {http://www.cs.toronto.edu/~kriz/cifar.html}
}
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -103,4 +103,10 @@ mindspore.dataset.Cifar10Dataset
howpublished = {http://www.cs.toronto.edu/~kriz/cifar.html}
}
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.add_sampler.rst
.. include:: mindspore.dataset.Dataset.rst
.. include:: mindspore.dataset.Dataset.use_sampler.rst
.. include:: mindspore.dataset.Dataset.zip.rst

View File

@ -1,18 +0,0 @@
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

@ -1,77 +0,0 @@
get_ps_context(attr_key)
根据key获取参数服务器训练模式上下文中的属性值。
参数:
attr_key (str)属性的key。
- enable_ps (bool):表示是否启用参数服务器训练模式。
- config_file_path (string):配置文件路径,用于容灾恢复等。
- scheduler_manage_port (int)调度器HTTP端口对外开放用于接收和处理用户扩容/缩容等请求。
- enable_ssl (bool)设置是否打开SSL认证。
- client_password (str):用于解密客户端证书密钥的密码。
- server_password (str):用于解密服务端证书密钥的密码。
返回:
根据key返回属性值。
异常:
ValueError输入key不是参数服务器训练模式上下文中的属性。
样例:
>>> context.get_ps_context(enable_ps)
reset_ps_context()
将参数服务器训练模式上下文中的属性重置为默认值。各字段的含义及其默认值见'set_ps_context'接口。
样例:
>>> context.reset_ps_context()
set_ps_context(**kwargs)
设置参数服务器训练模式的上下文。
注:
需要给参数服务器训练模式设置其他的环境变量。
这些环境变量如下所示:
MS_SERVER_NUM表示参数服务器数量。
MS_WORKER_NUM表示工作进程数量。
MS_SCHED_HOST表示调度器IP地址。
MS_SCHED_PORT表示调度器开启的监听端口。
MS_ROLE表示进程角色角色列表如下
MS_SCHED表示调度器。
MS_WORKER表示工作进程。
MS_PSERVER/MS_SERVER表示参数服务器。
参数:
enable_ps (bool):表示是否启用参数服务器训练模式。
只有在enable_ps设置为True后环境变量才会生效。
默认值False。
config_file_path (string):配置文件路径,用于容灾恢复等。
默认值:''。
scheduler_manage_port (int)调度器HTTP端口对外开放用于接收和处理用户扩容/缩容等请求。
默认值11202。
enable_ssl (bool)设置是否打开SSL认证。
默认值True。
client_password (str):用于解密客户端证书密钥的密码。
默认值:''。
server_password (str):用于解密服务端证书密钥的密码。
默认值:''。
异常:
ValueError输入key不是参数服务器训练模式上下文中的属性。
样例:
>>> context.set_ps_context(enable_ps=True, enable_ssl=True, client_password='123456', server_password='123456')

View File

@ -1,33 +1,18 @@
mindspore.context
=================
.. py:class:: mindspore.context
MindSpore上下文用于配置当前执行环境包括执行模式、执行后端和其他特性开关。
get_context(attr_key)
根据输入key获取上下文中的属性值。
如果某些属性没有设置,则会自动获取这些属性。
参数:
attr_key (str)属性的key。
返回:
Object表示给定属性key的值。
异常:
ValueError输入key不是上下文中的属性。
样例:
>>> context.get_context("device_target")
>>> context.get_context("device_id")
set_context(**kwargs)
.. py:function:: set_context(**kwargs)
设置运行环境的上下文。
在运行程序之前,应配置上下文。如果没有配置,默认情况下将根据设备目标进行自动设置。
注:
设置属性时,必须输入属性名称。
初始化网络后不建议更改模式因为某些操作在图模式和PyNative模式下是不同的。默认值GRAPH_MODE。
.. note::
设置属性时必须输入属性名称。初始化网络后不建议更改模式因为某些操作在图模式和PyNative模式下是不同的。默认值GRAPH_MODE。
某些配置适用于特定的设备,有关详细信息,请参见下表:
@ -87,133 +72,309 @@ set_context(**kwargs)
| | load_compile_cache | CPU/GPU/Ascend |
+-------------------------+------------------------------+----------------------------+
参数:
device_id (int)表示目标设备的ID其值必须在[0, device_num_per_host-1]范围中且device_num_per_host的值不应超过4096。默认值0。
device_target (str)表示待运行的目标设备支持Ascend、GPU和CPU。
如果未设置设备目标则使用MindSpore包的版本。
max_device_memory (str):设置设备可用的最大内存。
目前仅在GPU上支持。格式为“xxGB”。默认值1024GB。
实际使用的内存大小是设备的可用内存和max_device_memory值中的最小值。
variable_memory_max_size (str)设置可变内存的最大值。默认值30GB。
设置此参数后,框架使用的最大内存受配置值的限制。
save_graphs (bool)表示是否保存图形。默认值False。
当`save_graphs`属性设为True时`save_graphs_path`属性用于设置中间编译图的存储路径。默认情况下,图形保存在当前目录下。
save_graphs_path (str):表示保存图形的路径。默认值:"."。
如果指定的目录不存在,系统将自动创建该目录。
在分布式训练中,图形将被保存到`save_graphs_path/rank_${rank_id}/`目录下。`rank_id`为集群中当前设备的ID。
enable_dump (bool):此参数已弃用,将在下一版本中删除。
save_dump_path (str):此参数已弃用,将在下一版本中删除。
enable_profiling (bool):此参数已弃用,将在下一版本中删除。
请使用mindspore.profiler.Profiler API。
profiling_options (str):此参数已弃用,将在下一版本中删除。
请使用mindspore.profiler.Profiler API。
print_file_path (str)表示用于保存打印数据的路径。如果设置了该参数默认将打印数据保存到文件中。如果不设置print_file_path则显示该屏幕。
如果保存的文件已经存在,将添加时间戳后缀到文件中。将数据保存到文件中,解决了在产生大量数据时屏幕打印中数据丢失的问题。
如果没有设置该参数则会报错prompt to set the upper absolute path。
env_config_path (str)通过context.set_context(env_config_path="./mindspore_config.json")来配置DFX的路径。
**参数:**
- **device_id** (int)表示目标设备的ID其值必须在[0, device_num_per_host-1]范围中,且 `device_num_per_host` 的值不应超过4096。默认值0。
- **device_target** (str)表示待运行的目标设备支持Ascend、GPU和CPU。如果未设置设备目标则使用MindSpore包的版本。
- **max_device_memory** (str)设置设备可用的最大内存。目前仅在GPU上支持。格式为“xxGB”。默认值1024GB。实际使用的内存大小是设备的可用内存和 `max_device_memory` 值中的最小值。
- **variable_memory_max_size** (str)设置可变内存的最大值。默认值30GB。设置此参数后框架使用的最大内存受配置值的限制。
- **save_graphs** (bool)表示是否保存图形。默认值False。当 `save_graphs` 属性设为True时 `save_graphs_path` 属性用于设置中间编译图的存储路径。默认情况下,图形保存在当前目录下。
- **save_graphs_path** (str):表示保存图形的路径。默认值:"."。如果指定的目录不存在,系统将自动创建该目录。在分布式训练中,图形将被保存到 `save_graphs_path/rank_${rank_id}/` 目录下。 `rank_id` 为集群中当前设备的ID。
- **enable_dump** (bool):此参数已弃用,将在下一版本中删除。
- **save_dump_path** (str):此参数已弃用,将在下一版本中删除。
- **enable_profiling** (bool)此参数已弃用将在下一版本中删除。请使用mindspore.profiler.Profiler API。
- **profiling_options** (str)此参数已弃用将在下一版本中删除。请使用mindspore.profiler.Profiler API。
- **print_file_path** (str):表示用于保存打印数据的路径。如果设置了该参数,默认将打印数据保存到文件中。如果不设置 `print_file_path` 则显示该屏幕。如果保存的文件已经存在将添加时间戳后缀到文件中。将数据保存到文件中解决了在产生大量数据时屏幕打印中数据丢失的问题。如果没有设置该参数则会报错prompt to set the upper absolute path。
- **env_config_path** (str)通过context.set_context(env_config_path="./mindspore_config.json")来配置DFX的路径。
配置Running Data Recorder
配置Running Data Recorder
- **enable**表示在发生故障时是否启用Running Data Recorder去收集和保存训练中的关键数据。设置为True时将打开Running Data Recorder。设置为False时将关闭Running Data Recorder。
- **path**设置Running Data Recorder保存数据的路径。当前路径必须是一个绝对路径。
- enable表示在发生故障时是否启用Running Data Recorder去收集和保存训练中的关键数据。设置为True时将打开Running Data Recorder。
设置为False时将关闭Running Data Recorder。
- path设置Running Data Recorder保存数据的路径。当前路径必须是一个绝对路径。
内存重用:
内存重用:
- **mem_Reuse**表示内存复用功能是否打开。设置为True时将打开内存复用功能。设置为False时将关闭内存复用功能。
- mem_Reuse表示内存复用功能是否打开。设置为True时将打开内存复用功能。设置为False时将关闭内存复用功能。
- **precompile_only** (bool)表示是否仅预编译网络。默认值False。设置为True时仅编译网络而不执行网络。
- **reserve_class_name_in_scope** (bool)表示是否将网络类名称保存到所属作用域中。默认值True。每个节点都有一个作用域。子节点的作用域是其父节点。如果 `reserve_class_name_in_scope` 设置为True则类名将保存在作用域中的关键字“net-”之后。例如:
precompile_only (bool)表示是否仅预编译网络。默认值False。
设置为True时仅编译网络而不执行网络。
reserve_class_name_in_scope (bool)表示是否将网络类名称保存到所属作用域中。默认值True。
每个节点都有一个作用域。子节点的作用域是其父节点。如果reserve_class_name_in_scope设置为True则类名将保存在作用域中的关键字“net-”之后。
例如:
Default/net-Net1/net-Net2 (reserve_class_name_in_scope=True)
Default/net-Net1/net-Net2 (reserve_class_name_in_scope=True)
Default/net/net (reserve_class_name_in_scope=False)
Default/net/net (reserve_class_name_in_scope=False)
- **pynative_synchronize** (bool)表示是否在PyNative模式下启动设备同步执行。默认值False。设置为False时将在设备上异步执行算子。当算子执行出错时将无法定位特定错误脚本代码的位置。当设置为True时将在设备上同步执行算子。这将降低程序的执行性能。此时当算子执行出错时可以根据错误的调用栈来定位错误脚本代码的位置。
- **mode** (int)表示在GRAPH_MODE(0)或PYNATIVE_MODE(1)模式中的运行。默认值GRAPH_MODE(0)。GRAPH_MODE或PYNATIVE_MODE可以通过 `mode` 属性设置两种模式都支持所有后端。默认模式为GRAPH_MODE。
- **enable_graph_kernel** (bool)表示是否启用图算融合去优化网络执行性能。默认值False。表示是否启用图算融合去优化网络执行性能。如果 `enable_graph_kernel` 设置为True则可以启用加速。有关图算融合的详细信息请查看`使能图算融合`https://www.mindspore.cn/docs/programming_guide/zh-CN/master/enable_graph_kernel_fusion.html
- **graph_kernel_flags** (str)图算融合的优化选项当与enable_graph_kernel冲突时它的优先级更高。其仅适用于有经验的用户。例如context.set_context(graph_kernel_flags="--opt_level=2 --dump_as_text")。一些常用选项:
pynative_synchronize (bool)表示是否在PyNative模式下启动设备同步执行。
默认值False。设置为False时将在设备上异步执行算子。
当算子执行出错时将无法定位特定错误脚本代码的位置。当设置为True时将在设备上同步执行算子。这将降低程序的执行性能。此时当算子执行出错时可以根据错误的调用栈来定位错误脚本代码的位置。
mode (int)表示在GRAPH_MODE(0)或PYNATIVE_MODE(1)模式中的运行。默认值GRAPH_MODE(0)。
GRAPH_MODE或PYNATIVE_MODE可以通过`mode`属性设置两种模式都支持所有后端。默认模式为GRAPH_MODE。
enable_graph_kernel (bool):表示是否启用图算融合去优化网络执行性能。
默认值False。
表示是否启用图算融合去优化网络执行性能。
如果enable_graph_kernel设置为True则可以启用加速。
有关图算融合的详细信息,请查看`使能图算融合`https://www.mindspore.cn/docs/programming_guide/zh-CN/master/enable_graph_kernel_fusion.html
graph_kernel_flags (str)
图算融合的优化选项当与enable_graph_kernel冲突时它的优先级更高。其仅适用于有经验的用户。
例如context.set_context(graph_kernel_flags="--opt_level=2 --dump_as_text")。一些常用选项:
- **opt_level**设置优化级别。默认值2。当opt_level的值大于0时启动图算融合。可选值包括
- opt_level设置优化级别。
默认值2。当opt_level的值大于0时启动图算融合。
可选值包括:
- 0关闭图算融合。
- 1启动算子的基本融合。
- 2包括级别1的所有优化并打开更多的优化如CSE优化算法、算术简化等。
- 3包括级别2的所有优化并打开更多的优化如SitchingFusion、ParallelFusion等。在某些场景下该级别的优化激进且不稳定。使用此级别时要小心。
- 0关闭图算融合。
- 1启动算子的基本融合。
- 2包括级别1的所有优化并打开更多的优化如CSE优化算法、算术简化等。
- 3包括级别2的所有优化并打开更多的优化如SitchingFusion、ParallelFusion等。
在某些场景下,该级别的优化激进且不稳定。使用此级别时要小心。
- **dump_as_text**将详细信息转储为文本文件。默认值False。
- dump_as_text将详细信息转储为文本文件。默认值False
有关更多选项,可以参考实现代码。
有关更多选项,可以参考实现代码。
enable_reduce_precision (bool)表示是否开启降低精度计算。默认值True。
设置为True时不支持用户指定的精度且精度将自动更改。
设置为False时如果未指定用例的精度则会报错并退出。
auto_tune_mode (str):表示算子构建时的自动调整模式,以获得最佳的切分性能。
默认值NO_TUNE。其值必须在【'RL', 'GA', 'RL,GA'】范围中。
- **enable_reduce_precision** (bool)表示是否开启降低精度计算。默认值True。设置为True时不支持用户指定的精度且精度将自动更改。设置为False时如果未指定用例的精度则会报错并退出。
- **auto_tune_mode** (str)表示算子构建时的自动调整模式以获得最佳的切分性能。默认值NO_TUNE。其值必须在['RL', 'GA', 'RL,GA']范围中。
- RL强化学习调优。
- GA遗传算法调优。
- RLGA当RL和GA优化同时打开时工具会根据网络模型中的不同算子类型自动选择RL或GA。RL和GA的顺序没有区别。
(自动选择)。
- RL强化学习调优。
- GA遗传算法调优。
- RLGA当RL和GA优化同时打开时工具会根据网络模型中的不同算子类型自动选择RL或GA。RL和GA的顺序没有区别。自动选择
有关启用算子调优工具设置的更多信息,请查看`使能算子调优工具`https://www.mindspore.cn/docs/programming_guide/zh-CN/master/enable_auto_tune.html
check_bprop (bool):表示是否检查反向传播节点,以确保反向传播节点输出的形状(shape)和数据类型与输入参数相同。默认值False。
max_call_depth (int)指定函数调用的最大深度。其值必须为正整数。默认值1000。
当嵌套Cell太深或子图数量太多时需要设置max_call_depth参数。如果max_call_depth的值比以前的大则应把系统最大堆栈深度设得更大否则可能会因为系统堆栈溢出而引发`core dumped`异常。
enable_sparse (bool)表示是否启用稀疏特征。默认值False。
有关稀疏特征和稀疏张量的详细信息,请查看`稀疏张量`https://www.mindspore.cn/docs/programming_guide/zh-CN/master/tensor.html#sparse-tensor
grad_for_scalar (bool) 表示是否获取标量梯度。默认值False。
当grad_for_scalar设置为True时则衍生函数的标量输入。
默认值为False。由于后端目前不支持伸缩操作所以该接口只支持在前端可推演的简单操作。
enable_compile_cache (bool)表示是否加载或者保存前端编译的图。当enable_compile_cache被设置为True时在第一次执行的过程中一个硬件无关的编译缓存会被生成并且导出为一个MINDIR文件。
当该网络被再次执行时如果enable_compile_cache仍然为True并且网络脚本没有被更改那么这个编译缓存会被加载。注意目前只支持有限的Python脚本更改的自动检测这意味着可能有正确性风险。默认值False。
这是一个实验原型,可能会被更改或者删除。
compile_cache_path (str):保存前端图编译缓存的路径。默认值:"."。如果目录不存在,系统会自动创建这个目录。缓存会被保存到如下目录:`compile_cache_path/rank_${rank_id}/`。
`rank_id`是集群上当前设备的ID。
有关启用算子调优工具设置的更多信息,请查看 `使能算子调优工具 <https://www.mindspore.cn/docs/programming_guide/zh-CN/master/enable_auto_tune.html>`_。
异常:
ValueError输入key不是上下文中的属性。
- **check_bprop** (bool):表示是否检查反向传播节点,以确保反向传播节点输出的形状(shape)和数据类型与输入参数相同。默认值False。
- **max_call_depth** (int)指定函数调用的最大深度。其值必须为正整数。默认值1000。当嵌套Cell太深或子图数量太多时需要设置 `max_call_depth` 参数。如果 `max_call_depth` 的值比以前的大,则应把系统最大堆栈深度设得更大,否则可能会因为系统堆栈溢出而引发 `core dumped` 异常。
- **enable_sparse** (bool)表示是否启用稀疏特征。默认值False。有关稀疏特征和稀疏张量的详细信息请查看 `稀疏张量 <https://www.mindspore.cn/docs/programming_guide/zh-CN/master/tensor.html#sparse-tensor>`_。
- **grad_for_scalar** (bool) 表示是否获取标量梯度。默认值False。当 `grad_for_scalar` 设置为True时则衍生函数的标量输入。默认值为False。由于后端目前不支持伸缩操作所以该接口只支持在前端可推演的简单操作。
- **enable_compile_cache** (bool):表示是否加载或者保存前端编译的图。当 `enable_compile_cache` 被设置为True时在第一次执行的过程中一个硬件无关的编译缓存会被生成并且导出为一个MINDIR文件。当该网络被再次执行时如果 `enable_compile_cache` 仍然为True并且网络脚本没有被更改那么这个编译缓存会被加载。注意目前只支持有限的Python脚本更改的自动检测这意味着可能有正确性风险。默认值False。这是一个实验原型可能会被更改或者删除。
- **compile_cache_path** (str):保存前端图编译缓存的路径。默认值:"."。如果目录不存在,系统会自动创建这个目录。缓存会被保存到如下目录:`compile_cache_path/rank_${rank_id}/`。`rank_id` 是集群上当前设备的ID。
样例:
>>> context.set_context(mode=context.PYNATIVE_MODE)
>>> context.set_context(precompile_only=True)
>>> context.set_context(device_target="Ascend")
>>> context.set_context(device_id=0)
>>> context.set_context(save_graphs=True, save_graphs_path="./model.ms")
>>> context.set_context(enable_reduce_precision=True)
>>> context.set_context(enable_dump=True, save_dump_path=".")
>>> context.set_context(enable_graph_kernel=True)
>>> context.set_context(graph_kernel_flags="--opt_level=2 --dump_as_text")
>>> context.set_context(reserve_class_name_in_scope=True)
>>> context.set_context(variable_memory_max_size="6GB")
>>> context.set_context(enable_profiling=True,
... profiling_options='{"output":"/home/data/output","training_trace":"on"}')
>>> context.set_context(check_bprop=True)
>>> context.set_context(max_device_memory="3.5GB")
>>> context.set_context(print_file_path="print.pb")
>>> context.set_context(enable_sparse=True)
>>> context.set_context(max_call_depth=80)
>>> context.set_context(env_config_path="./env_config.json")
>>> context.set_context(auto_tune_mode="GA,RL")
>>> context.set_context(grad_for_scalar=True)
>>> context.set_context(save_compile_cache=True)
>>> context.set_context(load_compile_cache=True)
>>> context.set_context(pynative_synchronize=True)
**异常:**
**ValueError**输入key不是上下文中的属性。
**样例:**
>>> context.set_context(mode=context.PYNATIVE_MODE)
>>> context.set_context(precompile_only=True)
>>> context.set_context(device_target="Ascend")
>>> context.set_context(device_id=0)
>>> context.set_context(save_graphs=True, save_graphs_path="./model.ms")
>>> context.set_context(enable_reduce_precision=True)
>>> context.set_context(enable_dump=True, save_dump_path=".")
>>> context.set_context(enable_graph_kernel=True)
>>> context.set_context(graph_kernel_flags="--opt_level=2 --dump_as_text")
>>> context.set_context(reserve_class_name_in_scope=True)
>>> context.set_context(variable_memory_max_size="6GB")
>>> context.set_context(enable_profiling=True,
... profiling_options='{"output":"/home/data/output","training_trace":"on"}')
>>> context.set_context(check_bprop=True)
>>> context.set_context(max_device_memory="3.5GB")
>>> context.set_context(print_file_path="print.pb")
>>> context.set_context(enable_sparse=True)
>>> context.set_context(max_call_depth=80)
>>> context.set_context(env_config_path="./env_config.json")
>>> context.set_context(auto_tune_mode="GA,RL")
>>> context.set_context(grad_for_scalar=True)
>>> context.set_context(save_compile_cache=True)
>>> context.set_context(load_compile_cache=True)
>>> context.set_context(pynative_synchronize=True)
.. py:function:: get_context(attr_key)
根据输入key获取上下文中的属性值。如果某些属性没有设置则会自动获取这些属性。
**参数:**
**attr_key** (str)属性的key。
**返回:**
Object表示给定属性key的值。
**异常:**
**ValueError**输入key不是上下文中的属性。
**样例:**
>>> context.get_context("device_target")
>>> context.get_context("device_id")
.. py:function:: set_auto_parallel_context(**kwargs)
配置自动并行仅在Ascend和GPU上有效。
应在init之前配置自动并行。
.. note::
配置时必须输入配置的名称。如果某个程序具有不同并行模式下的任务则需要再为下一个任务设置新的并行模式之前调用reset_auto_parallel_context()接口来重置配置。若要设置或更改并行模式必须在创建任何Initializer之前调用接口否则在编译网络时可能会出现RuntimeError。
某些配置适用于特定的并行模式,有关详细信息,请参见下表:
=========================== ===========================
Common AUTO_PARALLEL
=========================== ===========================
device_num gradient_fp32_sync
global_rank loss_repeated_mean
gradients_mean auto_parallel_search_mode
parallel_mode strategy_ckpt_load_file
all_reduce_fusion_config strategy_ckpt_save_file
enable_parallel_optimizer dataset_strategy
\ pipeline_stages
\ grad_accumulation_step
=========================== ===========================
**参数:**
- **device_num** (int):表示可用设备的编号,必须在[1,4096]范围中。默认值1。
- **global_rank** (int)表示全局RANK的ID必须在[0,4095]范围中。默认值0。
- **gradients_mean** (bool):表示是否在梯度的 AllReduce后执行平均算子。stand_alone不支持gradients_mean。默认值False。
- **gradient_fp32_sync** (bool)在FP32中运行梯度的 AllReduce。stand_alone、data_parallel和hybrid_parallel不支持gradient_fp32_sync。默认值True。
- **parallel_mode** (str)有五种并行模式分别是stand_alone、data_parallel、hybrid_parallel、semi_auto_parallel和auto_parallel。默认值stand_alone。
- stand_alone单卡模式。
- data_parallel数据并行模式。
- hybrid_parallel手动实现数据并行和模型并行。
- semi_auto_parallel半自动并行模式。
- auto_parallel自动并行模式。
- **auto_parallel_search_mode** (str)表示有两种策略搜索模式分别是recursive_programming和dynamic_programming。默认值dynamic_programming。
- recursive_programming表示双递归搜索模式。
- dynamic_programming表示动态规划搜索模式。
- **parameter_broadcast** (bool)表示在训练前是否广播参数。在训练之前为了使所有设备的网络初始化参数值相同请将设备0上的参数广播到其他设备。不同并行模式下的参数广播不同。在data_parallel模式下除layerwise_parallel属性为True的参数外所有参数都会被广播。在hybrid_parallel、semi_auto_parallel和auto_parallel模式下分段参数不参与广播。默认值False。
- **strategy_ckpt_load_file** (str)表示用于加载并行策略checkpoint的路径。默认值''。
- **strategy_ckpt_save_file** (str)表示用于保存并行策略checkpoint的路径。默认值''。
- **full_batch** (bool)如果在auto_parallel模式下加载整个batch数据集则此参数应设置为True。默认值False。目前不建议使用该接口建议使用dataset_strategy来替换它。
- **dataset_strategy** (Union[str, tuple])表示数据集分片策略。默认值data_parallel。dataset_strategy="data_parallel"等于full_batch=Falsedataset_strategy="full_batch"等于full_batch=True。对于通过模型并列策略加载到网络的数据集如ds_stra ((1, 8)、(1, 8))需要使用set_auto_parallel_context(dataset_strategy=ds_stra)。
- **enable_parallel_optimizer** (bool)这是一个开发中的特性它可以为数据并行训练对权重更新计算进行分片以节省时间和内存。目前自动和半自动并行模式支持Ascend和GPU中的所有优化器。数据并行模式仅支持Ascend中的`Lamb`和`AdamWeightDecay`。默认值False。
- **all_reduce_fusion_config** (list):通过参数索引设置 AllReduce 融合策略。仅支持ReduceOp.SUM和HCCL_WORLD_GROUP/NCCL_WORLD_GROUP。没有默认值。如果不设置则关闭算子融合。
- **pipeline_stages** (int)设置pipeline并行的阶段信息。这表明了设备如何单独分布在pipeline上。所有的设备将被划分为pipeline_stags个阶段。目前这只能在启动semi_auto_parallel模式的情况下使用。默认值1。
- **grad_accumulation_step** (int)在自动和半自动并行模式下设置梯度的累积step。其值应为正整数。默认值1。
**异常:**
**ValueError**输入key不是自动并行上下文中的属性。
**样例:**
>>> context.set_auto_parallel_context(device_num=8)
>>> context.set_auto_parallel_context(global_rank=0)
>>> context.set_auto_parallel_context(gradients_mean=True)
>>> context.set_auto_parallel_context(gradient_fp32_sync=False)
>>> context.set_auto_parallel_context(parallel_mode="auto_parallel")
>>> context.set_auto_parallel_context(auto_parallel_search_mode="dynamic_programming")
>>> context.set_auto_parallel_context(parameter_broadcast=False)
>>> context.set_auto_parallel_context(strategy_ckpt_load_file="./strategy_stage1.ckpt")
>>> context.set_auto_parallel_context(strategy_ckpt_save_file="./strategy_stage1.ckpt")
>>> context.set_auto_parallel_context(dataset_strategy=((1, 8), (1, 8)))
>>> context.set_auto_parallel_context(enable_parallel_optimizer=False)
>>> context.set_auto_parallel_context(all_reduce_fusion_config=[8, 160])
>>> context.set_auto_parallel_context(pipeline_stages=2)
.. py:function:: get_auto_parallel_context(attr_key)
根据key获取自动并行的配置。
**参数:**
**attr_key** (str)配置的key。
**返回:**
根据key返回配置的值。
**异常:**
**ValueError**输入key不在自动并行的配置列表中。
.. py:function:: reset_auto_parallel_context()
重置自动并行的配置为默认值。
- device_num1。
- global_rank0。
- gradients_meanFalse。
- gradient_fp32_syncTrue。
- parallel_mode'stand_alone'。
- auto_parallel_search_mode'dynamic_programming'。
- parameter_broadcastFalse。
- strategy_ckpt_load_file''。
- strategy_ckpt_save_file''。
- full_batchFalse。
- enable_parallel_optimizerFalse。
- pipeline_stages1。
.. py:class:: mindspore.context.ParallelMode
并行模式。
有五种并行模式分别是STAND_ALONE、DATA_PARALLEL、HYBRID_PARALLEL、SEMI_AUTO_PARALLEL和AUTO_PARALLEL。默认值STAND_ALONE。
- STAND_ALONE单卡模式。
- DATA_PARALLEL数据并行模式。
- HYBRID_PARALLEL手动实现数据并行和模型并行。
- SEMI_AUTO_PARALLEL半自动并行模式。
- AUTO_PARALLEL自动并行模式。
MODE_LIST表示所有支持的并行模式的列表。
.. py:function:: set_ps_context(**kwargs)
设置参数服务器训练模式的上下文。
.. note::
需要给参数服务器训练模式设置其他的环境变量。些环境变量如下所示:
- MS_SERVER_NUM表示参数服务器数量。
- MS_WORKER_NUM表示工作进程数量。
- MS_SCHED_HOST表示调度器IP地址。
- MS_SCHED_PORT表示调度器开启的监听端口。
- MS_ROLE表示进程角色角色列表如下
- MS_SCHED表示调度器。
- MS_WORKER表示工作进程。
- MS_PSERVER/MS_SERVER表示参数服务器。
**参数:**
- **enable_ps** (bool)表示是否启用参数服务器训练模式。只有在enable_ps设置为True后环境变量才会生效。默认值False。
- **config_file_path** (string):配置文件路径,用于容灾恢复等。默认值:''。
- **scheduler_manage_port** (int)调度器HTTP端口对外开放用于接收和处理用户扩容/缩容等请求。默认值11202。
- **enable_ssl** (bool)设置是否打开SSL认证。默认值True。
- **client_password** (str):用于解密客户端证书密钥的密码。默认值:''。
- **server_password** (str):用于解密服务端证书密钥的密码。默认值:''。
**异常:**
**ValueError**输入key不是参数服务器训练模式上下文中的属性。
**样例:**
>>> context.set_ps_context(enable_ps=True, enable_ssl=True, client_password='123456', server_password='123456')
.. py:function:: get_ps_context(attr_key)
根据key获取参数服务器训练模式上下文中的属性值。
**参数:**
**attr_key** (str)属性的key。
- enable_ps (bool):表示是否启用参数服务器训练模式。
- config_file_path (string):配置文件路径,用于容灾恢复等。
- scheduler_manage_port (int)调度器HTTP端口对外开放用于接收和处理用户扩容/缩容等请求。
- enable_ssl (bool)设置是否打开SSL认证。
- client_password (str):用于解密客户端证书密钥的密码。
- server_password (str):用于解密服务端证书密钥的密码。
**返回:**
根据key返回属性值。
**异常:**
ValueError输入key不是参数服务器训练模式上下文中的属性。
**样例:**
>>> context.get_ps_context(enable_ps)
.. py:function:: reset_ps_context()
将参数服务器训练模式上下文中的属性重置为默认值。各字段的含义及其默认值见'set_ps_context'接口。
**样例:**
>>> context.reset_ps_context()

View File

@ -188,7 +188,7 @@
>>> init()
>>> context.set_auto_parallel_context(parallel_mode=ParallelMode.SEMI_AUTO_PARALLEL)
>>>
>>> # 如何构建数据集,请参考官方网站上关于【数据集】的章节。
>>> # 如何构建数据集,请参考官方网站上关于[数据集]的章节。
>>> dataset = create_custom_dataset()
>>> net = Net()
>>> loss = nn.SoftmaxCrossEntropyWithLogits()

View File

@ -1,10 +1,11 @@
Class mindspore.nn.AdamOffload(params, learning_rate=1e-3, beta1=0.9, beta2=0.999, eps=1e-08, use_locking=False, use_nesterov=False, weight_decay=0.0, loss_scale=1.0)
mindspore.nn.AdamOffload
=========================
此优化器在主机CPU上运行Adam优化算法设备上仅执行网络参数的更新最大限度地降低内存成本。
虽然会增加性能开销,但优化器可以运行更大的模型。
.. py:class:: mindspore.nn.AdamOffload(params, learning_rate=1e-3, beta1=0.9, beta2=0.999, eps=1e-08, use_locking=False, use_nesterov=False, weight_decay=0.0, loss_scale=1.0)
此优化器在主机CPU上运行Adam优化算法设备上仅执行网络参数的更新最大限度地降低内存成本。虽然会增加性能开销但优化器可以运行更大的模型。
Adam算法参见`Adam: A Method for Stochastic Optimization <https://arxiv.org/abs/1412.6980>`_。
Adam算法参见 `Adam: A Method for Stochastic Optimization <https://arxiv.org/abs/1412.6980>`_。
更新公式如下:
@ -16,14 +17,14 @@ Class mindspore.nn.AdamOffload(params, learning_rate=1e-3, beta1=0.9, beta2=0.99
w_{t+1} = w_{t} - l * \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon}
\end{array}
:math:`m`代表第一个矩向量`moment1`:math:`v`代表第二个矩向量`moment2`:math:`g`代表`gradients`:math:`l`代表缩放因子,:math:`\beta_1,\beta_2`代表`beta1`和`beta2`:math:`t`代表当前step:math:`beta_1^t`和:math:`beta_2^t`代表`beta1_power`和`beta2_power`:math:`\alpha`代表`learning_rate`:math:`w`代表`params`:math:`\epsilon`代表`eps`。
:math:`m` 代表第一个矩向量 `moment1` :math:`v` 代表第二个矩向量 `moment2`:math:`g` 代表 `gradients`:math:`l` 代表缩放因子,:math:`\beta_1,\beta_2` 代表 `beta1` `beta2`:math:`t` 代表当前step:math:`beta_1^t` :math:`beta_2^t` 代表 `beta1_power` `beta2_power`:math:`\alpha` 代表 `learning_rate`:math:`w` 代表 `params`:math:`\epsilon` 代表 `eps`
.. note::
此优化器目前仅支持图模式。
.. note::此优化器目前仅支持图模式。
.. include:: mindspore.nn.optim_note_weight_decay.rst
参数:
**参数:**
- **params** (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、和"order_params"
.. include:: mindspore.nn.optim_group_param.rst
@ -36,58 +37,58 @@ Class mindspore.nn.AdamOffload(params, learning_rate=1e-3, beta1=0.9, beta2=0.99
- **learning_rate (Union[float, Tensor, Iterable, LearningRateSchedule]): 默认值1e-3。
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
- **beta1** (float) - `moment1` 的指数衰减率。参数范围0.0,1.0。默认值0.9。
- **beta2** (float) - `moment2` 的指数衰减率。参数范围0.0,1.0。默认值0.999。
- **eps** (float) - 将添加到分母中以提高数值稳定性。必须大于0。默认值1e-8。
- **use_locking** (bool) - 是否对参数更新加锁保护。如果为True则 `w` 、`m` 和 `v` 的更新将受到锁保护。如果为False则结果不可预测。默认值False。
- **use_nesterov** (bool) - 是否使用Nesterov Accelerated Gradient (NAG)算法更新梯度。如果为True使用NAG更新梯度。如果为False则在不使用NAG的情况下更新梯度。默认值False。
- **weight_decay** (float) - 权重衰减L2 penalty。必须大于等于0。默认值0.0。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
**输入:**
输入:
- **gradients** (tuple[Tensor])`params`的梯度shape与`params`相同。
**gradients** (tuple[Tensor])`params`的梯度shape与`params`相同。
输出:
Tensor[bool]值为True。
**输出:**
异常:
TypeError`learning_rate`不是int、float、Tensor、Iterable或LearningRateSchedule。
TypeError`parameters`的元素不是Parameter或字典。
TypeError`beta1`、`beta2`、`eps`或`loss_scale`不是float。
TypeError`weight_decay`不是float或int。
TypeError`use_locking`或`use_nesterov`不是bool。
ValueError`loss_scale`或`eps`不大于0。
ValueError`beta1`、`beta2`不在0.0,1.0)范围内。
ValueError`weight_decay`小于0。
Tensor[bool]值为True。
支持平台:
``Ascend`` ``GPU`` ``CPU``
**异常:**
示例:
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.AdamOffload(params=net.trainable_params())
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.AdamOffload(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
- **TypeError**`learning_rate` 不是int、float、Tensor、Iterable或LearningRateSchedule。
- **TypeError**`parameters` 的元素不是Parameter或字典。
- **TypeError**`beta1` 、 `beta2` 、 `eps `或 `loss_scale` 不是float。
- **TypeError**`weight_decay` 不是float或int。
- **TypeError**`use_locking` 或 `use_nesterov` 不是bool。
- **ValueError**`loss_scale` 或 `eps` 不大于0。
- **ValueError**`beta1` 、 `beta2` 不在0.0,1.0)范围内。
- **ValueError**`weight_decay` 小于0。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.AdamOffload(params=net.trainable_params())
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.AdamOffload(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)

View File

@ -1,4 +1,7 @@
Class mindspore.nn.AdamWeightDecay(params, learning_rate=1e-3, beta1=0.9, beta2=0.999, eps=1e-06, weight_decay=0.0)
mindspore.nn.AdamWeightDecay
==============================
.. py:class:: mindspore.nn.AdamWeightDecay(params, learning_rate=1e-3, beta1=0.9, beta2=0.999, eps=1e-06, weight_decay=0.0)
实现权重衰减Adam算法。
@ -17,71 +20,74 @@ Class mindspore.nn.AdamWeightDecay(params, learning_rate=1e-3, beta1=0.9, beta2=
w_{t+1} = w_{t} - lr * update
\end{array}
:math:`m`表示第1矩向量`moment1`,:math:`v`表示第2矩向量`moment2`:math:`g`表示`gradients`:math:`lr`表示`learning_rate`:math:`\beta_1, \beta_2`表示`beta1`和`beta2`,:math:`t`表示当前step:math:`w`表示`params`。
:math:`m` 表示第1矩向量 `moment1` , :math:`v` 表示第2矩向量 `moment2` :math:`g` 表示 `gradients` :math:`lr` 表示 `learning_rate` :math:`\beta_1, \beta_2` 表示 `beta1` 和 `beta2` ,:math:`t` 表示当前step:math:`w` 表示 `params`。
.. note::
.. include:: mindspore.nn.optim_note_loss_scale.rst
.. include:: mindspore.nn.optim_note_weight_decay.rst
参数:
params (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、和"order_params"
**参数:**
.. include:: mindspore.nn.optim_group_param.rst
- **params** (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、和"order_params"
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_order.rst
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_order.rst
learning_rate (Union[float, Tensor, Iterable, LearningRateSchedule]): 默认值1e-3。
- **learning_rate** (Union[float, Tensor, Iterable, LearningRateSchedule]): 默认值1e-3。
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
beta1 (float)`moment1` 的指数衰减率。参数范围0.0,1.0。默认值0.9。
- **beta1** (float)`moment1` 的指数衰减率。参数范围0.0,1.0。默认值0.9。
- **beta2** (float)`moment2` 的指数衰减率。参数范围0.0,1.0。默认值0.999。
- **eps** (float)将添加到分母中以提高数值稳定性。必须大于0。默认值1e-6。
- **weight_decay** (float)权重衰减L2 penalty。必须大于等于0。默认值0.0。
beta2 (float)`moment2` 的指数衰减率。参数范围0.0,1.0。默认值0.999。
**输入:**
eps (float)将添加到分母中以提高数值稳定性。必须大于0。默认值1e-6
**gradients** (tuple[Tensor])`params`的梯度shape与`params`相同
weight_decay (float)权重衰减L2 penalty。必须大于等于0。默认值0.0。
**输出:**
输入:
- **gradients** (tuple[Tensor])`params`的梯度shape与`params`相同。
**tuple**[bool]所有元素都为True。
输出:
tuple[bool]所有元素都为True。
**异常:**
异常:
TypeError`learning_rate`不是int、float、Tensor、Iterable或LearningRateSchedule。
TypeError`parameters`的元素不是Parameter或字典。
TypeError`beta1`、`beta2`或`eps`不是float。
TypeError`weight_decay`不是float或int。
ValueError`eps`小于等于0。
ValueError`beta1`、`beta2`不在0.0,1.0)范围内。
ValueError`weight_decay`小于0。
- **TypeError**`learning_rate` 不是int、float、Tensor、Iterable或LearningRateSchedule。
- **TypeError**`parameters` 的元素不是Parameter或字典。
- **TypeError**`beta1` 、 `beta2` 或 `eps` 不是float。
- **TypeError**`weight_decay` 不是float或int。
- **ValueError**`eps` 小于等于0。
- **ValueError**`beta1` 、 `beta2` 不在0.0,1.0)范围内。
- **ValueError**`weight_decay` 小于0。
支持平台:
``Ascend`` ``GPU`` ``CPU``
**支持平台:**
示例:
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.AdamWeightDecay(params=net.trainable_params())
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.AdamWeightDecay(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.AdamWeightDecay(params=net.trainable_params())
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.AdamWeightDecay(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)

View File

@ -1,58 +1,63 @@
Class mindspore.nn.DynamicLossScaleUpdateCell(loss_scale_value, scale_factor, scale_window)
mindspore.nn.DynamicLossScaleUpdateCell
=======================================
.. py:class:: mindspore.nn.DynamicLossScaleUpdateCell(loss_scale_value, scale_factor, scale_window)
用于动态地更新梯度放大系数(loss scale)的神经元。
使用梯度放大功能进行训练时,初始梯度放大系数值为`loss_scale_value`。
在每个训练步骤中,当出现溢出时,通过计算公式`loss_scale`/`scale_factor`减小梯度放大系数。
如果连续`scale_window`步step未溢出则将通过`loss_scale` * `scale_factor`增大梯度放大系数。
使用梯度放大功能进行训练时,初始梯度放大系数值为 `loss_scale_value`。在每个训练步骤中,当出现溢出时,通过计算公式 `loss_scale`/`scale_factor` 减小梯度放大系数。如果连续 `scale_window` 步step未溢出则将通过 `loss_scale` * `scale_factor` 增大梯度放大系数。
该类是:class:`mindspore.nn.DynamicLossScaleManager`的`get_update_cell`方法的返回值。
训练过程中,类:class:`mindspore.TrainOneStepWithLossScaleCell`会调用该Cell来更新梯度放大系数。
该类是 :class:`mindspore.nn.DynamicLossScaleManager` 的 `get_update_cell` 方法的返回值。训练过程中,类 :class:`mindspore.TrainOneStepWithLossScaleCell` 会调用该Cell来更新梯度放大系数。
参数:
loss_scale_value (float):初始的梯度放大系数。
scale_factor (int):增减系数。
scale_window (int):未溢出时,增大梯度放大系数的最大连续训练步数。
**参数:**
输入:
- **loss_scale** (Tensor)训练期间的梯度放大系数shape为:math:`()`
- **overflow** (bool):是否发生溢出
- **loss_scale_value** (float):初始的梯度放大系数。
- **scale_factor** (int):增减系数。
- **scale_window** (int):未溢出时,增大梯度放大系数的最大连续训练步数
输出:
Bool即输入`overflow`。
**输入:**
支持平台:
``Ascend`` ``GPU``
- **loss_scale** (Tensor)训练期间的梯度放大系数shape为 :math:`()`。
- **overflow** (bool):是否发生溢出。
示例:
>>> import numpy as np
>>> from mindspore import Tensor, Parameter, nn
>>> import mindspore.ops as ops
>>>
>>> class Net(nn.Cell):
... def __init__(self, in_features, out_features)
... super(Net, self).__init__()
... self.weight = Parameter(Tensor(np.ones([in_features, out_features]).astype(np.float32)),
... name='weight')
... self.matmul = ops.MatMul()
...
... def construct(self, x)
... output = self.matmul(x, self.weight)
... return output
...
>>> in_features, out_features = 16, 10
>>> net = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> optimizer = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> net_with_loss = nn.WithLossCell(net, loss)
>>> manager = nn.DynamicLossScaleUpdateCell(loss_scale_value=2**12, scale_factor=2, scale_window=1000)
>>> train_network = nn.TrainOneStepWithLossScaleCell(net_with_loss, optimizer, scale_sense=manager)
>>> input = Tensor(np.ones([out_features, in_features]), mindspore.float32)
>>> labels = Tensor(np.ones([out_features,]), mindspore.float32)
>>> output = train_network(input, labels)
**输出:**
Bool即输入`overflow`。
**支持平台:**
``Ascend`` ``GPU``
**样例:**
>>> import numpy as np
>>> from mindspore import Tensor, Parameter, nn
>>> import mindspore.ops as ops
>>>
>>> class Net(nn.Cell):
... def __init__(self, in_features, out_features)
... super(Net, self).__init__()
... self.weight = Parameter(Tensor(np.ones([in_features, out_features]).astype(np.float32)),
... name='weight')
... self.matmul = ops.MatMul()
...
... def construct(self, x)
... output = self.matmul(x, self.weight)
... return output
...
>>> in_features, out_features = 16, 10
>>> net = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> optimizer = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> net_with_loss = nn.WithLossCell(net, loss)
>>> manager = nn.DynamicLossScaleUpdateCell(loss_scale_value=2**12, scale_factor=2, scale_window=1000)
>>> train_network = nn.TrainOneStepWithLossScaleCell(net_with_loss, optimizer, scale_sense=manager)
>>> input = Tensor(np.ones([out_features, in_features]), mindspore.float32)
>>> labels = Tensor(np.ones([out_features,]), mindspore.float32)
>>> output = train_network(input, labels)
get_loss_scale()
.. py:method:: get_loss_scale()
获取当前梯度放大系数。

View File

@ -1,10 +1,11 @@
Class mindspore.nn.FTRL(*args, **kwargs)
mindspore.nn. mindspore.nn.FTRL
================================
.. py:class:: mindspore.nn.FTRL(*args, **kwargs)
使用ApplyFtrl算子实现FTRL算法。
FTRL是一种在线凸优化算法根据损失函数自适应地选择正则化函数。
详见论文`Adaptive Bound Optimization for Online Convex Optimization <https://arxiv.org/abs/1002.4908>`_。
工程文档参阅`Ad Click Prediction: a View from the Trenches <https://www.eecs.tufts.edu/~dsculley/papers/ad-click-prediction.pdf>`_。
FTRL是一种在线凸优化算法根据损失函数自适应地选择正则化函数。详见论文 `Adaptive Bound Optimization for Online Convex Optimization <https://arxiv.org/abs/1002.4908>`_。工程文档参阅 `Ad Click Prediction: a View from the Trenches <https://www.eecs.tufts.edu/~dsculley/papers/ad-click-prediction.pdf>`_。
更新公式如下:
@ -23,81 +24,81 @@ Class mindspore.nn.FTRL(*args, **kwargs)
\end{cases}\\
\end{array}
:math:`m`表示累加器,:math:`g`表示`grads`:math:`t`表示当前step:math:`u`表示需要更新的线性系数,:math:`p`表示`lr_power`:math:`\alpha`表示`learning_rate`:math:`\omega`表示`params`。
:math:`m` 表示累加器,:math:`g` 表示 `grads` :math:`t` 表示当前step:math:`u` 表示需要更新的线性系数,:math:`p` 表示` lr_power`:math:`\alpha` 表示 `learning_rate` :math:`\omega` 表示 `params`
.. note::
.. include:: mindspore.nn.optim_note_sparse.rst
.. include:: mindspore.nn.optim_note_weight_decay.rst
参数:
params (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
**参数:**
- **params** (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_param.rst
- **lr** - 学习率当前不支持参数分组。
- **lr** - 学习率当前不支持参数分组。
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
.. include:: mindspore.nn.optim_group_order.rst
- **initial_accum** (float):累加器 `m` 的初始值必须大于等于零。默认值0.1。
- **learning_rate** (float)学习速率值必须为零或正数当前不支持动态学习率。默认值0.001。
- **lr_power** (float)学习率的幂值控制训练期间学习率的下降方式必须小于或等于零。如果lr_power为零则使用固定的学习率。默认值-0.5。
- **l1** (float)l1正则化强度必须大于等于零。默认值0.0。
- **l2** (float)l2正则化强度必须大于等于零。默认值0.0。
- **use_locking** (bool)如果为True则更新操作使用锁保护。默认值False。
initial_accum (float):累加器`m`的初始值必须大于等于零。默认值0.1。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
learning_rate (float)学习速率值必须为零或正数当前不支持动态学习率。默认值0.001。
- **weight_decay** (Union[float, int])要乘以权重的权重衰减值必须为零或正值。默认值0.0
lr_power (float)学习率的幂值控制训练期间学习率的下降方式必须小于或等于零。如果lr_power为零则使用固定的学习率。默认值-0.5。
**输入:**
l1 (float)l1正则化强度必须大于等于零。默认值0.0。
l2 (float)l2正则化强度必须大于等于零。默认值0.0。
use_locking (bool)如果为True则更新操作使用锁保护。默认值False。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
weight_decay (Union[float, int])要乘以权重的权重衰减值必须为零或正值。默认值0.0。
输入:
- **grads** (tuple[Tensor]):优化器中`params`的梯度shape与优化器中的`params`相同。
**grads** (tuple[Tensor]):优化器中 `params` 的梯度shape与优化器中的 `params` 相同。
输出:
tuple[Parameter]更新的参数shape与`params`相同。
**输出:**
异常:
TypeError`initial_accum`、`learning_rate`、`lr_power`、`l1`、`l2`或`loss_scale`不是float。
TypeError`parameters`的元素不是Parameter或dict。
TypeError`weight_decay`不是float或int。
TypeError`use_nesterov`不是bool。
ValueError`lr_power`大于0。
ValueError`loss_scale`小于等于0。
ValueError`initial_accum`、`l1`或`l2`小于0。
tuple[Parameter]更新的参数shape与`params`相同。
支持平台:
``Ascend`` ``GPU`` ``CPU``
**异常:**
示例:
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.FTRL(params=net.trainable_params())
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params},
... {'order_params': net.trainable_params()}]
>>> optim = nn.FTRL(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组使用优化器中的学习率0.1、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
- **TypeError**`initial_accum`、`learning_rate`、`lr_power`、`l1`、`l2` 或 `loss_scale` 不是float。
- **TypeError**`parameters` 的元素不是Parameter或dict。
- **TypeError**`weight_decay` 不是float或int。
- **TypeError**`use_nesterov` 不是bool。
- **ValueError**`lr_power` 大于0。
- **ValueError**`loss_scale` 小于等于0。
- **ValueError**`initial_accum`、`l1` 或 `l2` 小于0。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.FTRL(params=net.trainable_params())
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params},
... {'order_params': net.trainable_params()}]
>>> optim = nn.FTRL(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组使用优化器中的学习率0.1、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
.. include::mindspore.nn.optim_target_unique_for_sparse.rst

View File

@ -1,51 +1,58 @@
Class mindspore.nn.FixedLossScaleUpdateCell(loss_scale_value)
mindspore.nn.FixedLossScaleUpdateCell
=======================================
.. py:class:: mindspore.nn.FixedLossScaleUpdateCell(loss_scale_value)
固定梯度放大系数的神经元。
该类是:class:`mindspore.nn.FixedLossScaleManager`的`get_update_cell`方法的返回值。
训练过程中,类:class:`mindspore.TrainOneStepWithLossScaleCell`会调用该Cell。
该类是 :class:`mindspore.nn.FixedLossScaleManager` 的 `get_update_cell` 方法的返回值。训练过程中,类 :class:`mindspore.TrainOneStepWithLossScaleCell` 会调用该Cell。
参数:
loss_scale_value (float):初始梯度放大系数。
**参数:**
输入:
- **loss_scale** (Tensor)训练期间的梯度放大系数shape为:math:`()`,在当前类中,该值被忽略。
- **overflow** (bool):是否发生溢出。
**loss_scale_value** (float):初始梯度放大系数。
输出:
Bool即输入`overflow`。
**输入:**
支持平台:
``Ascend`` ``GPU``
- **loss_scale** (Tensor)训练期间的梯度放大系数shape为 :math:`()`,在当前类中,该值被忽略。
- **overflow** (bool):是否发生溢出。
示例:
>>> import numpy as np
>>> from mindspore import Tensor, Parameter, nn, ops
>>>
>>> class Net(nn.Cell):
... def __init__(self, in_features, out_features)
... super(Net, self).__init__()
... self.weight = Parameter(Tensor(np.ones([in_features, out_features]).astype(np.float32)),
... name='weight')
... self.matmul = ops.MatMul()
...
... def construct(self, x)
... output = self.matmul(x, self.weight)
... return output
...
>>> in_features, out_features = 16, 10
>>> net = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> optimizer = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> net_with_loss = nn.WithLossCell(net, loss)
>>> manager = nn.FixedLossScaleUpdateCell(loss_scale_value=2**12)
>>> train_network = nn.TrainOneStepWithLossScaleCell(net_with_loss, optimizer, scale_sense=manager)
>>> input = Tensor(np.ones([out_features, in_features]), mindspore.float32)
>>> labels = Tensor(np.ones([out_features,]), mindspore.float32)
>>> output = train_network(input, labels)
**输出:**
Bool即输入`overflow`。
**支持平台:**
``Ascend`` ``GPU``
**样例:**
>>> import numpy as np
>>> from mindspore import Tensor, Parameter, nn, ops
>>>
>>> class Net(nn.Cell):
... def __init__(self, in_features, out_features)
... super(Net, self).__init__()
... self.weight = Parameter(Tensor(np.ones([in_features, out_features]).astype(np.float32)),
... name='weight')
... self.matmul = ops.MatMul()
...
... def construct(self, x)
... output = self.matmul(x, self.weight)
... return output
...
>>> in_features, out_features = 16, 10
>>> net = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> optimizer = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> net_with_loss = nn.WithLossCell(net, loss)
>>> manager = nn.FixedLossScaleUpdateCell(loss_scale_value=2**12)
>>> train_network = nn.TrainOneStepWithLossScaleCell(net_with_loss, optimizer, scale_sense=manager)
>>> input = Tensor(np.ones([out_features, in_features]), mindspore.float32)
>>> labels = Tensor(np.ones([out_features,]), mindspore.float32)
>>> output = train_network(input, labels)
get_loss_scale()
.. py:method:: get_loss_scale()
获取当前梯度放大系数。

View File

@ -1,4 +1,7 @@
Class mindspore.nn.InverseDecayLR(learning_rate, decay_rate, decay_steps, is_stair=False)
mindspore.nn.InverseDecayLR
=============================
.. py:class:: mindspore.nn.InverseDecayLR(learning_rate, decay_rate, decay_steps, is_stair=False)
基于逆时衰减函数计算学习率。
@ -12,39 +15,45 @@ Class mindspore.nn.InverseDecayLR(learning_rate, decay_rate, decay_steps, is_sta
.. math::
p = \frac{current\_step}{decay\_steps}
如果`is_stair`为True则公式为
如果 `is_stair` 为True则公式为
.. math::
p = floor(\frac{current\_step}{decay\_steps})
参数:
learning_rate (float):学习率的初始值。
decay_rate (float):衰减率。
decay_steps (int):用于计算衰减学习率的值。
is_stair (bool)如果为True则学习率每`decay_steps`次衰减一次。默认值False。
**参数:**
输入:
- **global_step** (Tensor)当前step数。
- **learning_rate** (float):学习率的初始值。
- **decay_rate** (float):衰减率。
- **decay_steps** (int):用于计算衰减学习率的值。
- **is_stair** (bool)如果为True则学习率每 `decay_steps` 次衰减一次。默认值False。
输出:
Tensor。当前step的学习率值shape为:math:`()`。
**输入:**
异常:
TypeError`learning_rate`或`decay_rate`不是float。
TypeError`decay_steps`不是int或`is_stair`不是bool。
ValueError`decay_steps`小于1。
ValueError`learning_rate`或`decay_rate`小于或等于0。
**global_step** (Tensor)当前step数。
支持平台:
``Ascend`` ``GPU`` ``CPU``
**输出:**
示例:
>>> learning_rate = 0.1
>>> decay_rate = 0.9
>>> decay_steps = 4
>>> global_step = Tensor(2, mstype.int32)
>>> inverse_decay_lr = nn.InverseDecayLR(learning_rate, decay_rate, decay_steps, True)
>>> result = inverse_decay_lr(global_step)
>>> print(result)
0.1
Tensor。当前step的学习率值shape为:math:`()`。
**异常:**
- **TypeError**`learning_rate` 或 `decay_rate` 不是float。
- **TypeError**`decay_steps` 不是int或 `is_stair` 不是bool。
- **ValueError**`decay_steps` 小于1。
- **ValueError**`learning_rate` 或 `decay_rate` 小于或等于0。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> learning_rate = 0.1
>>> decay_rate = 0.9
>>> decay_steps = 4
>>> global_step = Tensor(2, mstype.int32)
>>> inverse_decay_lr = nn.InverseDecayLR(learning_rate, decay_rate, decay_steps, True)
>>> result = inverse_decay_lr(global_step)
>>> print(result)
0.1

View File

@ -1,8 +1,11 @@
Class mindspore.nn.LARS(*args, **kwargs)
mindspore.nn.Lamb
==================
.. py:class:: mindspore.nn.LARS(*args, **kwargs)
使用LARSUpdate算子实现LARS算法。
LARS算法采用大量的优化技术。详见论文`LARGE BATCH TRAINING OF CONVOLUTIONAL NETWORKS <https://arxiv.org/abs/1708.03888>`_。
LARS算法采用大量的优化技术。详见论文 `LARGE BATCH TRAINING OF CONVOLUTIONAL NETWORKS <https://arxiv.org/abs/1708.03888>`_。
更新公式如下:
@ -24,27 +27,32 @@ Class mindspore.nn.LARS(*args, **kwargs)
:math:`\theta`表示`coefficient`:math:`\omega`表示网络参数,:math:`g`表示`gradients`:math:`t`表示当前step:math:`\delta`表示`optimizer`配置的`weight_decay`:math:`\alpha`表示`optimizer`配置的`learning_rate`:math:`clip`表示`use_clip`。
参数:
optimizer (Optimizer)待封装和修改梯度的MindSpore优化器。
epsilon (float)将添加到分母中提高数值稳定性。默认值1e-05。
coefficient (float)计算局部学习速率的信任系数。默认值0.001。
use_clip (bool)计算局部学习速率时是否裁剪。默认值False。
lars_filter (Function)用于指定使用LARS算法的网络参数。默认值lambda x: 'LayerNorm' not in x.name and 'bias' not in x.name。
**参数:**
输入:
- **gradients** (tuple[Tensor]):优化器中`params`的梯度shape与优化器中的`params`相同。
- **optimizer** (Optimizer)待封装和修改梯度的MindSpore优化器。
- **epsilon** (float)将添加到分母中提高数值稳定性。默认值1e-05。
- **coefficient** (float)计算局部学习速率的信任系数。默认值0.001。
- **use_clip** (bool)计算局部学习速率时是否裁剪。默认值False。
- **lars_filter** (Function)用于指定使用LARS算法的网络参数。默认值lambda x: 'LayerNorm' not in x.name and 'bias' not in x.name。
**输入:**
**gradients** (tuple[Tensor]):优化器中`params`的梯度shape与优化器中的`params`相同。
输出:
Union[Tensor[bool], tuple[Parameter]],取决于`optimizer`的输出。
**输出:**
支持平台:
``Ascend`` ``CPU``
Union[Tensor[bool], tuple[Parameter]],取决于`optimizer`的输出。
示例:
>>> net = Net()
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> opt = nn.Momentum(net.trainable_params(), 0.1, 0.9)
>>> opt_lars = nn.LARS(opt, epsilon=1e-08, coefficient=0.02)
>>> model = Model(net, loss_fn=loss, optimizer=opt_lars, metrics=None)
**支持平台:**
``Ascend`` ``CPU``
**样例:**
>>> net = Net()
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> opt = nn.Momentum(net.trainable_params(), 0.1, 0.9)
>>> opt_lars = nn.LARS(opt, epsilon=1e-08, coefficient=0.02)
>>> model = Model(net, loss_fn=loss, optimizer=opt_lars, metrics=None)

View File

@ -1,9 +1,11 @@
Class mindspore.nn.Lamb(*args, **kwargs)
mindspore.nn.Lamb
==================
.. py:class:: mindspore.nn.Lamb(*args, **kwargs)
LAMBLayer-wise Adaptive Moments optimizer for Batching training用于批训练的分层自适应矩优化器算法优化器。
LAMB是一种采用分层自适应批优化技术的优化算法。
详见论文`LARGE BATCH OPTIMIZATION FOR DEEP LEARNING: TRAINING BERT IN 76 MINUTES <https://arxiv.org/abs/1904.00962>`_。
LAMB是一种采用分层自适应批优化技术的优化算法。详见论文 `LARGE BATCH OPTIMIZATION FOR DEEP LEARNING: TRAINING BERT IN 76 MINUTES <https://arxiv.org/abs/1904.00962>`_。
LAMB优化器旨在不降低精度的情况下增加训练batch size支持自适应逐元素更新和精确的分层校正。
@ -28,62 +30,66 @@ Class mindspore.nn.Lamb(*args, **kwargs)
.. include:: mindspore.nn.optim_note_loss_scale.rst
参数:
params (Union[list[Parameter], list[dict]]): 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
**参数:**
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
- **params** (Union[list[Parameter], list[dict]]): 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
learning_rate (Union[float, Tensor, Iterable, LearningRateSchedule]):
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
beta1 (float)第一矩的指数衰减率。参数范围0.0,1.0。默认值0.9。
- **learning_rate (Union[float, Tensor, Iterable, LearningRateSchedule]):
beta2 (float)第二矩的指数衰减率。参数范围0.0,1.0。默认值0.999。
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
eps (float)将添加到分母中以提高数值稳定性。必须大于0。默认值1e-6。
- **beta1** (float)第一矩的指数衰减率。参数范围0.0,1.0。默认值0.9。
- **beta2** (float)第二矩的指数衰减率。参数范围0.0,1.0。默认值0.999。
- **eps** (float)将添加到分母中以提高数值稳定性。必须大于0。默认值1e-6。
- **weight_decay** (float)权重衰减L2 penalty。必须大于等于0。默认值0.0。
weight_decay (float)权重衰减L2 penalty。必须大于等于0。默认值0.0。
**输入:**
输入:
- **gradients** (tuple[Tensor])`params`的梯度shape与`params`相同。
**gradients** (tuple[Tensor])`params`的梯度shape与`params`相同。
输出:
tuple[bool]所有元素都为True。
**输出:**
异常:
TypeError`learning_rate`不是int、float、Tensor、Iterable或LearningRateSchedule。
TypeError`parameters`的元素不是Parameter或dict。
TypeError`beta1`、`beta2`或`eps`不是float。
TypeError`weight_decay`不是float或int。
ValueError`eps`小于等于0。
ValueError`beta1`、`beta2`不在0.0,1.0)范围内。
ValueError`weight_decay`小于0。
tuple[bool]所有元素都为True。
支持平台:
``Ascend`` ``GPU`` ``CPU``
**异常:**
示例:
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.Lamb(params=net.trainable_params(), learning_rate=0.1)
>>>
>>> #2) 使用参数分组并设置不同的值
>>> poly_decay_lr = learning_rate_schedule.PolynomialDecayLR(learning_rate=0.1, end_learning_rate=0.01,
... decay_steps=4, power = 0.5)
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params, 'lr': poly_decay_lr},
... {'order_params': net.trainable_params(0.01)}]
>>> optim = nn.Lamb(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组将使用该组的衰减学习率、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
- **TypeError**`learning_rate`不是int、float、Tensor、Iterable或LearningRateSchedule。
- **TypeError**`parameters`的元素不是Parameter或dict。
- **TypeError**`beta1`、`beta2`或`eps`不是float。
- **TypeError**`weight_decay`不是float或int。
- **ValueError**`eps`小于等于0。
- **ValueError**`beta1`、`beta2`不在0.0,1.0)范围内。
- **ValueError**`weight_decay`小于0。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.Lamb(params=net.trainable_params(), learning_rate=0.1)
>>>
>>> #2) 使用参数分组并设置不同的值
>>> poly_decay_lr = learning_rate_schedule.PolynomialDecayLR(learning_rate=0.1, end_learning_rate=0.01,
... decay_steps=4, power = 0.5)
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params, 'lr': poly_decay_lr},
... {'order_params': net.trainable_params(0.01)}]
>>> optim = nn.Lamb(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组将使用该组的衰减学习率、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)

View File

@ -1,6 +1,9 @@
Class mindspore.nn.LazyAdam(*args, **kwargs)
mindspore.nn.LazyAdam
======================
通过Adaptive Moment Estimation (Adam)算法更新梯度。请参阅论文`Adam: A Method for Stochastic Optimization <https://arxiv.org/abs/1412.6980>`_。
.. py:class:: mindspore.nn.LazyAdam(*args, **kwargs)
通过Adaptive Moment Estimation (Adam)算法更新梯度。请参阅论文 `Adam: A Method for Stochastic Optimization <https://arxiv.org/abs/1412.6980>`_。
当梯度稀疏时此优化器将使用Lazy Adam算法。
@ -14,80 +17,81 @@ Class mindspore.nn.LazyAdam(*args, **kwargs)
w_{t+1} = w_{t} - l * \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon}
\end{array}
:math:`m`代表第一个矩向量`moment1`:math:`v`代表第二个矩向量`moment2`:math:`g`代表`gradients`:math:`l`代表缩放因子,:math:`\beta_1,\beta_2`代表`beta1`和`beta2`:math:`t`代表当前step:math:`beta_1^t`和:math:`beta_2^t`代表`beta1_power`和`beta2_power`:math:`\alpha`代表``learning_rate`:math:`w`代表`params`:math:`\epsilon`代表`eps`。
:math:`m` 代表第一个矩向量 `moment1` :math:`v` 代表第二个矩向量 `moment2` :math:`g` 代表 `gradients` :math:`l` 代表缩放因子,:math:`\beta_1,\beta_2` 代表 `beta1` 和 `beta2` :math:`t` 代表当前step:math:`beta_1^t` 和 :math:`beta_2^t` 代表 `beta1_power` 和 `beta2_power` :math:`\alpha` 代表 `learning_rate` :math:`w` 代表 `params` :math:`\epsilon` 代表 `eps`。
.. note::
.. include:: mindspore.nn.optim_note_sparse.rst
需要注意的是梯度稀疏时该优化器只更新网络参数的当前的索引位置稀疏行为不等同于Adam算法。
.. include:: mindspore.nn.optim_note_sparse.rst
.. include:: mindspore.nn.optim_note_weight_decay.rst
需要注意的是梯度稀疏时该优化器只更新网络参数的当前的索引位置稀疏行为不等同于Adam算法。
参数:
param (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
.. include:: mindspore.nn.optim_note_weight_decay.rst
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
**参数:**
learning_rate (Union[float, Tensor, Iterable, LearningRateSchedule]): 默认值1e-3。
.. include:: mindspore.nn.optim_dynamic_lr.rst
- **param** (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
beta1 (float)`moment1` 的指数衰减率。参数范围0.0,1.0。默认值0.9。
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
beta2 (float)moment2` 的指数衰减率。参数范围0.0,1.0。默认值0.999。
- **learning_rate (Union[float, Tensor, Iterable, LearningRateSchedule]): 默认值1e-3
eps (float)将添加到分母中以提高数值稳定性。必须大于0。默认值1e-8。
.. include:: mindspore.nn.optim_dynamic_lr.rst
use_locking (bool)是否对参数更新加锁保护。如果为True则 `w` 、`m` 和 `v` 的Tensor更新将受到锁的保护。如果为False则结果不可预测。默认值False。
- **beta1 (float)`moment1` 的指数衰减率。参数范围0.0,1.0。默认值0.9。
- **beta2 (float)moment2` 的指数衰减率。参数范围0.0,1.0。默认值0.999。
- **eps (float)将添加到分母中以提高数值稳定性。必须大于0。默认值1e-8。
- **use_locking (bool)是否对参数更新加锁保护。如果为True则 `w` 、`m` 和 `v` 的Tensor更新将受到锁的保护。如果为False则结果不可预测。默认值False。
- **use_nesterov (bool)是否使用Nesterov Accelerated Gradient (NAG)算法更新梯度。如果为True使用NAG更新梯度。如果为False则在不使用NAG的情况下更新梯度。默认值False。
- **weight_decay (Union[float, int])权重衰减L2 penalty。必须大于等于0。默认值0.0。
use_nesterov (bool)是否使用Nesterov Accelerated Gradient (NAG)算法更新梯度。如果为True使用NAG更新梯度。如果为False则在不使用NAG的情况下更新梯度。默认值False。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
weight_decay (Union[float, int])权重衰减L2 penalty。必须大于等于0。默认值0.0。
**输入:**
.. include:: mindspore.nn.optim_arg_loss_scale.rst
**gradients** (tuple[Tensor])`params` 的梯度shape与 `params` 相同。
输入:
- **gradients** (tuple[Tensor])`params`的梯度shape与`params`相同。
**输出:**
输出:
Tensor[bool]值为True。
Tensor[bool]值为True。
异常:
TypeError`learning_rate`不是int、float、Tensor、Iterable或LearningRateSchedule。
TypeError`parameters`的元素不是Parameter或字典。
TypeError`beta1`、`beta2`、`eps`或`loss_scale`不是float。
TypeError`weight_decay`不是float或int。
TypeError`use_locking`或`use_nesterov`不是bool。
ValueError`loss_scale`或`eps`小于或等于0。
ValueError`beta1`、`beta2`不在0.0,1.0)范围内。
ValueError`weight_decay`小于0。
**异常:**
支持平台:
``Ascend`` ``GPU``
- **TypeError**`learning_rate` 不是int、float、Tensor、Iterable或LearningRateSchedule。
- **TypeError**`parameters` 的元素不是Parameter或字典。
- **TypeError**`beta1`、`beta2`、`eps` 或 `loss_scale` 不是float。
- **TypeError**`weight_decay` 不是float或int。
- **TypeError**`use_locking` 或 `use_nesterov` 不是bool。
- **ValueError**`loss_scale `或 `eps` 小于或等于0。
- **ValueError**`beta1`、`beta2` 不在0.0,1.0)范围内。
- **ValueError**`weight_decay` 小于0。
示例:
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.LazyAdam(params=net.trainable_params())
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.LazyAdam(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
**支持平台:**
``Ascend`` ``GPU``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.LazyAdam(params=net.trainable_params())
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.LazyAdam(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
.. include:: mindspore.nn.optim_target_unique_for_sparse.rst

View File

@ -1,4 +1,7 @@
Class mindspore.nn.NaturalExpDecayLR(learning_rate, decay_rate, decay_steps, is_stair=False)
mindspore.nn.NaturalExpDecayLR
===============================
.. py:class:: mindspore.nn.NaturalExpDecayLR(learning_rate, decay_rate, decay_steps, is_stair=False)
基于自然指数衰减函数计算学习率。
@ -12,39 +15,45 @@ Class mindspore.nn.NaturalExpDecayLR(learning_rate, decay_rate, decay_steps, is_
.. math::
p = \frac{current\_step}{decay\_steps}
如果`is_stair`为True则公式为
如果 `is_stair` 为True则公式为
.. math::
p = floor(\frac{current\_step}{decay\_steps})
参数:
learning_rate (float):学习率的初始值。
decay_rate (float):衰减率。
decay_steps (int):用于计算衰减学习率的值。
is_stair (bool)如果为True则学习率每`decay_steps`次衰减一次。默认值False。
**参数:**
输入:
- **global_step** Tensor当前step数。
- **learning_rate** (float):学习率的初始值。
- **decay_rate** (float):衰减率。
- **decay_steps** (int):用于计算衰减学习率的值。
- **is_stair** (bool)如果为True则学习率每 `decay_steps` 次衰减一次。默认值False。
输出:
Tensor。当前step的学习率值shape为 :math:`()`。
**输入:**
异常:
TypeError`learning_rate`或`decay_rate`不是float。
TypeError`decay_steps`不是int或`is_stair`不是bool。
ValueError`decay_steps`小于1。
ValueError`learning_rate`或`decay_rate`小于或等于0。
**global_step** Tensor当前step数。
支持平台:
``Ascend`` ``GPU`` ``CPU``
**输出:**
示例:
>>> learning_rate = 0.1
>>> decay_rate = 0.9
>>> decay_steps = 4
>>> global_step = Tensor(2, mstype.int32)
>>> natural_exp_decay_lr = nn.NaturalExpDecayLR(learning_rate, decay_rate, decay_steps, True)
>>> result = natural_exp_decay_lr(global_step)
>>> print(result)
0.1
Tensor。当前step的学习率值shape为 :math:`()`。
**异常:**
- **TypeError**`learning_rate` 或 `decay_rate` 不是float。
- **TypeError**`decay_steps` 不是int或 `is_stair` 不是bool。
- **ValueError**`decay_steps` 小于1。
- **ValueError**`learning_rate` 或 `decay_rate` 小于或等于0。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> learning_rate = 0.1
>>> decay_rate = 0.9
>>> decay_steps = 4
>>> global_step = Tensor(2, mstype.int32)
>>> natural_exp_decay_lr = nn.NaturalExpDecayLR(learning_rate, decay_rate, decay_steps, True)
>>> result = natural_exp_decay_lr(global_step)
>>> print(result)
0.1

View File

@ -1,4 +1,7 @@
Class mindspore.nn.PolynomialDecayLR(learning_rate, end_learning_rate, decay_steps, power, update_decay_steps=False)
mindspore.nn.polynomial_decay_lr
====================================
.. py:class:: mindspore.nn.PolynomialDecayLR(learning_rate, end_learning_rate, decay_steps, power, update_decay_steps=False)
基于多项式衰减函数计算学习率。
@ -13,41 +16,47 @@ Class mindspore.nn.PolynomialDecayLR(learning_rate, end_learning_rate, decay_ste
.. math::
tmp\_step=min(current\_step, decay\_steps)
如果`update_decay_steps`为true则每`decay_steps`更新`tmp_decay_step`的值。公式为:
如果 `update_decay_steps` 为true则每 `decay_steps` 更新 `tmp_decay_step` 的值。公式为:
.. math::
tmp\_decay\_steps = decay\_steps * ceil(current\_step / decay\_steps)
参数:
learning_rate (float):学习率的初始值。
end_learning_rate (float):学习率的最终值。
decay_steps (int):用于计算衰减学习率的值。
power (float)用于计算衰减学习率的值。该参数必须大于0。
update_decay_steps (bool)如果为True则学习率每`decay_steps`次衰减一次。默认值False。
**参数:**
输入:
- **global_step** Tensor当前step数。
- **learning_rate** (float):学习率的初始值。
- **end_learning_rate** (float):学习率的最终值。
- **decay_steps** (int):用于计算衰减学习率的值。
- **power** (float)用于计算衰减学习率的值。该参数必须大于0。
- **update_decay_steps** (bool)如果为True则学习率每 `decay_steps` 次衰减一次。默认值False。
输出:
Tensor。当前step的学习率值, shape为 :math:`()`。
**输入:**
异常:
TypeError`learning_rate`,`end_learning_rate`或`power`不是float。
TypeError`decay_steps`不是int或`update_decay_steps`不是bool。
ValueError`end_learning_rate`小于0或`decay_steps`小于1。
ValueError`learning_rate`或`power`小于或等于0。
**global_step** Tensor当前step数。
支持平台:
``Ascend`` ``GPU``
**输出:**
示例:
>>> learning_rate = 0.1
>>> end_learning_rate = 0.01
>>> decay_steps = 4
>>> power = 0.5
>>> global_step = Tensor(2, mstype.int32)
>>> polynomial_decay_lr = nn.PolynomialDecayLR(learning_rate, end_learning_rate, decay_steps, power)
>>> result = polynomial_decay_lr(global_step)
>>> print(result)
0.07363961
Tensor。当前step的学习率值, shape为 :math:`()`。
**异常:**
- **TypeError**`learning_rate`,`end_learning_rate` 或 `power` 不是float。
- **TypeError**`decay_steps` 不是int或 `update_decay_steps` 不是bool。
- **ValueError**`end_learning_rate` 小于0或 `decay_steps` 小于1。
- **ValueError**`learning_rate` 或 `power` 小于或等于0。
**支持平台:**
``Ascend`` ``GPU``
**样例:**
>>> learning_rate = 0.1
>>> end_learning_rate = 0.01
>>> decay_steps = 4
>>> power = 0.5
>>> global_step = Tensor(2, mstype.int32)
>>> polynomial_decay_lr = nn.PolynomialDecayLR(learning_rate, end_learning_rate, decay_steps, power)
>>> result = polynomial_decay_lr(global_step)
>>> print(result)
0.07363961

View File

@ -1,9 +1,12 @@
Class mindspore.nn.ProximalAdagrad(*args, **kwargs)
mindspore.nn.ProximalAdagrad
==============================
.. py:class:: mindspore.nn.ProximalAdagrad(*args, **kwargs)
使用ApplyProximalAdagrad算子实现ProximalAdagrad算法。
ProximalAdagrad用于在线学习和随机优化。
请参阅论文`Efficient Learning using Forward-Backward Splitting <http://papers.nips.cc//paper/3793-efficient-learning-using-forward-backward-splitting.pdf>`_。
请参阅论文 `Efficient Learning using Forward-Backward Splitting <http://papers.nips.cc//paper/3793-efficient-learning-using-forward-backward-splitting.pdf>`_。
.. math::
accum_{t+1} = accum_{t} + grad * grad
@ -14,69 +17,78 @@ Class mindspore.nn.ProximalAdagrad(*args, **kwargs)
.. math::
var_{t+1} = \frac{sign(\text{prox_v})}{1 + lr * l2} * \max(\left| \text{prox_v} \right| - lr * l1, 0)
其中grad、lr、var、accum和t分别表示`grads`, `learning_rate`, `params`、累加器和当前step。
其中grad、lr、var、accum和t分别表示 `grads`, `learning_rate`, `params` 、累加器和当前step。
.. note::
.. include:: mindspore.nn.optim_note_sparse.rst
.. include:: mindspore.nn.optim_note_weight_decay.rst
参数:
param (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
**参数:**
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
- **param** (Union[list[Parameter], list[dict]]) - 必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
accum (float):累加器`accum`的初始值起始值必须为零或正值。默认值0.1。
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
learning_rate (Union[float, Tensor, Iterable, LearningRateSchedule]): 默认值1e-3。
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
- **accum** (float):累加器`accum`的初始值起始值必须为零或正值。默认值0.1。
l1 (float):l1正则化强度必须大于或等于零。默认值0.0。
l2 (float):l2正则化强度必须大于或等于零。默认值0.0。
use_locking (bool)如果为True则更新操作使用锁保护。默认值False。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
weight_decay (Union[float, int])要乘以权重的权重衰减值必须为零或正值。默认值0.0。
- **learning_rate** (Union[float, Tensor, Iterable, LearningRateSchedule]): 默认值1e-3。
输入:
- **grads** (tuple[Tensor]) - 优化器中`params`的梯度shape与优化器中的`params`相同。
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
输出:
Tensor[bool]值为True。
- **l1** (float):l1正则化强度必须大于或等于零。默认值0.0。
- **l2** (float):l2正则化强度必须大于或等于零。默认值0.0。
- **use_locking** (bool)如果为True则更新操作使用锁保护。默认值False。
异常:
TypeError`learning_rate`不是int、float、Tensor、Iterable或LearningRateSchedule。
TypeError`parameters`的元素不是Parameter或字典。
TypeError`accum`、`l1`、`l2`或`loss_scale`不是float。
TypeError`weight_decay`不是float或int。
ValueError`loss_scale`小于或等于0。
ValueError`accum`、`l1`、`l2`或`weight_decay`小于0。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
支持平台:
``Ascend``
- **weight_decay** (Union[float, int])要乘以权重的权重衰减值必须为零或正值。默认值0.0。
**输入:**
**grads** (tuple[Tensor]) - 优化器中 `params` 的梯度shape与优化器中的 `params` 相同。
**输出:**
Tensor[bool]值为True。
**异常:**
- **TypeError**`learning_rate` 不是int、float、Tensor、Iterable或LearningRateSchedule。
- **TypeError**`parameters` 的元素不是Parameter或字典。
- **TypeError**`accum`、`l1`、`l2` 或 `loss_scale`不是float。
- **TypeError**`weight_decay` 不是float或int。
- **ValueError**`loss_scale` 小于或等于0。
- **ValueError**`accum`、`l1`、`l2` 或 `weight_decay` 小于0。
**支持平台:**
``Ascend``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.ProximalAdagrad(params=net.trainable_params())
>>>
>>> #2) 使用参数组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.ProximalAdagrad(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
示例:
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.ProximalAdagrad(params=net.trainable_params())
>>>
>>> #2) 使用参数组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.ProximalAdagrad(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
.. include:: mindspore.nn.optim_target_unique_for_sparse.rst

View File

@ -1,8 +1,11 @@
Class mindspore.nn.RMSProp(*args, **kwargs)
mindspore.nn.RMSProp
======================
.. py:class:: mindspore.nn.RMSProp(*args, **kwargs)
实现均方根传播RMSProp算法。
根据RMSProp算法更新`params`,算法详见[http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf]第29页。
根据RMSProp算法更新 `params`,算法详见 [http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf] 第29页。
公式如下:
@ -15,7 +18,7 @@ Class mindspore.nn.RMSProp(*args, **kwargs)
.. math::
w = w - m_{t+1}
第一个方程计算每个权重的平方梯度的移动平均。然后将梯度除以:math:`\sqrt{ms_{t+1} + \epsilon}`。
第一个方程计算每个权重的平方梯度的移动平均。然后将梯度除以 :math:`\sqrt{ms_{t+1} + \epsilon}`。
如果centered为True
@ -31,71 +34,81 @@ Class mindspore.nn.RMSProp(*args, **kwargs)
.. math::
w = w - m_{t+1}
其中:math:`w`代表待更新的网络参数`params`。
:math:`g_{t+1}`是平均梯度。
:math:`s_{t+1}`是均方梯度。
:math:`m_{t+1}`是moment`w`的delta。
:math:`\rho`代表`decay`。:math:`\beta`是动量项,表示`momentum`。
:math:`\epsilon`是平滑项,可以避免除以零,表示`epsilon`。
:math:`\eta`是学习率,表示`learning_rate`。:math:`\nabla Q_{i}(w)`是梯度,表示`gradients`。
:math:`t`表示当前step。
其中 :math:`w` 代表待更新的网络参数 `params`。
:math:`g_{t+1}` 是平均梯度。
:math:`s_{t+1}` 是均方梯度。
:math:`m_{t+1}` 是moment`w` 的delta。
:math:`\rho` 代表 `decay`。:math:`\beta` 是动量项,表示 `momentum`。
:math:`\epsilon` 是平滑项,可以避免除以零,表示 `epsilon`。
:math:`\eta` 是学习率,表示 `learning_rate`。 :math:`\nabla Q_{i}(w)` 是梯度,表示 `gradients`。
:math:`t` 表示当前step。
.. note::
.. include:: mindspore.nn.optim_note_weight_decay.rst
参数:
params (Union[list[Parameter], list[dict]]):必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
**参数:**
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
- **params** (Union[list[Parameter], list[dict]]):必须是 `Parameter` 组成的列表或字典组成的列表。当列表元素是字典时,字典的键可以是"params"、"lr"、"weight_decay"、"grad_centralization"和"order_params"
learning_rate (Union[float, Tensor, Iterable, LearningRateSchedule])默认值0.1。
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
decay (float)衰减率。必须大于等于0。默认值0.9。
momentum (float)Float类型的超参数表示移动平均的动量momentum。必须大于等于0。默认值0.0。
epsilon (float)将添加到分母中以提高数值稳定性。取值大于0。默认值1e-10。
use_locking (bool)是否对参数更新加锁保护。默认值False。
centered (bool)如果为True则梯度将通过梯度的估计方差进行归一。默认值False。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
weight_decay (Union[float, int])权重衰减L2 penalty。必须大于等于0。默认值0.0。
.. include:: mindspore.nn.optim_group_param.rst
.. include:: mindspore.nn.optim_group_lr.rst
.. include:: mindspore.nn.optim_group_weight_decay.rst
.. include:: mindspore.nn.optim_group_gc.rst
.. include:: mindspore.nn.optim_group_order.rst
输入:
- **gradients** tuple[Tensor] - `params`的梯度shape与`params`相同。
- **learning_rate (Union[float, Tensor, Iterable, LearningRateSchedule])默认值0.1。
输出:
Tensor[bool]值为True。
.. include:: mindspore.nn.optim_arg_dynamic_lr.rst
异常:
TypeError`learning_rate`不是int、float、Tensor、Iterable或LearningRateSchedule。
TypeError`decay`、`momentum`、`epsilon`或`loss_scale`不是float。
TypeError`parameters`的元素不是Parameter或字典。
TypeError`weight_decay`不是float或int。
TypeError`use_locking`或`centered`不是bool。
ValueError`epsilon`小于或等于0。
ValueError`decay`或`momentum`小于0。
- **decay** (float)衰减率。必须大于等于0。默认值0.9。
- **momentum** (float)Float类型的超参数表示移动平均的动量momentum。必须大于等于0。默认值0.0。
- **epsilon** (float)将添加到分母中以提高数值稳定性。取值大于0。默认值1e-10。
- **use_locking** (bool)是否对参数更新加锁保护。默认值False。
- **centered** (bool)如果为True则梯度将通过梯度的估计方差进行归一。默认值False。
.. include:: mindspore.nn.optim_arg_loss_scale.rst
支持平台:
``Ascend`` ``GPU`` ``CPU``
- **weight_decay** (Union[float, int])权重衰减L2 penalty。必须大于等于0。默认值0.0。
示例:
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.RMSProp(params=net.trainable_params(), learning_rate=0.1)
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.RMSProp(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)
**输入:**
**gradients** tuple[Tensor] - `params` 的梯度shape与 `params` 相同。
**输出:**
Tensor[bool]值为True。
**异常:**
- **TypeError**`learning_rate` 不是int、float、Tensor、Iterable或LearningRateSchedule。
- **TypeError**`decay` 、 `momentum` 、 `epsilon` 或 `loss_scale` 不是float。
- **TypeError**`parameters` 的元素不是Parameter或字典。
- **TypeError**`weight_decay` 不是float或int。
- **TypeError**`use_locking` 或 `centered` 不是bool。
- **ValueError**`epsilon` 小于或等于0。
- **ValueError**`decay` 或 `momentum` 小于0。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> net = Net()
>>> #1) 所有参数使用相同的学习率和权重衰减
>>> optim = nn.RMSProp(params=net.trainable_params(), learning_rate=0.1)
>>>
>>> #2) 使用参数分组并设置不同的值
>>> conv_params = list(filter(lambda x: 'conv' in x.name, net.trainable_params()))
>>> no_conv_params = list(filter(lambda x: 'conv' not in x.name, net.trainable_params()))
>>> group_params = [{'params': conv_params, 'weight_decay': 0.01, 'grad_centralization':True},
... {'params': no_conv_params, 'lr': 0.01},
... {'order_params': net.trainable_params()}]
>>> optim = nn.RMSProp(group_params, learning_rate=0.1, weight_decay=0.0)
>>> # conv_params参数组将使用优化器中的学习率0.1、该组的权重衰减0.01、该组的梯度中心化配置True。
>>> # no_conv_params参数组将使用该组的学习率0.01、优化器中的权重衰减0.0、梯度中心化使用默认值False。
>>> # 优化器按照"order_params"配置的参数顺序更新参数。
>>>
>>> loss = nn.SoftmaxCrossEntropyWithLogits()
>>> model = Model(net, loss_fn=loss, optimizer=optim)

View File

@ -1,50 +1,59 @@
Class mindspore.nn.TrainOneStepCell(network, optimizer, sens=1.0)
mindspore.nn.TrainOneStepCell
=============================
.. py:class:: mindspore.nn.TrainOneStepCell(network, optimizer, sens=1.0)
训练网络封装类。
封装`network`和`optimizer`,构建一个输入'\*inputs'的用于训练的Cell。
执行函数`construct`中会构建反向图以更新网络参数。支持不同的并行训练模式。
封装 `network` `optimizer` ,构建一个输入'\*inputs'的用于训练的Cell。
执行函数 `construct` 中会构建反向图以更新网络参数。支持不同的并行训练模式。
参数:
network (Cell):训练网络。只支持单输出网络。
optimizer (Union[Cell]):用于更新网络参数的优化器。
sens (numbers.Number)反向传播的输入缩放系数。默认值为1.0。
**参数:**
输入:
- **(\*inputs)** (Tuple(Tensor)) - shape为:math:`(N, \ldots)`的Tensor组成的元组。
- **network** (Cell):训练网络。只支持单输出网络。
- **optimizer** (Union[Cell]):用于更新网络参数的优化器。
- **sens** (numbers.Number)反向传播的输入缩放系数。默认值为1.0。
输出:
Tensor损失函数值其shape通常为:math:`()`。
**输入:**
异常:
TypeError`sens`不是numbers.Number。
**(\*inputs)** (Tuple(Tensor)) - shape为 :math:`(N, \ldots)` 的Tensor组成的元组。
支持平台:
``Ascend`` ``GPU`` ``CPU``
**输出:**
示例:
>>> net = Net()
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits()
>>> optim = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> # 1使用MindSpore提供的WithLossCell
>>> loss_net = nn.WithLossCell(net, loss_fn)
>>> train_net = nn.TrainOneStepCell(loss_net, optim)
>>>
>>> # 2用户自定义的WithLossCell
>>> class MyWithLossCell(Cell):
... def __init__(self, backbone, loss_fn):
... super(MyWithLossCell, self).__init__(auto_prefix=False)
... self._backbone = backbone
... self._loss_fn = loss_fn
...
... def construct(self, x, y, label):
... out = self._backbone(x, y)
... return self._loss_fn(out, label)
...
... @property
... def backbone_network(self):
... return self._backbone
...
>>> loss_net = MyWithLossCell(net, loss_fn)
>>> train_net = nn.TrainOneStepCell(loss_net, optim)
Tensor损失函数值其shape通常为 :math:`()` 。
**异常:**
**TypeError**`sens` 不是numbers.Number。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> net = Net()
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits()
>>> optim = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> # 1使用MindSpore提供的WithLossCell
>>> loss_net = nn.WithLossCell(net, loss_fn)
>>> train_net = nn.TrainOneStepCell(loss_net, optim)
>>>
>>> # 2用户自定义的WithLossCell
>>> class MyWithLossCell(Cell):
... def __init__(self, backbone, loss_fn):
... super(MyWithLossCell, self).__init__(auto_prefix=False)
... self._backbone = backbone
... self._loss_fn = loss_fn
...
... def construct(self, x, y, label):
... out = self._backbone(x, y)
... return self._loss_fn(out, label)
...
... @property
... def backbone_network(self):
... return self._backbone
...
>>> loss_net = MyWithLossCell(net, loss_fn)
>>> train_net = nn.TrainOneStepCell(loss_net, optim)

View File

@ -1,116 +1,129 @@
Class mindspore.nn.TrainOneStepWithLossScaleCell(network, optimizer, scale_sense)
mindspore.nn.TrainOneStepWithLossScaleCell
==========================================
.. py:class:: mindspore.nn.TrainOneStepWithLossScaleCell(network, optimizer, scale_sense)
使用梯度放大功能loss scale的训练网络。
实现了包含梯度放大功能的单次训练。它使用网络、优化器和用于更新梯度放大系数的Cell(或一个Tensor)作为参数。可在host侧或device侧更新梯度放大系数。
如果需要在host侧更新使用Tensor作为`scale_sense`否则使用可更新梯度放大系数的Cell实例作为`scale_sense`。
如果需要在host侧更新使用Tensor作为 `scale_sense` 否则使用可更新梯度放大系数的Cell实例作为 `scale_sense`
参数:
network (Cell):训练网络。仅支持单输出网络。
optimizer (Cell):用于更新网络参数的优化器。
scale_sense (Union[Tensor, Cell])如果此值为Cell类型`TrainOneStepWithLossScaleCell`会调用它来更新梯度放大系数。如果此值为Tensor类型可调用`set_sense_scale`来更新梯度放大系数shape为:math:`()`或:math:`(1,)`。
**参数:**
输入:
- **(*inputs)** (Tuple(Tensor))- shape为:math:`(N, \ldots)`的Tensor组成的元组。
- **network** (Cell):训练网络。仅支持单输出网络。
- **optimizer** (Cell):用于更新网络参数的优化器。
- **scale_sense** (Union[Tensor, Cell])如果此值为Cell类型`TrainOneStepWithLossScaleCell` 会调用它来更新梯度放大系数。如果此值为Tensor类型可调用 `set_sense_scale` 来更新梯度放大系数shape为 :math:`()` 或 :math:`(1,)` 。
输出:
Tuple包含三个Tensor分别为损失函数值、溢出状态和当前梯度放大系数。
**输入:**
- **loss** Tensor - shape为:math:`()`的Tensor。
- **overflow** Tensor- shape为:math:`()`的Tensor类型为bool。
- **loss scale** Tensor- shape为:math:`()`的Tensor。
**(*inputs)** (Tuple(Tensor))- shape为 :math:`(N, \ldots)` 的Tensor组成的元组。
异常:
TypeError`scale_sense`既不是Cell也不是Tensor。
ValueError`scale_sense`的shape既不是(1,)也不是()。
**输出:**
支持平台:
``Ascend`` ``GPU``
Tuple包含三个Tensor分别为损失函数值、溢出状态和当前梯度放大系数。
示例:
>>> import numpy as np
>>> from mindspore import Tensor, Parameter, nn, ops
>>> from mindspore import dtype as mstype
>>>
>>> class Net(nn.Cell):
... def __init__(self, in_features, out_features):
... super(Net, self).__init__()
... self.weight = Parameter(Tensor(np.ones([in_features, out_features]).astype(np.float32)),
... name='weight')
... self.matmul = ops.MatMul()
...
... def construct(self, x):
... output = self.matmul(x, self.weight)
... return output
...
>>> size, in_features, out_features = 16, 16, 10
>>> #1scale_sense类型为Cell时
>>> net = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> optimizer = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> net_with_loss = nn.WithLossCell(net, loss)
>>> manager = nn.DynamicLossScaleUpdateCell(loss_scale_value=2**12, scale_factor=2, scale_window=1000)
>>> train_network = nn.TrainOneStepWithLossScaleCell(net_with_loss, optimizer, scale_sense=manager)
>>> input = Tensor(np.ones([out_features, in_features]), mindspore.float32)
>>> labels = Tensor(np.ones([out_features,]), mindspore.float32)
>>> output = train_network(input, labels)
>>>
>>>> #2当scale_sense类型为Tensor时
>>> net = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> optimizer = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> net_with_loss = nn.WithLossCell(net, loss)
>>> inputs = Tensor(np.ones([size, in_features]).astype(np.float32))
>>> label = Tensor(np.zeros([size, out_features]).astype(np.float32))
>>> scaling_sens = Tensor(np.full((1), np.finfo(np.float32).max), dtype=mstype.float32)
>>> train_network = nn.TrainOneStepWithLossScaleCell(net_with_loss, optimizer, scale_sense=scaling_sens)
>>> output = train_network(inputs, label)
- **loss** Tensor - shape为 :math:`()` 的Tensor。
- **overflow** Tensor- shape为 :math:`()` 的Tensor类型为bool。
- **loss scale** Tensor- shape为 :math:`()` 的Tensor。
get_overflow_status(status, compute_output)
**异常:**
- **TypeError**`scale_sense` 既不是Cell也不是Tensor。
- **ValueError**`scale_sense` 的shape既不是(1,)也不是()。
**支持平台:**
``Ascend`` ``GPU``
**样例:**
>>> import numpy as np
>>> from mindspore import Tensor, Parameter, nn, ops
>>> from mindspore import dtype as mstype
>>>
>>> class Net(nn.Cell):
... def __init__(self, in_features, out_features):
... super(Net, self).__init__()
... self.weight = Parameter(Tensor(np.ones([in_features, out_features]).astype(np.float32)),
... name='weight')
... self.matmul = ops.MatMul()
...
... def construct(self, x):
... output = self.matmul(x, self.weight)
... return output
...
>>> size, in_features, out_features = 16, 16, 10
>>> #1scale_sense类型为Cell时
>>> net = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> optimizer = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> net_with_loss = nn.WithLossCell(net, loss)
>>> manager = nn.DynamicLossScaleUpdateCell(loss_scale_value=2**12, scale_factor=2, scale_window=1000)
>>> train_network = nn.TrainOneStepWithLossScaleCell(net_with_loss, optimizer, scale_sense=manager)
>>> input = Tensor(np.ones([out_features, in_features]), mindspore.float32)
>>> labels = Tensor(np.ones([out_features,]), mindspore.float32)
>>> output = train_network(input, labels)
>>>
>>>> #2当scale_sense类型为Tensor时
>>> net = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> optimizer = nn.Momentum(net.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> net_with_loss = nn.WithLossCell(net, loss)
>>> inputs = Tensor(np.ones([size, in_features]).astype(np.float32))
>>> label = Tensor(np.zeros([size, out_features]).astype(np.float32))
>>> scaling_sens = Tensor(np.full((1), np.finfo(np.float32).max), dtype=mstype.float32)
>>> train_network = nn.TrainOneStepWithLossScaleCell(net_with_loss, optimizer, scale_sense=scaling_sens)
>>> output = train_network(inputs, label)
.. py:method:: get_overflow_status(status, compute_output)
获取浮点溢出状态。
溢出检测的目标过程执行完成后,获取溢出结果。继承该类自定义训练网络时,可复用该接口。
输入:
- **status** (object) - 用于检测溢出的状态实例。
- **compute_output** - 对特定计算过程进行溢出检测时,将`compute_output`设置为该计算过程的输出,以确保在执行计算之前获取了`status`。
**输入:**
输出:
bool是否发生溢出。
- **status** (object) - 用于检测溢出的状态实例。
- **compute_output** - 对特定计算过程进行溢出检测时,将 `compute_output` 设置为该计算过程的输出,以确保在执行计算之前获取了 `status`。
**输出:**
bool是否发生溢出。
process_loss_scale(overflow)
.. py:method:: process_loss_scale(overflow)
根据溢出状态计算梯度放大系数。继承该类自定义训练网络时,可复用该接口。
输入:
- **overflow** (bool) - 是否发生溢出。
**输入:**
输出:
bool溢出状态即输入。
**overflow** (bool) - 是否发生溢出。
**输出:**
bool溢出状态即输入。
set_sense_scale(sens)
.. py:method:: set_sense_scale(sens)
如果使用了Tensor类型的`scale_sense`,可调用此函数修改它的值。
输入:
- **sens** Tensor- 新的梯度放大系数其shape和类型需要与原始`scale_sense`相同。
**输入:**
start_overflow_check(pre_cond, compute_input)
**sens** Tensor- 新的梯度放大系数其shape和类型需要与原始 `scale_sense` 相同。
.. py:method:: start_overflow_check(pre_cond, compute_input)
启动浮点溢出检测。创建并清除溢出检测状态。
指定参数'pre_cond'和'compute_input',以确保在正确的时间清除溢出状态。
以当前接口为例我们需要在损失函数计算后进行清除状态在梯度计算过程中检测溢出。在这种情况下pre_cond应为损失函数的输出而compute_input应为梯度计算函数的输入。继承该类自定义训练网络时可复用该接口。
输入:
- **pre_cond** (Tensor) -启动溢出检测的先决条件。它决定溢出状态清除和先前处理的执行顺序。它确保函数'start_overflow'在执行完先决条件后清除状态。
- **compute_input** (object) - 后续运算的输入。需要对特定的计算过程进行溢出检测。将`compute_input`设置这一计算过程的输入,以确保在执行该计算之前清除了溢出状态。
指定参数 `pre_cond` 和 `compute_input` ,以确保在正确的时间清除溢出状态。以当前接口为例,我们需要在损失函数计算后进行清除状态,在梯度计算过程中检测溢出。在这种情况下,`pre_cond` 应为损失函数的输出,而 `compute_input` 应为梯度计算函数的输入。继承该类自定义训练网络时,可复用该接口。
**输入:**
输出:
Tuple[object, object]GPU后端的第一个值为False而其他后端的第一个值是NPUAllocFloatStatus的实例。该值用于在`get_overflow_status`期间检测溢出。
第二个值与`compute_input`的输入相同,用于控制执行序。
- **pre_cond** (Tensor) -启动溢出检测的先决条件。它决定溢出状态清除和先前处理的执行顺序。它确保函数 `start_overflow` 在执行完先决条件后清除状态。
- **compute_input** (object) - 后续运算的输入。需要对特定的计算过程进行溢出检测。将 `compute_input` 设置这一计算过程的输入,以确保在执行该计算之前清除了溢出状态。
**输出:**
**Tuple** [object, object]GPU后端的第一个值为False而其他后端的第一个值是NPUAllocFloatStatus的实例。该值用于在 `get_overflow_status` 期间检测溢出。第二个值与 `compute_input` 的输入相同,用于控制执行序。

View File

@ -30,8 +30,8 @@ mindspore.nn.WarmUpLR
**异常:**
- **TypeError** `learning_rate` 不是float。
- **TypeError** `warmup_steps` 不是int。
- **- **TypeError**** `learning_rate` 不是float。
- **- **TypeError**** `warmup_steps` 不是int。
- **ValueError** `warmup_steps` 小于1。
- **ValueError** `learning_rate` 小于或等于0。

View File

@ -1,29 +1,36 @@
Class mindspore.nn.WithEvalCell(network, loss_fn, add_cast_fp32=False)
mindspore.nn.WithEvalCell
=========================
.. py:class:: mindspore.nn.WithEvalCell(network, loss_fn, add_cast_fp32=False)
封装前向网络和损失函数,返回用于计算评估指标的损失函数值、前向输出和标签。
**参数:**
参数:
network (Cell):前向网络。
loss_fn (Cell):损失函数。
add_cast_fp32 (bool)是否将数据类型调整为float32。默认值False。
- **network** (Cell):前向网络。
- **loss_fn** (Cell):损失函数。
- **add_cast_fp32** (bool)是否将数据类型调整为float32。默认值False。
输入:
- **data** Tensor - shape为:math:`(N, \ldots)`的Tensor。
- **label** Tensor - shape为:math:`(N, \ldots)`的Tensor。
**输入:**
输出:
Tuple(Tensor)包括标量损失函数、shape为:math:`(N, \ldots)`的网络输出和shape为:math:`(N, \ldots)`的标签
- **data** Tensor - shape为 :math:`(N, \ldots)` 的Tensor。
- **label** Tensor - shape为 :math:`(N, \ldots)` 的Tensor
异常:
TypeError`add_cast_fp32`不是bool。
**输出:**
支持平台:
``Ascend`` ``GPU`` ``CPU``
Tuple(Tensor)包括标量损失函数、shape为 :math:`(N, \ldots)` 的网络输出和shape为 :math:`(N, \ldots)` 的标签。
示例:
>>> # 未包含损失函数的前向网络
>>> net = Net()
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits()
>>> eval_net = nn.WithEvalCell(net, loss_fn)
**异常:**
**TypeError** `add_cast_fp32` 不是bool。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> # 未包含损失函数的前向网络
>>> net = Net()
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits()
>>> eval_net = nn.WithEvalCell(net, loss_fn)

View File

@ -1,42 +1,53 @@
Class mindspore.nn.WithLossCell(backbone, loss_fn)
mindspore.nn.WithLossCell
=========================
.. py:class:: mindspore.nn.WithLossCell(backbone, loss_fn)
包含损失函数的Cell。
封装`backbone`和`loss_fn`。此Cell接受数据和标签作为输入并将返回损失函数作为计算结果。
封装 `backbone` `loss_fn` 。此Cell接受数据和标签作为输入并将返回损失函数作为计算结果。
参数:
backbone (Cell):要封装的目标网络。
loss_fn (Cell):用于计算损失函数。
**参数:**
输入:
- **data** Tensor - shape为:math:`(N, \ldots)`的Tensor。
- **label** Tensor - shape为:math:`(N, \ldots)`的Tensor。
- **backbone** (Cell):要封装的目标网络。
- **loss_fn** (Cell):用于计算损失函数。
输出:
Tensorloss值其shape通常为:math:`()`。
**输入:**
异常:
TypeError`data`或`label`的数据类型既不是float16也不是float32
- **data** Tensor - shape为 :math:`(N, \ldots)` 的Tensor。
- **label** Tensor - shape为 :math:`(N, \ldots)` 的Tensor
支持平台:
``Ascend`` ``GPU`` ``CPU``
**输出:**
示例:
>>> net = Net()
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False)
>>> net_with_criterion = nn.WithLossCell(net, loss_fn)
>>>
>>> batch_size = 2
>>> data = Tensor(np.ones([batch_size, 1, 32, 32]).astype(np.float32) * 0.01)
>>> label = Tensor(np.ones([batch_size, 10]).astype(np.float32))
>>>
>>> output_data = net_with_criterion(data, label)
Tensorloss值其shape通常为 :math:`()` 。
**异常:**
**TypeError**`data` 或 `label` 的数据类型既不是float16也不是float32。
**支持平台:**
``Ascend`` ``GPU`` ``CPU``
**样例:**
>>> net = Net()
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False)
>>> net_with_criterion = nn.WithLossCell(net, loss_fn)
>>>
>>> batch_size = 2
>>> data = Tensor(np.ones([batch_size, 1, 32, 32]).astype(np.float32) * 0.01)
>>> label = Tensor(np.ones([batch_size, 10]).astype(np.float32))
>>>
>>> output_data = net_with_criterion(data, label)
backbone_network
.. py:method:: backbone_network
:property:
获取骨干网络。
获取骨干网络。
返回:
Cell骨干网络。
**返回:**
Cell骨干网络。

View File

@ -1,4 +1,7 @@
mindspore.nn.cosine_decay_lr(min_lr, max_lr, total_step, step_per_epoch, decay_epoch)
mindspore.nn.cosine_decay_lr
==============================
.. py:class:: mindspore.nn.cosine_decay_lr(min_lr, max_lr, total_step, step_per_epoch, decay_epoch)
基于余弦衰减函数计算学习率。
@ -8,25 +11,28 @@ mindspore.nn.cosine_decay_lr(min_lr, max_lr, total_step, step_per_epoch, decay_e
decayed\_learning\_rate[i] = min\_lr + 0.5 * (max\_lr - min\_lr) *
(1 + cos(\frac{current\_epoch}{decay\_epoch}\pi))
其中:math:`current\_epoch=floor(\frac{i}{step\_per\_epoch})`。
其中 :math:`current\_epoch=floor(\frac{i}{step\_per\_epoch})`。
参数:
min_lr (float):学习率的最小值。
max_lr (float):学习率的最大值。
total_step (int)step总数。
step_per_epoch (int)每个epoch的step数。
decay_epoch (int):用于计算衰减学习率的值。
**参数:**
返回:
list[float]。列表大小为`total_step`。
- **min_lr** (float):学习率的最小值。
- **max_lr** (float):学习率的最大值。
- **total_step** (int)step总数。
- **step_per_epoch** (int)每个epoch的step数。
- **decay_epoch** (int):用于计算衰减学习率的值。
示例:
>>> min_lr = 0.01
>>> max_lr = 0.1
>>> total_step = 6
>>> step_per_epoch = 2
>>> decay_epoch = 2
>>> output = cosine_decay_lr(min_lr, max_lr, total_step, step_per_epoch, decay_epoch)
>>> print(output)
[0.1, 0.1, 0.05500000000000001, 0.05500000000000001, 0.01, 0.01]
**返回:**
list[float]。列表大小为`total_step`。
**样例:**
>>> min_lr = 0.01
>>> max_lr = 0.1
>>> total_step = 6
>>> step_per_epoch = 2
>>> decay_epoch = 2
>>> output = cosine_decay_lr(min_lr, max_lr, total_step, step_per_epoch, decay_epoch)
>>> print(output)
[0.1, 0.1, 0.05500000000000001, 0.05500000000000001, 0.01, 0.01]

View File

@ -1,4 +1,7 @@
mindspore.nn.exponential_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, is_stair=False)
mindspore.nn.exponential_decay_lr
=======================================
.. py:class:: mindspore.nn.exponential_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, is_stair=False)
基于指数衰减函数计算学习率。
@ -7,26 +10,29 @@ mindspore.nn.exponential_decay_lr(learning_rate, decay_rate, total_step, step_pe
.. math::
decayed\_learning\_rate[i] = learning\_rate * decay\_rate^{\frac{current\_epoch}{decay\_epoch}}
其中:math:`current\_epoch=floor(\frac{i}{step\_per\_epoch})`。
其中 :math:`current\_epoch=floor(\frac{i}{step\_per\_epoch})`。
参数:
learning_rate (float):学习率的初始值。
decay_rate (float):衰减率。
total_step (int)step总数。
step_per_epoch (int):每个 epoch的step数。
decay_epoch (int):用于计算衰减学习率的值。
is_stair (bool)如果为True则学习率每`decay_epoch`次衰减一次。默认值False。
**参数:**
返回:
list[float]。列表的大小为`total_step`。
- **learning_rate (float):学习率的初始值。
- **decay_rate (float):衰减率。
- **total_step (int)step总数。
- **step_per_epoch (int):每个 epoch的step数。
- **decay_epoch (int):用于计算衰减学习率的值。
- **is_stair (bool)如果为True则学习率每 `decay_epoch` 次衰减一次。默认值False。
示例:
>>> learning_rate = 0.1
>>> decay_rate = 0.9
>>> total_step = 6
>>> step_per_epoch = 2
>>> decay_epoch = 1
>>> output = exponential_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch)
>>> print(output)
[0.1, 0.1, 0.09000000000000001, 0.09000000000000001, 0.08100000000000002, 0.08100000000000002]
**返回:**
list[float]。列表的大小为`total_step`。
**样例:**
>>> learning_rate = 0.1
>>> decay_rate = 0.9
>>> total_step = 6
>>> step_per_epoch = 2
>>> decay_epoch = 1
>>> output = exponential_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch)
>>> print(output)
[0.1, 0.1, 0.09000000000000001, 0.09000000000000001, 0.08100000000000002, 0.08100000000000002]

View File

@ -1,4 +1,7 @@
mindspore.nn.inverse_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, is_stair=False)
mindspore.nn.inverse_decay_l
=============================
.. py:class:: mindspore.nn.inverse_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, is_stair=False)
基于逆时间衰减函数计算学习率。
@ -9,24 +12,27 @@ mindspore.nn.inverse_decay_lr(learning_rate, decay_rate, total_step, step_per_ep
其中,:math:`current\_epoch=floor(\frac{i}{step\_per\_epoch})`。
参数:
learning_rate (float):学习率的初始值。
decay_rate (float):衰减率。
total_step (int)step总数。
step_per_epoch (int)每个epoch的step数。
decay_epoch (int):用于计算衰减学习率的值。
is_stair (bool)如果为True则学习率每`decay_epoch`次衰减一次。默认值False。
**参数:**
返回:
list[float]。列表大小为`total_step`。
- **learning_rate** (float):学习率的初始值。
- **decay_rate** (float):衰减率。
- **total_step** (int)step总数。
- **step_per_epoch** (int)每个epoch的step数。
- **decay_epoch** (int):用于计算衰减学习率的值。
- **is_stair** (bool)如果为True则学习率每 `decay_epoch` 次衰减一次。默认值False。
示例:
>>> learning_rate = 0.1
>>> decay_rate = 0.5
>>> total_step = 6
>>> step_per_epoch = 1
>>> decay_epoch = 1
>>> output = inverse_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, True)
>>> print(output)
[0.1, 0.06666666666666667, 0.05, 0.04, 0.03333333333333333, 0.028571428571428574]
**返回:**
list[float]。列表大小为 `total_step` 。
**样例:**
>>> learning_rate = 0.1
>>> decay_rate = 0.5
>>> total_step = 6
>>> step_per_epoch = 1
>>> decay_epoch = 1
>>> output = inverse_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, True)
>>> print(output)
[0.1, 0.06666666666666667, 0.05, 0.04, 0.03333333333333333, 0.028571428571428574]

View File

@ -1,4 +1,7 @@
mindspore.nn.natural_exp_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, is_stair=False)
mindspore.nn.natural_exp_decay_lr
=================================
.. py:class:: mindspore.nn.natural_exp_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, is_stair=False)
基于自然指数衰减函数计算学习率。
@ -7,26 +10,29 @@ mindspore.nn.natural_exp_decay_lr(learning_rate, decay_rate, total_step, step_pe
.. math::
decayed\_learning\_rate[i] = learning\_rate * e^{-decay\_rate * current\_epoch}
其中:math:`current\_epoch=floor(\frac{i}{step\_per\_epoch})`。
其中 :math:`current\_epoch=floor(\frac{i}{step\_per\_epoch})`
参数:
learning_rate (float):学习率的初始值。
decay_rate (float):衰减率。
total_step (int)step总数。
step_per_epoch (int)每个epoch的step数。
decay_epoch (int):用于计算衰减学习率的值。
is_stair (bool)如果为True则学习率每`decay_epoch`次衰减一次。默认值False。
**参数:**
返回:
list[float]. `total_step`表示列表的大小。
- **learning_rate** (float):学习率的初始值。
- **decay_rate** (float):衰减率。
- **total_step** (int)step总数。
- **step_per_epoch** (int)每个epoch的step数。
- **decay_epoch** (int):用于计算衰减学习率的值。
- **is_stair** (bool)如果为True则学习率每 `decay_epoch` 次衰减一次。默认值False。
示例:
>>> learning_rate = 0.1
>>> decay_rate = 0.9
>>> total_step = 6
>>> step_per_epoch = 2
>>> decay_epoch = 2
>>> output = natural_exp_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, True)
>>> print(output)
[0.1, 0.1, 0.1, 0.1, 0.016529888822158657, 0.016529888822158657]
**返回:**
list[float]. `total_step`表示列表的大小。
**样例:**
>>> learning_rate = 0.1
>>> decay_rate = 0.9
>>> total_step = 6
>>> step_per_epoch = 2
>>> decay_epoch = 2
>>> output = natural_exp_decay_lr(learning_rate, decay_rate, total_step, step_per_epoch, decay_epoch, True)
>>> print(output)
[0.1, 0.1, 0.1, 0.1, 0.016529888822158657, 0.016529888822158657]

View File

@ -1,23 +1,29 @@
mindspore.nn.piecewise_constant_lr(milestone, learning_rates)
mindspore.nn.piecewise_constant_lr
====================================
.. py:class:: mindspore.nn.piecewise_constant_lr(milestone, learning_rates)
获取分段常量学习率。
通过给定的`milestone`和`learning_rates`计算学习率。设`milestone`的值为:math:`(M_1, M_2, ..., M_t, ..., M_N)``learning_rates`的值为:math:`(x_1, x_2, ..., x_t, ..., x_N)`。N是`milestone`的长度。
设`y`为输出学习率, 那么对于第i步计算y[i]的公式为:
通过给定的 `milestone` `learning_rates` 计算学习率。设 `milestone` 的值为 :math:`(M_1, M_2, ..., M_t, ..., M_N)` `learning_rates` 的值为 :math:`(x_1, x_2, ..., x_t, ..., x_N)` 。N是 `milestone` 的长度。
`y` 为输出学习率, 那么对于第i步计算y[i]的公式为:
.. math::
y[i] = x_t,\ for\ i \in [M_{t-1}, M_t)
参数:
milestone (Union[list[int], tuple[int]])milestone列表。此列表是一个单调递增的列表。类表中的元素必须大于0。
learning_rates (Union[list[float], tuple[float]]):学习率列表。
**参数:**
返回:
list[float]。列表的大小为:math:`M_N`
- **milestone** (Union[list[int], tuple[int]])milestone列表。此列表是一个单调递增的列表。类表中的元素必须大于0。
- **learning_rates** (Union[list[float], tuple[float]]):学习率列表
示例:
>>> milestone = [2, 5, 10]
>>> learning_rates = [0.1, 0.05, 0.01]
>>> output = piecewise_constant_lr(milestone, learning_rates)
>>> print(output)
[0.1, 0.1, 0.05, 0.05, 0.05, 0.01, 0.01, 0.01, 0.01, 0.01]
**返回:**
list[float]。列表的大小为 :math:`M_N`。
**样例:**
>>> milestone = [2, 5, 10]
>>> learning_rates = [0.1, 0.05, 0.01]
>>> output = piecewise_constant_lr(milestone, learning_rates)
>>> print(output)
[0.1, 0.1, 0.05, 0.05, 0.05, 0.01, 0.01, 0.01, 0.01, 0.01]

View File

@ -1,4 +1,7 @@
mindspore.nn.polynomial_decay_lr(learning_rate, end_learning_rate, total_step, step_per_epoch, decay_epoch, power, update_decay_epoch=False)
mindspore.nn.polynomial_decay_lr
====================================
.. py:class:: mindspore.nn.polynomial_decay_lr(learning_rate, end_learning_rate, total_step, step_per_epoch, decay_epoch, power, update_decay_epoch=False)
基于多项式衰减函数计算学习率。
@ -19,31 +22,34 @@ mindspore.nn.polynomial_decay_lr(learning_rate, end_learning_rate, total_step, s
.. math::
tmp\_decay\_epoch = decay\_epoch
如果`update_decay_epoch`为True则每个epoch更新`tmp_decay_epoch`的值。公式为:
如果 `update_decay_epoch` 为True则每个epoch更新 `tmp_decay_epoch` 的值。公式为:
.. math::
tmp\_decay\_epoch = decay\_epoch * ceil(current\_epoch / decay\_epoch)
参数:
learning_rate (float):学习率的初始值。
end_learning_rate (float):学习率的最终值。
total_step (int)step总数。
step_per_epoch (int)每个epoch的step数。
decay_epoch (int):用于计算衰减学习率的值。
power (float)用于计算衰减学习率的值。该参数必须大于0。
update_decay_epoch (bool)如果为True则更新`decay_epoch`。默认值False。
**参数:**
返回:
list[float]。列表的大小为`total_step`。
- **learning_rate** (float):学习率的初始值。
- **end_learning_rate** (float):学习率的最终值。
- **total_step** (int)step总数。
- **step_per_epoch** (int)每个epoch的step数。
- **decay_epoch** (int):用于计算衰减学习率的值。
- **power** (float)用于计算衰减学习率的值。该参数必须大于0。
- **update_decay_epoch** (bool)如果为True则更新 `decay_epoch` 。默认值False。
示例:
>>> learning_rate = 0.1
>>> end_learning_rate = 0.01
>>> total_step = 6
>>> step_per_epoch = 2
>>> decay_epoch = 2
>>> power = 0.5
>>> r = polynomial_decay_lr(learning_rate, end_learning_rate, total_step, step_per_epoch, decay_epoch, power)
>>> print(r)
[0.1, 0.1, 0.07363961030678928, 0.07363961030678928, 0.01, 0.01]
**返回:**
list[float]。列表的大小为 `total_step`。
**样例:**
>>> learning_rate = 0.1
>>> end_learning_rate = 0.01
>>> total_step = 6
>>> step_per_epoch = 2
>>> decay_epoch = 2
>>> power = 0.5
>>> r = polynomial_decay_lr(learning_rate, end_learning_rate, total_step, step_per_epoch, decay_epoch, power)
>>> print(r)
[0.1, 0.1, 0.07363961030678928, 0.07363961030678928, 0.01, 0.01]

View File

@ -1,4 +1,7 @@
mindspore.nn.warmup_lr(learning_rate, total_step, step_per_epoch, warmup_epoch)
mindspore.nn.warmup_lr
=======================
.. py:function:: mindspore.nn.warmup_lr(learning_rate, total_step, step_per_epoch, warmup_epoch)
预热学习率。
@ -7,23 +10,26 @@ mindspore.nn.warmup_lr(learning_rate, total_step, step_per_epoch, warmup_epoch)
.. math::
warmup\_learning\_rate[i] = learning\_rate * tmp\_epoch / warmup\_epoch
其中:math:`tmp\_epoch=min(current\_epoch, warmup\_epoch),\ current\_epoch=floor(\frac{i}{step\_per\_epoch})`
其中 :math:`tmp\_epoch=min(current\_epoch, warmup\_epoch),\ current\_epoch=floor(\frac{i}{step\_per\_epoch})`
参数:
learning_rate (float):学习率的初始值。
total_step (int)step总数。
step_per_epoch (int)每个epoch的step数。
warmup_epoch (int)预热学习率的epoch数。
**参数:**
返回:
list[float].`total_step`表示列表的大小。
- **learning_rate** (float):学习率的初始值。
- **total_step** (int)step总数。
- **step_per_epoch** (int)每个epoch的step数。
- **warmup_epoch** (int)预热学习率的epoch数。
示例:
>>> learning_rate = 0.1
>>> total_step = 6
>>> step_per_epoch = 2
>>> warmup_epoch = 2
>>> output = warmup_lr(learning_rate, total_step, step_per_epoch, warmup_epoch)
>>> print(output)
[0.0, 0.0, 0.05, 0.05, 0.1, 0.1]
**返回:**
list[float] - `total_step` 表示列表的大小。
**样例:**
>>> learning_rate = 0.1
>>> total_step = 6
>>> step_per_epoch = 2
>>> warmup_epoch = 2
>>> output = warmup_lr(learning_rate, total_step, step_per_epoch, warmup_epoch)
>>> print(output)
[0.0, 0.0, 0.05, 0.05, 0.1, 0.1]

View File

@ -5,289 +5,241 @@ mindspore.communication
.. py:class:: mindspore.communication.GlobalComm
全局通信信息。GlobalComm 是一个全局类。 成员包含BACKEND、WORLD_COMM_GROUP。
- BACKEND使用的通信库HCCL或者NCCL。
- GlobalComm全局通信域。
.. py:method:: mindspore.communication.init(backend_name=None)
初始化通信服务需要的分布式后端例如HCCL或NCCL服务。
.. note::
HCCL的全称是华为集合通信库Huawei Collective Communication LibraryNCCL的全称是英伟达集合通信库NVIDIA Collective Communication Library`init` 方法应该在 `set_context` 方法之后使用。
.. note::HCCL的全称是华为集合通信库Huawei Collective Communication LibraryNCCL的全称是英伟达集合通信库NVIDIA Collective Communication Library`init` 方法应该在 `set_context` 方法之后使用。
**参数:**
- **backend_name** (`str`) 后台服务的名称可选HCCL或NCCL。如果未设置则根据硬件平台类型device_target进行推断默认值为None。
**backend_name** (str) 后台服务的名称可选HCCL或NCCL。如果未设置则根据硬件平台类型device_target进行推断默认值为None。
**异常:**
- **TypeError** 在参数 `backend_name` 不是字符串时抛出。
- **TypeError** 在参数 `backend_name` 不是字符串时抛出。
- **RuntimeError** 在以下情况将抛出1硬件设备类型无效2后台服务无效3分布式计算初始化失败4未设置环境变量 `RANK_ID``MINDSPORE_HCCL_CONFIG_PATH` 的情况下初始化HCCL服务。
- **ValueError** 在环境变量 `RANK_ID` 设置成非数字时抛出。
- **RuntimeError** 在以下情况将抛出1硬件设备类型无效2后台服务无效3分布式计算初始化失败4未设置环境变量 `RANK_ID``MINDSPORE_HCCL_CONFIG_PATH` 的情况下初始化HCCL服务。
- **ValueError** 在环境变量 `RANK_ID` 设置成非数字时抛出。
**样例:**
.. code-block::
**样例:**
>>> from mindspore.context import set_context
>>> set_context(device_target="Ascend")
>>> init()
>>> from mindspore.context import set_context
>>> set_context(device_target="Ascend")
>>> init()
.. py:class:: mindspore.communication.release()
释放分布式资源,例如HCCLNCCL服务。
.. note::
`release` 方法应该在 `init` 方法之后使用。
.. note::`release` 方法应该在 `init` 方法之后使用。
**异常:**
- **RuntimeError** - 在释放分布式资源失败时抛出。
**RuntimeError** - 在释放分布式资源失败时抛出。
.. py:class:: mindspore.communication.get_rank(group=GlobalComm.WORLD_COMM_GROUP)
在指定通信组中获取当前的设备序号。
.. note::
`get_rank` 方法应该在 `init` 方法之后使用。
.. note::`get_rank` 方法应该在 `init` 方法之后使用。
**参数:**
- **group** (`str`) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组。
- **默认值** - WORLD_COMM_GROUP
**group** (str) - 通信组名称,通常由 `create_group` 方法创建否则将使用默认组。默认值WORLD_COMM_GROUP
**返回:**
int, 调用该方法的进程对应的组内序号。
int, 调用该方法的进程对应的组内序号。
**异常:**
- **TypeError** 在参数 `group` 不是字符串时抛出。
- **ValueError** 在后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用时抛出。
**TypeError** 在参数 `group` 不是字符串时抛出。
**ValueError** 在后台不可用时抛出。
**RuntimeError** HCCLNCCL服务不可用时抛出。
.. py:class:: mindspore.communication.get_group_size(group=GlobalComm.WORLD_COMM_GROUP)
获取指定通信组的设备总数。
.. note::
`get_group_size` 方法应该在 `init` 方法之后使用。
.. note:: `get_group_size` 方法应该在 `init` 方法之后使用。
**参数:**
- **group** (`str`) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组。
- **默认值** - WORLD_COMM_GROUP
**group** (str) - 通信组名称,通常由 `create_group` 方法创建否则将使用默认组。默认值WORLD_COMM_GROUP
**返回:**
int, 指定通信组的设备总数。
int, 指定通信组的设备总数。
**异常:**
- **TypeError** 在参数 `group` 不是字符串时抛出。
- **ValueError** 在后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用时抛出。
- **TypeError** 在参数 `group` 不是字符串时抛出。
- **ValueError** 在后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用时抛出。
.. py:class:: mindspore.communication.get_world_rank_from_group_rank(group, group_rank_id)
由指定通信组中的设备序号获取通信集群中的全局设备序号。
.. note::
1. GPU 版本的MindSpore不支持此方法
2. 参数 `group` 不能是 `hccl_world_group`
3. `get_world_rank_from_group_rank` 方法应该在 `init` 方法之后使用。
- GPU 版本的MindSpore不支持此方法
- 参数 `group` 不能是 `hccl_world_group`
- `get_world_rank_from_group_rank` 方法应该在 `init` 方法之后使用。
**参数:**
- **group** (`str`) - 传入的通信组名称,通常由 `create_group` 方法创建。
- **group_rank_id** (`int`) - 通信组内的设备序号
- **group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建。
- **group_rank_id** (int) - 通信组内的设备序号。
**返回:**
int, 通信集群中的全局设备序号。
int, 通信集群中的全局设备序号。
**异常:**
- **TypeError** 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。
- **ValueError** 在参数 `group``hccl_world_group` 或后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用以及使用GPU版本的MindSpore时抛出。
- **TypeError** 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。
- **ValueError** 在参数 `group``hccl_world_group` 或后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用以及使用GPU版本的MindSpore时抛出。
**样例:**
.. code-block::
>>> from mindspore.context import set_context
>>> set_context(device_target="Ascend")
>>> init()
>>> group = "0-4"
>>> rank_ids = [0,4]
>>> create_group(group, rank_ids)
>>> world_rank_id = get_world_rank_from_group_rank(group, 1)
>>> print("world_rank_id is: ", world_rank_id) # 全局设备序号为4
>>> from mindspore.context import set_context
>>> set_context(device_target="Ascend")
>>> init()
>>> group = "0-4"
>>> rank_ids = [0,4]
>>> create_group(group, rank_ids)
>>> world_rank_id = get_world_rank_from_group_rank(group, 1)
>>> print("world_rank_id is: ", world_rank_id) # 全局设备序号为4
.. py:class:: mindspore.communication.get_group_rank_from_world_rank(world_rank_id, group)
由通信集群中的全局设备序号获取指定用户通信组中的设备序号。
.. note::
1. GPU 版本的MindSpore不支持此方法
2. 参数 `group` 不能是 `hccl_world_group`
3. `get_group_rank_from_world_rank` 方法应该在 `init` 方法之后使用。
- GPU 版本的MindSpore不支持此方法
- 参数 `group` 不能是 `hccl_world_group`
- `get_group_rank_from_world_rank` 方法应该在 `init` 方法之后使用。
**参数:**
- **world_rank_id** (`int`) - 通信集群内的全局设备序号。
- **group** (`str`) - 传入的通信组名称,通常由 `create_group` 方法创建。
- **world_rank_id** (`int`) - 通信集群内的全局设备序号。
- **group** (`str`) - 传入的通信组名称,通常由 `create_group` 方法创建。
**返回:**
int, 当前用户通信组中的设备序号。
int, 当前用户通信组中的设备序号。
**异常:**
- **TypeError** 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。
- **ValueError** 在参数 `group``hccl_world_group` 或后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用以及使用GPU版本的MindSpore时抛出。
- **TypeError** 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。
- **ValueError** 在参数 `group``hccl_world_group` 或后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用以及使用GPU版本的MindSpore时抛出。
**样例:**
.. code-block::
>>> from mindspore.context import set_context
>>> set_context(device_target="Ascend")
>>> init()
>>> group = "0-4"
>>> rank_ids = [0,4]
>>> create_group(group, rank_ids)
>>> group_rank_id = get_group_rank_from_world_rank(4, group)
>>> print("group_rank_id is: ", group_rank_id) # 组内设备序号是1
>>> from mindspore.context import set_context
>>> set_context(device_target="Ascend")
>>> init()
>>> group = "0-4"
>>> rank_ids = [0,4]
>>> create_group(group, rank_ids)
>>> group_rank_id = get_group_rank_from_world_rank(4, group)
>>> print("group_rank_id is: ", group_rank_id) # 组内设备序号是1
.. py:class:: mindspore.communication.create_group(group, rank_ids)
创建用户通信组。
.. note::
1. GPU 版本的MindSpore不支持此方法
2. 列表rank_ids的长度应大于1
3. 列表rank_ids内不能有重复数据
4. `create_group` 方法应该在 `init` 方法之后使用。
- GPU 版本的MindSpore不支持此方法
- 列表rank_ids的长度应大于1
- 列表rank_ids内不能有重复数据
- `create_group` 方法应该在 `init` 方法之后使用。
**参数:**
- **group** (`str`) - 将被创建的通信组名称。
- **rank_ids** (`list`) - 设备编号列表。
- **group** (str) - 将被创建的通信组名称。
- **rank_ids** (list) - 设备编号列表。
**异常:**
- **TypeError** 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。
- **ValueError** 在列表rank_ids的长度小于1或列表rank_ids内有重复数据以及后台无效时抛出。
- **RuntimeError** HCCLNCCL 服务不可用以及使用GPU版本的MindSpore时抛出。
- **TypeError** 在参数 `group_rank_id` 不是数字或参数 `group` 不是字符串时抛出。
- **ValueError** 在列表rank_ids的长度小于1或列表rank_ids内有重复数据以及后台无效时抛出。
- **RuntimeError** HCCLNCCL 服务不可用以及使用GPU版本的MindSpore时抛出。
**样例:**
.. code-block::
>>> from mindspore.context import set_context
>>> set_context(device_target="Ascend")
>>> init()
>>> group = "0-8"
>>> rank_ids = [0,8]
>>> create_group(group, rank_ids)
>>> from mindspore.context import set_context
>>> set_context(device_target="Ascend")
>>> init()
>>> group = "0-8"
>>> rank_ids = [0,8]
>>> create_group(group, rank_ids)
.. py:class:: mindspore.communication.get_local_rank(group=GlobalComm.WORLD_COMM_GROUP)
获取指定通信组中当前设备的本地设备序号。
.. note::
1. GPU 版本的MindSpore不支持此方法
2. `get_local_rank` 方法应该在 `init` 方法之后使用。
- GPU 版本的MindSpore不支持此方法
- `get_local_rank` 方法应该在 `init` 方法之后使用。
**参数:**
- **group** (`str`) - 通信组名称,通常由 `create_group` 方法创建,否则将使用默认组名称。
- **默认值** - WORLD_COMM_GROUP
**group** (`str`) - 通信组名称,通常由 `create_group` 方法创建否则将使用默认组名称。默认值WORLD_COMM_GROUP
**返回:**
int, 调用该方法的进程对应的通信组内本地设备序号。
int, 调用该方法的进程对应的通信组内本地设备序号。
**异常:**
- **TypeError** 在参数 `group` 不是字符串时抛出。
- **ValueError** 在后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用时抛出。
- **TypeError** 在参数 `group` 不是字符串时抛出。
- **ValueError** 在后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用时抛出。
.. py:class:: mindspore.communication.get_local_rank_size(group=GlobalComm.WORLD_COMM_GROUP)
获取指定通信组的本地设备总数。
.. note::
1. GPU 版本的MindSpore不支持此方法
2. `get_local_rank_size` 方法应该在 `init` 方法之后使用。
- GPU 版本的MindSpore不支持此方法
- `get_local_rank_size` 方法应该在 `init` 方法之后使用。
**参数:**
- **group** (`str`) - 传入的通信组名称,通常由 `create_group` 方法创建或默认使用WORLD_COMM_GROUP
**group** (str) - 传入的通信组名称,通常由 `create_group` 方法创建或默认使用WORLD_COMM_GROUP
**返回:**
int, 调用该方法的进程对应的通信组设备总数。
int, 调用该方法的进程对应的通信组设备总数。
**异常:**
- **TypeError** 在参数 `group` 不是字符串时抛出。
- **ValueError** 在后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用时抛出。
- **TypeError** 在参数 `group` 不是字符串时抛出。
- **ValueError** 在后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用时抛出。
.. py:class:: mindspore.communication.destroy_group(group)
销毁用户通信组。
.. note::
1. GPU 版本的MindSpore不支持此方法
2. 参数 `group` 不能是 `hccl_world_group`
3. `destroy_group` 方法应该在 `init` 方法之后使用。
- GPU 版本的MindSpore不支持此方法
- 参数 `group` 不能是 `hccl_world_group`
- `destroy_group` 方法应该在 `init` 方法之后使用。
**参数:**
- **group** (`str`) - 将被销毁的通信组,通常由 `create_group` 方法创建。
**group** (str) - 将被销毁的通信组,通常由 `create_group` 方法创建。
**异常:**
- **TypeError** 在参数 `group` 不是字符串时抛出。
- **ValueError** 在参数 `group``hccl_world_group` 或后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用时抛出。
- **TypeError** 在参数 `group` 不是字符串时抛出。
- **ValueError** 在参数 `group``hccl_world_group` 或后台不可用时抛出。
- **RuntimeError** HCCLNCCL服务不可用时抛出。

View File

@ -1,125 +0,0 @@
get_auto_parallel_context(attr_key)
根据key获取自动并行的配置。
参数:
attr_key (str)配置的key。
返回:
根据key返回配置的值。
异常:
ValueError输入key不在自动并行的配置列表中。
Class mindspore.context.ParallelMode
并行模式。
有五种并行模式分别是STAND_ALONE、DATA_PARALLEL、HYBRID_PARALLEL、SEMI_AUTO_PARALLEL和AUTO_PARALLEL。
默认值STAND_ALONE。
- STAND_ALONE单卡模式。
- DATA_PARALLEL数据并行模式。
- HYBRID_PARALLEL手动实现数据并行和模型并行。
- SEMI_AUTO_PARALLEL半自动并行模式。
- AUTO_PARALLEL自动并行模式。
MODE_LIST表示所有支持的并行模式的列表。
reset_auto_parallel_context()
重置自动并行的配置为默认值。
- device_num1。
- global_rank0。
- gradients_meanFalse。
- gradient_fp32_syncTrue。
- parallel_mode'stand_alone'。
- auto_parallel_search_mode'dynamic_programming'。
- parameter_broadcastFalse。
- strategy_ckpt_load_file''。
- strategy_ckpt_save_file''。
- full_batchFalse。
- enable_parallel_optimizerFalse。
- pipeline_stages1。
set_auto_parallel_context(**kwargs)
配置自动并行仅在Ascend和GPU上有效。
应在init之前配置自动并行。
注:
配置时,必须输入配置的名称。
如果某个程序具有不同并行模式下的任务则需要再为下一个任务设置新的并行模式之前调用reset_auto_parallel_context()接口来重置配置。
若要设置或更改并行模式必须在创建任何Initializer之前调用接口否则在编译网络时可能会出现RuntimeError。
某些配置适用于特定的并行模式,有关详细信息,请参见下表:
=========================== ===========================
Common AUTO_PARALLEL
=========================== ===========================
device_num gradient_fp32_sync
global_rank loss_repeated_mean
gradients_mean auto_parallel_search_mode
parallel_mode strategy_ckpt_load_file
all_reduce_fusion_config strategy_ckpt_save_file
enable_parallel_optimizer dataset_strategy
\ pipeline_stages
\ grad_accumulation_step
=========================== ===========================
参数:
device_num (int)表示可用设备的编号必须在【1,4096】范围中。默认值1。
global_rank (int)表示全局秩的ID必须在【0,4095】范围中。默认值0。
gradients_mean (bool)表示是否在梯度的allreduce后执行平均算子。
stand_alone不支持gradients_mean。默认值False。
gradient_fp32_sync (bool)在FP32中运行gradients的allreduce。stand_alone、data_parallel和hybrid_parallel不支持gradient_fp32_sync。默认值True。
parallel_mode (str)有五种并行模式分别是stand_alone、data_parallel、hybrid_parallel、semi_auto_parallel和auto_parallel。默认值stand_alone。
- stand_alone单卡模式。
- data_parallel数据并行模式。
- hybrid_parallel手动实现数据并行和模型并行。
- semi_auto_parallel半自动并行模式。
- auto_parallel自动并行模式。
auto_parallel_search_mode (str)表示有两种策略搜索模式分别是recursive_programming和dynamic_programming。默认值dynamic_programming。
- recursive_programming表示双递归搜索模式。
- dynamic_programming表示动态规划搜索模式。
parameter_broadcast (bool)表示在训练前是否广播参数。在训练之前为了使所有设备的网络初始化参数值相同请将设备0上的参数广播到其他设备。不同并行模式下的参数广播不同。
在data_parallel模式下除layerwise_parallel属性为True的参数外所有参数都会被广播。在Hybrid_parallel、semi_auto_parallel和auto_parallel模式下分段参数不参与广播。默认值False。
strategy_ckpt_load_file (str)表示用于加载并行策略checkpoint的路径。默认值''。
strategy_ckpt_save_file (str)表示用于保存并行策略checkpoint的路径。默认值''。
full_batch (bool)如果在auto_parallel模式下加载整个batch数据集则此参数应设置为True。默认值False。目前不建议使用该接口建议使用dataset_strategy来替换它。
dataset_strategy (Union[str, tuple])表示数据集分片策略。默认值data_parallel。
dataset_strategy="data_parallel"等于full_batch=Falsedataset_strategy="full_batch"等于full_batch=True。对于通过模型并列策略加载到网络的数据集如ds_stra ((1, 8)、(1, 8))需要使用set_auto_parallel_context(dataset_strategy=ds_stra)。
enable_parallel_optimizer (bool)这是一个开发中的特性它可以为数据并行训练对权重更新计算进行分片以节省时间和内存。目前自动和半自动并行模式支持Ascend和GPU中的所有优化器。数据并行模式仅支持Ascend中的`Lamb`和`AdamWeightDecay`。默认值False。
all_reduce_fusion_config (list)通过参数索引设置allreduce 融合策略。仅支持ReduceOp.SUM和HCCL_WORLD_GROUP/NCCL_WORLD_GROUP。没有默认值。如果不设置则关闭算子融合。
pipeline_stages (int)设置pipeline并行的阶段信息。这表明了设备如何单独分布在pipeline上。所有的设备将被划分为pipeline_stags个阶段。
目前这只能在启动semi_auto_parallel模式的情况下使用。默认值1。
grad_accumulation_step (int)在自动和半自动并行模式下设置梯度的累积step。
其值应为正整数。默认值1。
异常:
ValueError输入key不是自动并行上下文中的属性。
样例:
>>> context.set_auto_parallel_context(device_num=8)
>>> context.set_auto_parallel_context(global_rank=0)
>>> context.set_auto_parallel_context(gradients_mean=True)
>>> context.set_auto_parallel_context(gradient_fp32_sync=False)
>>> context.set_auto_parallel_context(parallel_mode="auto_parallel")
>>> context.set_auto_parallel_context(auto_parallel_search_mode="dynamic_programming")
>>> context.set_auto_parallel_context(parameter_broadcast=False)
>>> context.set_auto_parallel_context(strategy_ckpt_load_file="./strategy_stage1.ckpt")
>>> context.set_auto_parallel_context(strategy_ckpt_save_file="./strategy_stage1.ckpt")
>>> context.set_auto_parallel_context(dataset_strategy=((1, 8), (1, 8)))
>>> context.set_auto_parallel_context(enable_parallel_optimizer=False)
>>> context.set_auto_parallel_context(all_reduce_fusion_config=[8, 160])
>>> context.set_auto_parallel_context(pipeline_stages=2)

View File

@ -7,16 +7,16 @@ mindspore.load_distributed_checkpoint
**参数:**
- **network** (Cell):分布式预测网络。
- **checkpoint_filenames** (list[str])checkpoint文件的名称按rank id 顺序排列。
- **predict_strategy** (dict)predict时参数的切分策略。
- **train_strategy_filename** (str)训练策略proto文件名。默认值None。
- **strict_load** (bool)表示是否严格加载参数到网络。如果值为False则当checkpoint文件中参数名称的后缀与网络中的参数相同时加载参数到网络。当类型不一致时对相同类型的参数进行类型转换如从float32到float16。默认值False。
- **dec_key** (Union[None, bytes])用于解密的字节类型key。如果value为None则不需要解密。默认值None。
- **dec_mode** (str)仅当dec_key不设为None时该参数有效。指定了解密模式目前支持AES-GCM和AES-CBC。默认值AES-GCM。
- **network** (Cell):分布式预测网络。
- **checkpoint_filenames** (list[str])checkpoint文件的名称按rank id 顺序排列。
- **predict_strategy** (dict):预测时参数的切分策略。
- **train_strategy_filename** (str)训练策略proto文件名。默认值None。
- **strict_load** (bool)表示是否严格加载参数到网络。如果值为False则当checkpoint文件中参数名称的后缀与网络中的参数相同时加载参数到网络。当类型不一致时对相同类型的参数进行类型转换如从float32到float16。默认值False。
- **dec_key** (Union[None, bytes])用于解密的字节类型key。如果value为None则不需要解密。默认值None。
- **dec_mode** (str)仅当dec_key不设为None时该参数有效。指定了解密模式目前支持AES-GCM和AES-CBC。默认值AES-GCM。
**异常:**
- **TypeError** 输入类型不符合要求。
- **ValueError** 无法加载checkpoint文件到网络。
- **TypeError** 输入类型不符合要求。
- **ValueError** 无法加载checkpoint文件到网络。

View File

@ -1,99 +1,105 @@
Class mindspore.nn.DistributedGradReducer(parameters, mean=True, degree=None, fusion_type=1, group='hccl_world_group')
mindspore.nn.DistributedGradReducer
===================================
.. py:class:: mindspore.nn.DistributedGradReducer(parameters, mean=True, degree=None, fusion_type=1, group='hccl_world_group')
分布式优化器。
对反向梯度进行AllReduce运算。
参数:
parameters (list):需要更新的参数。
mean (bool)当mean为True时对AllReduce之后的梯度求均值。默认值False。
degree (int)平均系数通常等于设备编号。默认值None。
fusion_type (int)AllReduce算子的融合类型。默认值1。
**参数:**
异常:
ValueError如果degree不是int或小于0。
- **parameters** (list):需要更新的参数。
- **mean** (bool)当mean为True时对AllReduce之后的梯度求均值。默认值False。
- **degree** (int)平均系数通常等于设备编号。默认值None。
- **fusion_type** (int)AllReduce算子的融合类型。默认值1。
支持平台:
``Ascend`` ``GPU``
**异常:**
示例:
>>> #此示例应与多个进程一起运行。
>>> #请参考Mindpore.cn上的“教程>分布式训练”。
>>> import numpy as np
>>> from mindspore.communication import init
>>> from mindspore import ops
>>> from mindspore import context
>>> from mindspore.context import ParallelMode
>>> from mindspore import Parameter, Tensor
>>> from mindspore import nn
>>>
>>> context.set_context(mode=context.GRAPH_MODE)
>>> init()
>>> context.reset_auto_parallel_context()
>>> context.set_auto_parallel_context(parallel_mode=ParallelMode.DATA_PARALLEL)
>>>
>>> class TrainingWrapper(nn.Cell):
... def __init__(self, network, optimizer, sens=1.0):
... super(TrainingWrapper, self).__init__(auto_prefix=False)
... self.network = network
... self.network.add_flags(defer_inline=True)
... self.weights = optimizer.parameters
... self.optimizer = optimizer
... self.grad = ops.GradOperation(get_by_list=True, sens_param=True)
... self.sens = sens
... self.reducer_flag = False
... self.grad_reducer = None
... self.parallel_mode = context.get_auto_parallel_context("parallel_mode")
... if self.parallel_mode in [ParallelMode.DATA_PARALLEL, ParallelMode.HYBRID_PARALLEL]:
... self.reducer_flag = True
... if self.reducer_flag:
... mean = context.get_auto_parallel_context("gradients_mean")
... degree = context.get_auto_parallel_context("device_num")
... self.grad_reducer = nn.DistributedGradReducer(optimizer.parameters, mean, degree)
...
... def construct(self, *args):
... weights = self.weights
... loss = self.network(*args)
... sens = ops.Fill()(ops.DType()(loss), ops.Shape()(loss), self.sens)
... grads = self.grad(self.network, weights)(*args, sens)
... if self.reducer_flag:
... # apply grad reducer on grads
... grads = self.grad_reducer(grads)
... return ops.Depend(loss, self.optimizer(grads))
>>>
>>> class Net(nn.Cell):
... def __init__(self, in_features, out_features)
... super(Net, self).__init__()
... self.weight = Parameter(Tensor(np.ones([in_features, out_features]).astype(np.float32)),
... name='weight')
... self.matmul = ops.MatMul()
...
... def construct(self, x)
... output = self.matmul(x, self.weight)
... return output
>>>
>>> size, in_features, out_features = 16, 16, 10
>>> network = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> net_with_loss = nn.WithLossCell(network, loss)
>>> optimizer = nn.Momentum(net_with_loss.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> train_cell = TrainingWrapper(net_with_loss, optimizer)
>>> inputs = Tensor(np.ones([size, in_features]).astype(np.float32))
>>> label = Tensor(np.zeros([size, out_features]).astype(np.float32))
>>> grads = train_cell(inputs, label)
>>> print(grads)
256.0
**ValueError**如果degree不是int或小于0。
construct(grads)
**支持平台:**
某些情况下梯度的数据精度可以与float16和float32混合。因此AllReduce的结果不可靠。
要解决这个问题必须在AllReduce之前强制转换为float32并在操作之后再强制转换为float32。
``Ascend`` ``GPU``
参数:
grads (Union[Tensor, tuple[Tensor]])操作前的梯度tensor或tuple。
**样例:**
返回:
new_grads (Union[Tensor, tuple[Tensor]])操作后的梯度tensor或tuple。
>>> #此示例应与多个进程一起运行。
>>> #请参考Mindpore.cn上的“教程>分布式训练”。
>>> import numpy as np
>>> from mindspore.communication import init
>>> from mindspore import ops
>>> from mindspore import context
>>> from mindspore.context import ParallelMode
>>> from mindspore import Parameter, Tensor
>>> from mindspore import nn
>>>
>>> context.set_context(mode=context.GRAPH_MODE)
>>> init()
>>> context.reset_auto_parallel_context()
>>> context.set_auto_parallel_context(parallel_mode=ParallelMode.DATA_PARALLEL)
>>>
>>> class TrainingWrapper(nn.Cell):
... def __init__(self, network, optimizer, sens=1.0):
... super(TrainingWrapper, self).__init__(auto_prefix=False)
... self.network = network
... self.network.add_flags(defer_inline=True)
... self.weights = optimizer.parameters
... self.optimizer = optimizer
... self.grad = ops.GradOperation(get_by_list=True, sens_param=True)
... self.sens = sens
... self.reducer_flag = False
... self.grad_reducer = None
... self.parallel_mode = context.get_auto_parallel_context("parallel_mode")
... if self.parallel_mode in [ParallelMode.DATA_PARALLEL, ParallelMode.HYBRID_PARALLEL]:
... self.reducer_flag = True
... if self.reducer_flag:
... mean = context.get_auto_parallel_context("gradients_mean")
... degree = context.get_auto_parallel_context("device_num")
... self.grad_reducer = nn.DistributedGradReducer(optimizer.parameters, mean, degree)
...
... def construct(self, *args):
... weights = self.weights
... loss = self.network(*args)
... sens = ops.Fill()(ops.DType()(loss), ops.Shape()(loss), self.sens)
... grads = self.grad(self.network, weights)(*args, sens)
... if self.reducer_flag:
... # apply grad reducer on grads
... grads = self.grad_reducer(grads)
... return ops.Depend(loss, self.optimizer(grads))
>>>
>>> class Net(nn.Cell):
... def __init__(self, in_features, out_features)
... super(Net, self).__init__()
... self.weight = Parameter(Tensor(np.ones([in_features, out_features]).astype(np.float32)),
... name='weight')
... self.matmul = ops.MatMul()
...
... def construct(self, x)
... output = self.matmul(x, self.weight)
... return output
>>>
>>> size, in_features, out_features = 16, 16, 10
>>> network = Net(in_features, out_features)
>>> loss = nn.MSELoss()
>>> net_with_loss = nn.WithLossCell(network, loss)
>>> optimizer = nn.Momentum(net_with_loss.trainable_params(), learning_rate=0.1, momentum=0.9)
>>> train_cell = TrainingWrapper(net_with_loss, optimizer)
>>> inputs = Tensor(np.ones([size, in_features]).astype(np.float32))
>>> label = Tensor(np.zeros([size, out_features]).astype(np.float32))
>>> grads = train_cell(inputs, label)
>>> print(grads)
256.0
.. py:method:: construct(grads)
某些情况下梯度的数据精度可以与float16和float32混合。因此AllReduce的结果不可靠。要解决这个问题必须在AllReduce之前强制转换为float32并在操作之后再强制转换为float32。
**参数:**
**grads** (Union[Tensor, tuple[Tensor]])操作前的梯度Tensor或tuple。
**返回:**
**new_grads** (Union[Tensor, tuple[Tensor]])操作后的梯度Tensor或tuple。

View File

@ -1,15 +1,17 @@
Class mindspore.nn.PipelineCell(network, micro_size)
.. py:class:: mindspore.nn.PipelineCell(network, micro_size)
将MiniBatch切分成更细粒度的MicroBatch用于流水线并行的训练中。
注:
.. note::
micro_size必须大于或等于流水线stage的个数。
参数:
network (Cell):要包裹的目标网络。
micro_size (int)MicroBatch大小。
** 参数:**
示例:
>>> net = Net()
>>> net = PipelineCell(net, 4)
- **network** (Cell):要修饰的目标网络。
- **micro_size** (int)MicroBatch大小。
**示例:**
>>> net = Net()
>>> net = PipelineCell(net, 4)