.Data по-прежнему полезен в pytorch?

Я новичок в pytorch. Я читал много кода pytorch, который сильно использует тензорный член .data. Но ищу .data в официальном документе и в гугле, мало нахожу. Я предполагаю, что .data содержит данные в тензоре, но я не знаю, когда они нам нужны, а когда нет?


person Maybe    schedule 08.08.2018    source источник


Ответы (2)


.data был атрибутом Variable (объект, представляющий Tensor с отслеживанием истории, например, для автоматического обновления), а не Tensor. Фактически, .data давал доступ к Tensor, лежащему в основе Variable.

Однако, поскольку PyTorch версии 0.4.0, Variable и Tensor были объединены (в обновленную структуру Tensor), .data исчез вместе с предыдущим объектом Variable (ну, Variable все еще существует для обратной совместимости, но не рекомендуется).


Абзац из примечания к выпуску для версии 0.4.0 (я рекомендую прочитать весь раздел о _16 _ / _ 17_ обновлений):

А как насчет .data?

.data был основным способом получить базовый Tensor от Variable. После этого слияния вызов y = x.data по-прежнему имеет аналогичную семантику. Таким образом, y будет Tensor, который использует те же данные с x, не связан с историей вычислений x и имеет requires_grad=False.

Однако .data в некоторых случаях может быть небезопасным. Любые изменения на x.data не будут отслеживаться autograd, и вычисленные градиенты будут неверными, если x потребуется в обратном проходе. Более безопасная альтернатива - использовать x.detach(), который также возвращает Tensor, который делится данными с requires_grad=False, но об изменениях на месте будет сообщать autograd, если x требуется в обратном направлении.

person benjaminplanche    schedule 08.08.2018

Помимо ответа @benjaminplanche, я бы использовал его для изменения значений параметров вручную.

Например, у меня есть такая модель:

model = nn.Sequential(nn.Linear(10, 1))

и по какой-то причине я хотел бы вручную обновить значения его параметров. Тогда я могу:

for param in model.parameters():
    param.data = 10 * param.data  # multiply the parameter values by 10.

Обратите внимание: если мы удалим .data за param, значения параметров не будут обновлены.

Такое использование можно найти в BYOL (Bootstrap your own latent) и эта веб-страница Github для реализации BYOL pytorch.

person Dane Lee    schedule 27.05.2021