Я перехожу к учебному пособию по переносу нейронной передачи, и я смущен об использовании 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
Из документации
preserve_graph (bool, optional) - Если False, граф, используемый для вычисления града, будет освобожден. Обратите внимание, что почти во всех случаях установка этого параметра в True не требуется и часто может работать более эффективно. Значение по умолчанию для create_graph.
Поэтому, установив retain_graph= True
, мы не освобождаем память, выделенную для графика на обратном проходе. В чем преимущество сохранения этой памяти, зачем она нам нужна?