Почему при копировании тензора рекомендуется использовать Tensor.clone (). Detach ()? - PullRequest
0 голосов
/ 20 июня 2020

В чем разница между копированием тензора с использованием torch.tensor(sourcetensor) и tensor.clone().detach()?

Как torch.tensor(srctsr) всегда копирует данные, tensor.clone().detach() тоже копирует данные.

x = torch.tensor([1, 2, 3])
y1 = x.clone().detach()
y2 = torch.tensor(x)
x[0] = 0
print(y1, y2) # both are same

Так что они кажутся точно такими же. Ниже в документации PyTorch приведено объяснение torch.tensor() и torch.clone().detach()

Следовательно, torch.tensor (x) эквивалентен x.clone (). Detach () и torch.tensor ( x, requires_grad = True) эквивалентен x.clone (). detach (). requires_grad_ (True). Рекомендуются эквиваленты с использованием clone () и detach ().

Итак, если они эквивалентны друг другу, почему .clone().detach() предпочтительнее другого?

1 Ответ

0 голосов
/ 20 июня 2020

Разница описана здесь . Я добавляю текст (из ссылки) для полноты картины.

  • torch.tensor () всегда копирует данные. Если у вас есть данные Tensor и вы хотите избежать копирования, используйте torch.Tensor.requires_grad_ () или torch.Tensor.detach ().

  • Если данные представляют собой тензор x, torch .tensor () считывает «данные» из того, что они передали, и создает конечную переменную. Следовательно, torch.tensor (x) эквивалентен x.clone (). Detach (), а torch.tensor (x, requires_grad = True) эквивалентен x.clone (). Detach (). Requires_grad_ (True). Рекомендуются эквиваленты с использованием clone () и detach ().

...