Метод clone
Метод clone создает новый тензор, который является полной копией исходного.
При этом выделяется новая память, и новый тензор получает собственную историю вычислений
(градиенты), если исходный тензор требует их вычисления.
Метод не принимает параметров и возвращает новый тензор с теми же данными,
типом и устройством, что и у исходного.
Синтаксис
t.clone()
Пример
Давайте создадим тензор и его копию с помощью метода clone:
import torch
t = torch.tensor([1, 2, 3, 4, 5])
res = t.clone()
print(res)
Результат выполнения кода:
tensor([1, 2, 3, 4, 5])
Пример
Важно понимать, что изменения в копии не влияют на исходный тензор. Давайте изменим копию и проверим исходный тензор:
import torch
t = torch.tensor([1, 2, 3, 4, 5])
res = t.clone()
res[0] = 100
print(t)
print(res)
Результат выполнения кода:
tensor([1, 2, 3, 4, 5])
tensor([100, 2, 3, 4, 5])
Как видно, исходный тензор остался без изменений, а копия была изменена.
Пример
Метод clone также сохраняет информацию о градиентах.
Если исходный тензор требует вычисления градиентов, то копия будет наследовать это свойство:
import torch
t = torch.tensor([1., 2., 3.], requires_grad=True)
res = t.clone()
print(t.requires_grad)
print(res.requires_grad)
Результат выполнения кода:
True
True
Пример
В отличие от метода detach, который создает тензор без истории градиентов,
метод clone сохраняет историю вычислений.
Это позволяет использовать копию в обратном распространении:
import torch
t = torch.tensor([1., 2., 3.], requires_grad=True)
res = t.clone()
loss = (res ** 2).sum()
loss.backward()
print(t.grad)
Результат выполнения кода:
tensor([2., 4., 6.])
Градиенты были вычислены для исходного тензора через копию.
Смотрите также
-
метод
detach,
который создает тензор без истории градиентов -
метод
copy_,
который копирует данные из другого тензора без выделения новой памяти -
метод
to,
который изменяет тип или устройство тензора -
метод
contiguous,
который возвращает смежный тензор в памяти