我正在浏览 神经传导火炬教程,对使用 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
来自 文件
Keep _ graph (bool,可选)-如果为 False,则用于计算的图 毕业生将被释放。请注意,在几乎所有的情况下设置此 选择真是不需要,往往可以在一个工作周围的很多 默认值为 create _ graph。
因此,通过设置 retain_graph= True
,我们不会在向后传递时释放分配给图的内存。保留这些记忆的好处是什么,我们为什么需要它们?