Pythorch数据加载器内存未释放

2024-10-01 07:47:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在google collaboratory上的pythorch上实现SRGAN,但是DataLoader的内存似乎被释放了,所以如果你改变epoch,内存就会出错。 如果你能告诉我怎样做才能释放每批内存,我将不胜感激。 这是代码的github链接 https://github.com/pacifinapacific/Hello-World/blob/master/Untitled0.ipynb

到了48岁,1号echoch出现了记忆错误, 如果将批处理大小设置为8的1/6,则在大约6 epoch时会出现错误。在

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

但是例如,即使在执行学习时发生错误,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)

Tags: 内存testselfimgdatasize错误transform
1条回答
网友
1楼 · 发布于 2024-10-01 07:47:27

Pythorch每次在模型中传播时都会生成一个计算图。此图通常保留到输出变量G_loss超出范围,例如循环中的新迭代开始时。在

但是,您将此损失附加到一个列表中。因此,python仍然知道这个变量,而图没有被释放。您可以使用^{}将变量从当前图形中分离出来(这比我之前提出的.clone()更好,因为它也会复制张量的数据)。在

作为一个小的边节点:在您的train()函数中,在for循环中返回{},而不是在它之后;因此您总是只使用第一批。在

相关问题 更多 >