Mindspore除了提供如下各类Sampler,也支持用户自定义Sampler进行自定义的采样操作,具体可以参考:自定义采样器
Mindspore会依据自定义Sampler中__iter__返回的索引值对样本进行采样。

在CPU + MindSpore1.1.1进行定义如下自定义Sampler:
在GeneratorDataset中使用自定义的Sampler,具体如下:
出现如下报错信息:
原因分析:
用户自定义的 IdentitySampler 虽然继承了父类 ds.sampler 但是在第16行的构造函数__init__中没有显式调用父类的构造函数,导致丢失父类中的 child_sampler 成员。
MindSpore中支持链式采样器,即多个采样器通过 child_sampler 串联起来形成一条链(chain)。
解决办法:
在自定义的 IdentitySampler 采样器中第17行 __init__ 中使用 super().__init__() 调用父类的构造函数。
Mindspore除了提供如下各类Sampler,也支持用户自定义Sampler进行自定义的采样操作,具体可以参考:自定义采样器
Mindspore会依据自定义Sampler中__iter__返回的索引值对样本进行采样。
在CPU + MindSpore1.1.1进行定义如下自定义Sampler:
在GeneratorDataset中使用自定义的Sampler,具体如下:
trainset = ds.GeneratorDataset(trainset_generator, ["color", "thermal","color_label", "thermal_label"], sampler=sampler).map( operations=transform_train, input_columns=["color", "thermal"] ) ...... model = Model(net, loss_fn=criterion1, optimizer=optimizer_P, metrics=None) model.train(1, trainset, callbacks=cb)出现如下报错信息:
Traceback (most recent call last): File "e:\PythonProject\DDAG_mindspore\train_ddag.py", line 284, in <module> model.train(1, trainset, callbacks=cb) File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\site-packages\mindspore\train\model.py", line 578, in train dataset_size = train_dataset.get_dataset_size() File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\site-packages\mindspore\dataset\engine\datasets.py", line 1455, in get_dataset_size runtime_getter = self._init_size_getter() File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\site-packages\mindspore\dataset\engine\datasets.py", line 1400, in _init_size_getter ir_tree, api_tree = self.create_ir_tree() File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\site-packages\mindspore\dataset\engine\datasets.py", line 157, in create_ir_tree dataset = copy.deepcopy(self) File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\copy.py", line 161, in deepcopy y = copier(memo) File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\site-packages\mindspore\dataset\engine\datasets.py", line 2367, in __deepcopy__ new_op.children = copy.deepcopy(self.children, memodict) y = copier(x, memo) File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\copy.py", line 215, in _deepcopy_list append(deepcopy(a, memo)) File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\copy.py", line 161, in deepcopy y = copier(memo) File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\site-packages\mindspore\dataset\engine\datasets.py", line 3832, in __deepcopy__ sampler_instance = new_op.sampler.create() File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\site-packages\mindspore\dataset\engine\samplers.py", line 90, in create c_child_sampler = self.create_child() File "D:\ProgramData\Anaconda3\envs\mindspore_cpu\lib\site-packages\mindspore\dataset\engine\samplers.py", line 102, in create_child if self.child_sampler is not None: AttributeError: 'IdentitySampler' object has no attribute 'child_sampler'原因分析:
用户自定义的 IdentitySampler 虽然继承了父类 ds.sampler 但是在第16行的构造函数__init__中没有显式调用父类的构造函数,导致丢失父类中的 child_sampler 成员。
MindSpore中支持链式采样器,即多个采样器通过 child_sampler 串联起来形成一条链(chain)。
解决办法:
在自定义的 IdentitySampler 采样器中第17行 __init__ 中使用 super().__init__() 调用父类的构造函数。