Метод detach_
Метод detach_ класса Tensor открепляет тензор от графа вычислений,
превращая его в тензор, который не отслеживает историю операций.
В отличие от метода detach, который создаёт новый тензор,
метод detach_ изменяет исходный тензор на месте.
Это означает, что после вызова detach_ исходный тензор
перестаёт быть частью графа вычислений, и для него больше
нельзя вызвать backward.
Синтаксис
tensor.detach_()
Метод не принимает никаких параметров.
Пример
Давайте создадим тензор с историей вычислений и применим к нему метод detach_:
import torch
t = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
t = t * 2
print(t.requires_grad)
t.detach_()
print(t.requires_grad)
Результат выполнения кода:
True
False
Пример
Попробуем вызвать метод backward после применения detach_:
import torch
t = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
t = t * 2
t.detach_()
t.sum().backward()
Результат выполнения кода:
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
Как видим, возникает ошибка, так как тензор больше не отслеживает историю вычислений.
Пример
Сравним работу методов detach и detach_:
import torch
t1 = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
t1 = t1 * 2
t2 = t1.detach()
print(t1.requires_grad, t2.requires_grad)
t1.detach_()
print(t1.requires_grad, t2.requires_grad)
Результат выполнения кода:
True False
False False
Смотрите также
-
метод
detach,
который создаёт новый тензор без истории -
атрибут
requires_grad,
который указывает, отслеживает ли тензор операции -
атрибут
grad_fn,
который хранит функцию, создавшую тензор -
метод
requires_grad_,
который изменяет флагrequires_gradна месте