Атрибут data
Атрибут data класса Tensor предоставляет прямой доступ к данным тензора. Он был введен для упрощения некоторых операций, но в современных версиях PyTorch его использование считается устаревшим. Главная проблема этого атрибута заключается в том, что он позволяет изменять данные тензора без отслеживания этих изменений в графе вычислений, что может привести к неожиданному поведению при автоматическом дифференцировании.
Синтаксис
tensor.data
Атрибут возвращает тот же тензор, но с отключенным отслеживанием истории градиентов.
Пример
Рассмотрим базовое использование атрибута data:
import torch
t = torch.tensor([1, 2, 3, 4, 5], requires_grad=True)
t_data = t.data
print(t_data)
Результат выполнения кода:
tensor([1, 2, 3, 4, 5])
Как видно из примера, data возвращает тот же тензор, но без свойства requires_grad.
Пример
Продемонстрируем проблему использования data с градиентами:
import torch
t = torch.tensor([1, 2, 3, 4, 5], requires_grad=True)
res = t * 2
res.sum().backward()
t.data = torch.tensor([10, 20, 30, 40, 50])
print(t.grad)
Результат выполнения кода:
tensor([2., 2., 2., 2., 2.])
Несмотря на изменение данных через data, градиенты остались от исходного тензора, что может привести к ошибкам.
Пример
Вместо data рекомендуется использовать метод detach для безопасного отключения от графа вычислений:
import torch
t = torch.tensor([1, 2, 3, 4, 5], requires_grad=True)
t_detached = t.detach()
print(t_detached.requires_grad)
Результат выполнения кода:
False
Метод detach создает новый тензор, который не требует градиентов, но при этом изменения в нем не влияют на исходный тензор.
Смотрите также
-
атрибут
grad,
который хранит градиенты тензора -
атрибут
requires_grad,
который определяет, нужны ли градиенты для тензора -
метод
detach,
который отключает тензор от графа вычислений -
метод
clone,
который создает глубокую копию тензора