tensor.detach()
создает тензор, который разделяет хранилище с тензором, который не требует градации.Он отделяет вывод от вычислительного графа.Таким образом, градиент не будет распространяться вдоль этой переменной.
Оболочка with torch.no_grad()
временно установит для всех флагов requires_grad
значение false.torch.no_grad
говорит, что никакая операция не должна строить график.
Разница в том, что одна ссылается только на данную переменную, для которой она вызывается.Другое влияет на все операции, выполняемые в операторе with
.Кроме того, torch.no_grad
будет использовать меньше памяти, поскольку с самого начала он знает, что градиенты не нужны, поэтому не нужно сохранять промежуточные результаты.
Узнайте больше о различиях между ними, а также примеры из здесь .