【问题标题】:pic should be Tensor or ndarray. Got <class ‘NoneType’>pic 应该是张量或 ndarray。得到 <class ‘NoneType’>
【发布时间】:2021-11-04 18:42:31
【问题描述】:

我是 PyTorch 的初学者。我想使用 NYU 数据集训练网络,但出现错误。

当我使用 Dataloader 加载我的本地数据集时发生错误,我想打印数据以证明代码是正确的:

test=Mydataset(data_root,transforms,'image_train')
test2=DataLoader(test,batch_size=4,num_workers=0,shuffle=False)
for idx,data in enumerate(test2):
  print(idx)

这是带有Mydataset 定义的其余代码:

from __future__ import division,absolute_import,print_function
from PIL import Image
from torch.utils.data import DataLoader,Dataset
from torchvision.transforms import transforms
data_root='D:/AuxiliaryDocuments/NYU/'
transforms=transforms.Compose([transforms.ToPILImage(),
                           transforms.Resize(224,101),
                           transforms.ToTensor()])

filename_txt={'image_train':'image_train.txt','image_test':'image_test.txt',
          'depth_train':'depth_train.txt','depth_test':'depth_test.txt'}


class Mydataset(Dataset):
  def __init__(self,data_root,transformation,data_type):
    self.transform=transformation
    self.image_path_txt=filename_txt[data_type]
    self.sample_list=list()
    f=open(data_root+'/'+data_type+'/'+self.image_path_txt)
    lines=f.readlines()
    for line in lines:
        line=line.strip()
        line=line.replace(';','')
        self.sample_list.append(line)
    f.close()

def __getitem__(self, index):
    item=self.sample_list[index]
    img=Image.open(item)
    if self.transform is not None:
        img=self.transform(img)
    idx=index
    return idx,img

def __len__(self):
    return len(self.sample_list)

【问题讨论】:

    标签: python pytorch transform


    【解决方案1】:

    标题中的错误与图片中的错误不同(顺便说一句,您应该将其作为文本发布)。假设图像中的那个是正确的,您的问题如下:

    您的transformstransforms.ToPILImage() 开头,但该图像已被数据加载器作为 PIL 图像读取。如果您删除该转换,代码应该可以正常运行。

    # [...]
    transforms = transforms.Compose([
        transforms.ToPILImage(),  # <<< remove this
        transforms.Resize(224, 101),
        transforms.ToTensor()
    ])
    
    # [...]
    
    class Mydataset(Dataset):
        # [...]
        def __getitem__(self, index):
            item = self.sample_list[index]
            img = Image.open(item)  # <<< this image is already a PIL image
            if self.transform is not None:
                img = self.transform(img)
            idx = index
            return idx, img
        # [...]
    

    【讨论】:

    • 是的,当我意识到它时,我已经纠正了。
    猜你喜欢
    • 2021-07-06
    • 2021-06-24
    • 2020-11-05
    • 2019-11-06
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    相关资源
    最近更新 更多