Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyTorch数据加载器“;“数据加载”;GPU内存概念_Pytorch_Gpu_Conv Neural Network - Fatal编程技术网

PyTorch数据加载器“;“数据加载”;GPU内存概念

PyTorch数据加载器“;“数据加载”;GPU内存概念,pytorch,gpu,conv-neural-network,Pytorch,Gpu,Conv Neural Network,我正在使用pytorch dataloader加载我的7.5 GB数据集。我使用批量大小100来加载数据。但是,我不确定是一次性加载整个数据集,还是批量加载数据集。即使批量大小低至1,也会导致CUDA内存不足错误。 我想知道默认情况下(如pytorch文档所示),dataloader是使用批处理加载还是一次性转储所有数据?如果它试图转储7.5 GB的数据,则此错误可能是由于数据集太大所致 作为参考,我附上相同的代码- 类图像(数据集): 定义初始化(self,setname): csv_path

我正在使用pytorch dataloader加载我的7.5 GB数据集。我使用批量大小100来加载数据。但是,我不确定是一次性加载整个数据集,还是批量加载数据集。即使批量大小低至1,也会导致CUDA内存不足错误。 我想知道默认情况下(如pytorch文档所示),dataloader是使用批处理加载还是一次性转储所有数据?如果它试图转储7.5 GB的数据,则此错误可能是由于数据集太大所致

作为参考,我附上相同的代码-

类图像(数据集):
定义初始化(self,setname):
csv_path=osp.join(根路径,setname+'.csv')
lines=[x.strip()表示x处于打开状态(csv_路径,'r')。readlines()][1:]
数据=[]
标签=[]
lb=-1
self.wnids=[]
对于l in行:
名称,wnid=l.split(',')
path=osp.join(根路径,'images',名称)
如果wnid不在self.wnid中:
self.wnid.append(wnid)
磅+=1
data.append(路径)
标签.附加(磅)
self.data=数据
self.label=标签
self.transform=transforms.Compose([
变换。调整大小(140),
变换。中心裁剪(140),
transforms.ToTensor(),
归一化(平均值=[0.485,0.456,0.406],
标准=[0.229,0.224,0.225])
])
定义(自我):
返回长度(自身数据)
定义获取项目(自我,i):
路径,label=self.data[i],self.label[i]
image=self.transform(image.open(path).convert('RGB'))
返回图像、标签
上面是数据加载器部分。在主脚本中,它的调用如下所示-

用于范围内的历元(1,args.max_历元+1):
lr_调度程序。步骤()
模型列车()
对于i,枚举中的批次(1列装载机):
数据,[[uu.cuda()表示批处理中的]
p=args.shot*args.train\u way
数据快照,数据查询=数据[:p],数据[p:]
proto=模型(数据快照)
label=torch.arange(args.train\u way)。重复(args.query)
label=label.type(torch.cuda.LongTensor)
logits=欧几里德度量(模型(数据查询),原型)
损失=F.交叉熵(逻辑、标签)
tl.add(loss.item())
optimizer.zero_grad()
loss.backward()
optimizer.step()

可能不是问题所在,但看起来您可以将
标签的创建移到循环之外,因为它不会以任何方式使用数据。