我弄清楚哪里出了问题。我将解决方案发布为其他可能正在努力解决同一问题的人的答案。
基本上,PyTorch所做的是,每当我通过网络传递数据时,它都会创建一个计算图,并将计算结果存储在GPU内存中,以防万一我想在反向传播期间计算梯度。但是由于我只想执行前向传播,因此只需要
torch.no_grad()为模型指定即可。
因此,我代码中的for循环可以重写为:
for i, left in enumerate(dataloader): print(i) with torch.no_grad(): temp = model(left).view(-1, 1, 300, 300) right.append(temp.to('cpu')) del temp torch.cuda.empty_cache()
no_grad()为我的模型指定告诉PyTorch我不想存储任何以前的计算,从而释放了我的GPU空间。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)