Что и зачем класс Variable PyTorch?
Читая неплохую статью о PyTorch обнаружил такое:
x = Variable(torch.ones(2, 2) * 2, requires_grad=True)
В статье не говорилось, но без предваряющего кода:
import torch
from torch.autograd import Variable
Оно не работало. Я не понял зачем этот класс нужен и в чем его отличие от Tensor. Вот что говорит help():
help(Variable)
Help on class Variable in module torch.autograd.variable:
class Variable(torch._C._LegacyVariableBase)
| # mypy doesn't understand torch._six.with_metaclass
|
| Method resolution order:
| Variable
| torch._C._LegacyVariableBase
| builtins.object
|
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
|
| ----------------------------------------------------------------------
| Static methods inherited from torch._C._LegacyVariableBase:
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
Ну легче не стало...
Вот код с использованием Variable:
import torch
from torch.autograd import Variable
x = Variable(torch.ones(2, 2) * 2, requires_grad=True)
z = 2 * (x * x) + 5 * x
z.backward(torch.ones(2, 2))
print(x.grad)
tensor([[13., 13.],
[13., 13.]])
Ответы (2 шт):
Variable это надстройка над Tensor, которая позволяет подсчитывать градиенты для обратного распространения ошибки.
Из указанной в вопросе ссылки:
Автоматическое дифференцирование в PyTorch
В библиотеках глубокого обучения есть механизмы вычисления градиента ошибки и обратного распространения ошибки через вычислительный граф. Этот механизм, называемый автоградиентом в PyTorch, легко доступен и интуитивно понятен. Переменный класс — главный компонент автоградиентной системы в PyTorch. Переменный класс обертывает тензор и позволяет автоматически вычислять градиент на тензоре при вызове функции
.backward(). Объект содержит данные из тензора, градиент тензора (единожды посчитанный по отношению к некоторому другому значению, потеря) и содержит также ссылку на любую функцию, созданную переменной (если это функция созданная пользователем, ссылка будет пустой).
Очевидно кто-то перевел Variable как Переменный класс. ;)
P.S. здесь можно найти ответы на этот вопрос на английском
P.P.S. лучше стараться читать туториалы в оригинале, тогда не будет возникать "проблем перевода", как выше.
Перейдя по ссылке, можно узнать, что Variable API is deprecated! То есть теперь тензора с (requires_grad=True) обладают магией прежних Variable ))
Грубо говоря - Variable устарели ввиду оснащения обычных torch.Tensor всей мощью Variable. Однако код с его использованием по-прежнему работает.