我正在阅读神经传输 pytorch 教程retain_variable
,并且对(已弃用,现在称为)的使用感到困惑retain_graph
。代码示例显示:
class ContentLoss(nn.Module):
def __init__(self, target, weight):
super(ContentLoss, self).__init__()
self.target = target.detach() * weight
self.weight = weight
self.criterion = nn.MSELoss()
def forward(self, input):
self.loss = self.criterion(input * self.weight, self.target)
self.output = input
return self.output
def backward(self, retain_variables=True):
#Why is retain_variables True??
self.loss.backward(retain_variables=retain_variables)
return self.loss
从文档
retain_graph (bool, optional) -- 如果为 False,用于计算 grad 的图将被释放。请注意,几乎在所有情况下都不需要将此选项设置为 True,并且通常可以以更有效的方式解决。默认为 create_graph 的值。
因此,通过设置retain_graph= True
,我们不会释放为向后传递的图形分配的内存。保留这个内存有什么好处,我们为什么需要它?