mindspore.data_sink

mindspore.data_sink(fn, dataset, sink_size=1, jit_config=None, input_signature=None)[源代码]

对输入的函数封装生成一个新的函数。

说明

使用数据下沉时,数据集将自动循环,此时仅需考虑训练总步数(total_step)以及每次下沉的步数(sink_size),下面为按轮次(epochs)训练切换为数据下沉的计算公式:

total_step = epochs * dataset_size

train_sink_step = total_step / sink_size

在使用 mindspore.data_sink 进行函数变换后,需执行 train_sink_step 步进行训练。

参数:
  • fn (Function) - 将与数据集一起运行的函数。

  • dataset (Dataset) - 训练数据集迭代器。数据集可以由数据集生成器API在 mindspore.dataset 中生成,例如 mindspore.dataset.ImageFolderDataset

  • sink_size (int) - 控制每次下沉执行的数据量。 sink_size 必须为正整数。默认值:1。

  • jit_config (JitConfig) - 编译时所使用的JitConfig配置项,详细可参考 mindspore.JitConfig 。默认值:None,表示以PyNative模式运行。

  • input_signature (Union[Tensor, List or Tuple of Tensors]) - 用于表示输入参数的Tensor。Tensor的shape和dtype将作为函数的输入shape和dtype。默认值:None。

返回:

函数,该生成的函数会以数据下沉模式执行。

异常:
  • ValueError - 如果 sink_size 不是正整数。

支持平台:

Ascend GPU

样例:

>>> import numpy as np
>>> import mindspore as ms
>>> from mindspore import dataset as ds
>>>
>>> data = {"x": np.ones((1,), dtype=np.int32), "y": np.ones((1,), dtype=np.int32)}
>>> dataset = ds.NumpySlicesDataset(data=data)
>>>
>>> def func_net(x, y):
...     out = x + y
...     return out
>>>
>>> sink_process = ms.train.data_sink(func_net, dataset, sink_size=1)
>>> for _ in range(2):
...     out = sink_process()
...     print(out)
2
2