Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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
Python 图像聚类-在GPU上分配内存_Python_Image_Classification_Pytorch - Fatal编程技术网

Python 图像聚类-在GPU上分配内存

Python 图像聚类-在GPU上分配内存,python,image,classification,pytorch,Python,Image,Classification,Pytorch,我已经由pretrained googlenet为图像分类编写了以下代码: gnet = models.googlenet(pretrained=True).cuda() transform = transforms.Compose([transforms.Resize(256), transforms.CenterCrop(32), transforms.ToTensor()]) images = {} resultDist = {} i = 1 for f in glob.iglob("

我已经由pretrained googlenet为图像分类编写了以下代码:

gnet = models.googlenet(pretrained=True).cuda()

transform = transforms.Compose([transforms.Resize(256), transforms.CenterCrop(32), transforms.ToTensor()])
images = {}
resultDist = {}
i = 1

for f in glob.iglob("/data/home/student/HW3/trainData/train2014/*"):
    print(i)
    i = i + 1
    image = Image.open(f)
    # transform, create batch and get gnet weights
    img_t = transform(image).cuda()
    batch_t = torch.unsqueeze(img_t, 0).cuda()
    try:
        gnet.eval()
        out = gnet(batch_t)
        resultDist[f[-10:-4]] = out
        del out
    except:
        print(img_t.shape)
    del img_t
    del batch_t
    image.close()
    torch.cuda.empty_cache()
    i = i + 1

torch.save(resultDist, '/data/home/student/HW3/googlenetOutput1.pkl')
我删除了GPU中所有可能的张量,但从我的数据集中删除了大约8000张图像后,GPU就满了。我发现问题出在:

resultDist[f[-10:-4]] = out

字典占用了大量空间,我无法删除它,因为我想将数据保存到pkl文件。

因为您没有使用torch使用
包装整个循环。no_grad():
语句,因为否则会创建计算图,间歇结果可能会存储在GPU上,以供以后应用backprop。这需要相当大的空间。此外,您可能还希望将
out.cpu()
保存下来,这样您的结果就不会留在GPU上了

...
with torch.no_grad():
    for f in glob.iglob("/data/home/student/HW3/trainData/train2014/*"):
        ...
            resultDist[f[-10:-4]] = out.cpu()
        ...

torch.save(resultDist, '/data/home/student/HW3/googlenetOutput1.pkl')

由于您没有使用torch执行backprop,因此请使用
包装整个循环。no_grad():
语句,否则会创建计算图,间歇结果可能会存储在GPU上,以便以后应用backprop。这需要相当大的空间。此外,您可能还希望将
out.cpu()
保存下来,这样您的结果就不会留在GPU上了

...
with torch.no_grad():
    for f in glob.iglob("/data/home/student/HW3/trainData/train2014/*"):
        ...
            resultDist[f[-10:-4]] = out.cpu()
        ...

torch.save(resultDist, '/data/home/student/HW3/googlenetOutput1.pkl')