Python Pytorch数据加载程序内存未释放

Python Pytorch数据加载程序内存未释放,python,machine-learning,deep-learning,pytorch,Python,Machine Learning,Deep Learning,Pytorch,我想在google collaboratory上的pythorch上实现SRGAN,但DataLoader的内存似乎已释放,所以若您打开epoch,内存错误将发生。 如果您能告诉我如何做以释放每批内存,我们将不胜感激。 这是代码的github链接 它转到48,1 echoch出现内存错误, 如果将批处理大小设置为8的1/6,则会在大约6个历元处出现错误 我用以下代码阅读高分辨率和低分辨率图像。扩展图像文件夹 但例如,即使在执行学习时发生错误,GPU的内存也不会被释放 class DownSiz

我想在google collaboratory上的pythorch上实现SRGAN,但DataLoader的内存似乎已释放,所以若您打开epoch,内存错误将发生。 如果您能告诉我如何做以释放每批内存,我们将不胜感激。 这是代码的github链接

它转到48,1 echoch出现内存错误, 如果将批处理大小设置为8的1/6,则会在大约6个历元处出现错误

我用以下代码阅读高分辨率和低分辨率图像。扩展图像文件夹

但例如,即使在执行学习时发生错误,GPU的内存也不会被释放

class DownSizePairImageFolder(ImageFolder):
def __init__(self, root, transform=None, large_size=256, small_size=64, **kwds):
    super().__init__(root, transform=transform, **kwds)
    self.large_resizer = transforms.Scale(large_size)
    self.small_resizer = transforms.Scale(small_size)

def __getitem__(self, index):
    path, _ = self.imgs[index]
    img = self.loader(path)
    large_img = self.large_resizer(img)
    small_img = self.small_resizer(img)
    if self.transform is not None:
        large_img = self.transform(large_img)
        small_img = self.transform(small_img)
    return small_img, large_img


train_data = DownSizePairImageFolder('./lfw-deepfunneled/train',   transform=transforms.ToTensor())
test_data = DownSizePairImageFolder('./lfw-deepfunneled/test',    transform=transforms.ToTensor())
batch_size = 8
train_loader = DataLoader(train_data, batch_size, shuffle=True)
test_loader = DataLoader(test_data, batch_size, shuffle=False)

每次通过模型传播时,Pytorch都会构建一个计算图。该图通常会一直保留,直到输出变量
G_loss
超出范围,例如循环中的新迭代开始时

但是,您可以将此损失附加到列表中。因此,python仍然知道该变量,并且没有释放该图。您可以使用从当前图形中分离变量(这比我之前提出的
.clone()
更好,因为它还将复制张量的数据)

作为一个小节点:在
train()
函数中,在
for
循环中返回
D\u loss,G\u loss
,而不是在它之后;所以你总是只使用第一批