Image PyTorch自定义数据集数据加载器返回字符串(键)而不是张量

Image PyTorch自定义数据集数据加载器返回字符串(键)而不是张量,image,dataset,pytorch,enumerate,tensor,Image,Dataset,Pytorch,Enumerate,Tensor,我正在尝试加载我自己的数据集,我使用一个自定义的数据加载程序,它读取图像和标签,并将它们转换为PyTorch张量。但是,当实例化数据加载器时,它返回字符串x“image”和y“labels”,而不是读取时的实际值或张量(iter) print(self.train#u loader)#显示一个张量对象 tic=time.time() 以tqdm(总数=自身数量列车)作为pbar: 对于枚举(self.train_loader)中的i,(x,y):#x和y作为字符串返回(如果失败) 如果自行使用(

我正在尝试加载我自己的数据集,我使用一个自定义的
数据加载程序
,它读取图像和标签,并将它们转换为PyTorch张量。但是,当实例化
数据加载器时,它返回字符串x
“image”
和y
“labels”
,而不是读取时的实际值或张量(
iter

print(self.train#u loader)#显示一个张量对象
tic=time.time()
以tqdm(总数=自身数量列车)作为pbar:
对于枚举(self.train_loader)中的i,(x,y):#x和y作为字符串返回(如果失败)
如果自行使用(gpu):
x、 y=x.cuda(),y.cuda()
x、 y=变量(x),变量(y)
这就是
dataloader.py
的样子:

来自uuu未来uuu导入打印u功能,分区#ds
将numpy作为np导入
从utils导入plot\u图像
导入操作系统
作为pd#ds进口大熊猫
从skimage导入io,转换#ds
进口火炬
从torchvision导入数据集
从torch.utils.data导入数据集,数据加载器#ds
从torchvision导入转换
来自torchvision import utils#ds
从torch.utils.data.sampler导入SubstrandomSampler
类CDATA集(数据集):
def uuu init uuu(self,csv_文件,根目录,transform=None):
"""
Args:
csv_文件(字符串):带注释的csv文件的路径。
根目录(字符串):包含所有图像的目录。
转换(可调用,可选):要应用的可选转换
在样品上。
"""
self.frame=pd.read\u csv(csv\u文件)
self.root\u dir=root\u dir
self.transform=transform
定义(自我):
回程透镜(自镜框)
def uu getitem uu(self,idx):
img\u name=os.path.join(self.root\u dir,
self.frame.iloc[idx,0]+'.jpg')
image=io.imread(img\u名称)
#image=image.transpose((2,0,1))
labels=np.array(self.frame.iloc[idx,1])#.as_matrix()#ds
#landmarks=landmarks.astype('float')。重塑(-1,2)
#打印(图像.形状)
#打印(img_名称、标签)
示例={'image':图像,'labels':labels}
如果自我转换:
示例=自转换(示例)
回样
类传感器(对象):
“”“将样本中的nArray转换为张量。”“”
定义调用(自我,样本):
图像,标签=样本['image'],样本['labels']
#打印(图像)
#打印(标签)
#交换颜色轴,因为
#numpy图像:高x宽x高
#火炬图像:C X H X W
image=image.transpose((2,0,1))
#打印(图像.形状)
#打印((火炬从_numpy(图像))开始)
#打印((火炬从_numpy(标签)))
返回{'image':火炬。来自_numpy(图像),
“标签”:火炬。来自\u numpy(标签)}
def获取列车有效装载机(数据目录,
批量大小,
随机种子,
#有效_大小=0.1,#ds
#洗牌=正确,
show_sample=False,
工人数量=4,
引脚(内存=错误):
"""
装载和返回列车的实用功能,有效
MNIST数据集上的多进程迭代器。示例
可以选择显示9x9图像网格。
如果使用CUDA,num_workers应设置为1,pin_memory应设置为True。
Args
----
-data_dir:数据集的路径目录。
-批次大小:每批装载多少样品。
-随机种子:固定种子以获得重复性。
-#ds有效_大小:用于
验证集。应为[0,1]范围内的浮点。
在本文中,该数字设置为0.1。
-洗牌:是否洗牌训练/验证指标。
-显示样本:绘制数据集的9x9样本网格。
-num_workers:加载数据集时要使用的子进程数。
-pin_memory:是否将张量复制到CUDA固定内存中。将其设置为
如果使用GPU,则为True。
退换商品
-------
-训练加载程序:训练集迭代器。
-有效的\u加载程序:验证集迭代器。
"""
#ds
#错误\u msg=“[!]有效\u大小应在[0,1]范围内
#断言((有效大小>=0)和(有效大小从
main.py运行)

如果配置为列车:
数据装载机=获取列车有效装载机(
config.data\u dir,config.batch\u size,
config.random_seed,#config.valid_size,
#config.shuffle,
config.show_示例,**kwargs
)

您没有正确使用python的
枚举()
(x,y)
当前分配给批处理字典的两个键,即字符串
“image”
“labels”
。这应该可以解决您的问题:

对于i,枚举中的批处理(自列装载机):
x、 y=批次[“图像”],批次[“标签”]
# ...