栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

使用mindspore创建数据集时报错

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用mindspore创建数据集时报错

自己创建一个数据集时报错

【操作步骤&问题现象】

我想要创建一个做超分辨率的数据集,这个数据集有两列,data和target,data为低分辨率图像,target为高分辨率图像。我的想法是先创建一个data和target图像一样的数据集,然后再对data中的图像进行缩小,但在创建数据集过程中报错

我的代码

from os import listdir
from os.path import join
import os
from PIL import Image
import random
import numpy as np
import mindspore.dataset as ds
import mindspore.dataset.vision.py_transforms as py_vision
import mindspore.dataset.transforms.py_transforms as py_transforms

def is_image_file(filename):
    return any(filename.endswith(extension) for extension in ['.png', '.jpg', '.jpeg', '.PNG', '.JPG', '.JPEG'])
    
def make_dataset(dir_path, max_dataset_size=float("inf")):
    """Return image list in dir."""
    images = []
    assert os.path.isdir(dir_path), '%s is not a valid directory' % dir_path

    for root, _, fnames in sorted(os.walk(dir_path)):
        for fname in fnames:
            if is_image_file(fname):
                path = os.path.join(root, fname)
                images.append(path)
    return images[:min(max_dataset_size, len(images))]
    

class MakeDataset:

    def __init__(self, dataset_dir, max_dataset_size=float("inf")):
       self.dir_A = os.path.join(dataset_dir,'data')
       self.dir_B = os.path.join(dataset_dir,'target')
       self.A_paths = sorted(make_dataset(self.dir_A, max_dataset_size))
       self.B_paths = sorted(make_dataset(self.dir_B, max_dataset_size))
       self.A_size = len(self.A_paths)
       self.B_size = len(self.B_paths)
    def __getitem__(self, index):
       A_path = self.A_paths[index % self.A_size]
       B_path = self.B_paths[index % self.B_size]
       A_img = np.array(Image.open(A_path).convert('RGB'))
       B_img = np.array(Image.open(B_path).convert('RGB'))
       print(A_img.shape)
       print(B_img.shape)
       return A_img,B_img
    def __len__(self):
       return self.A_size
        
dataset=MakeDataset(dataset_dir="/data/xjtu/wys/image/")
DS=ds.GeneratorDataset(dataset,column_names=["LR,HR"])
for data in DS.create_dict_iterator():
    print(data["LR"].shape)

报错信息

Traceback (most recent call last):
  File "/data/xjtu/wys/SRGAN/dataset.py", line 49, in 
    for data in DS.create_dict_iterator():
  File "/root/archiconda3/envs/xjtu/lib/python3.7/site-packages/mindspore/dataset/engine/iterators.py", line 263, in __next__
    data = self.get_next()
  File "/root/archiconda3/envs/xjtu/lib/python3.7/site-packages/mindspore/dataset/engine/iterators.py", line 344, in get_next
    return {k: Tensor(v.as_array()) for k, v in self.depipeline.GetNextAsMap().items()}
RuntimeError: Thread ID 281472224702944 Exception thrown from PyFunc. Invalid parameter, Generator should return same number of numpy arrays as specified in column names.
Line of code : 122
File         : /home/jenkins/agent-working-dir/workspace/Compile_Ascend_ARM_EulerOS/mindspore/mindspore/ccsrc/minddata/dataset/engine/datasetops/source/generator_op.cc
  1. 报错 Generator should return same number of numpy arrays as specified in column names.,描述的意思是返回的字段与指定列名个数不符。

  2. 我看代码里:class MakeDataset:  ->  def __getitem__(self, index):  ->  return A_img,B_img  返回的是两个字段。

  3. 但是 DS=ds.GeneratorDataset(dataset,column_names=["LR,HR"]) 中定义的column_names需要修改为 column_names=["LR", "HR"],表示为两个字段。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018703.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号