报错 AttributeError: ‘DictIterator’ object has no attribute ‘get_next’
这是 mindspore 数据类中缺少 “get_next”,这个方法,但是在 Fashion-MNIST图像识别 的官方代码中却使用的这个方法,大概率是 mindspore 在版本更替时修改了,官方的解决方法是这样的:
ds_test.create_dict_iterator()
create_dict_iterator()返回的是一个mindspore.dataset.engine.iterators.DictIterator的对像
这个对像是没有get_next()方法的。
如果想迭代数据集,可以直接用create_dict_iterator()
如下例子仅供参考:
import erhsh.ms as ems
import numpy as np
ds = ems.DatasetMocker().set_features({
"data": lambda: np.random.rand(1, 32, 32).astype(np.float32),
"label": lambda: np.random.randint(10, size=()).astype(np.int32)
}).set_data_len(1 * 32).set_batch_size(32).mock()
for x in ds.create_dict_iterator():
keys = x.keys()
for k in keys:
v = x.get(k)
print("{} {} -> {} {}".format("Item:", k, v.shape, v.dtype), flush=True)
break
我表示不能理解,我便进入 DictIterator 类的源码查看,发现其实有这个方法但是已经变成的私密方法:
当我把下划线删除后,问题和设想差不多,解决了,完美运行。但我不理解 mindspore 为什么 官方要把这个变成私密方法。