import torch
from torch.autograd import Variable
a = Variable(torch.Tensor([1, 2]))
if torch.cuda.is_available():
b = a.cuda()
b_data = b.data
b_grad = b.grad
b_grad_data = b.grad.data
Если .data
и .grad
являются атрибутами класса, то .cuda()
можно сохранить как свойство, чтобы сделать b = a.cuda
. Я делаю предложение, думая, что это повысит согласованность API, поскольку .cuda()
, .data
и .grad
являются torch.Tensor
, поэтому cuda() можно изменить на свойство . Сделав это, резидентная модель графического процессора может быть доступна model.cuda
cuda
сделан методом, поскольку это относительно дорогая операция, которая включает копирование данных из ЦП в ГП. В то время как grad
и data
— дешевые операции ( O(1)
), которые извлекают только ссылки на соответствующий тензор. Я думаю, что использование метода cuda
является разумным.
.cuda() копирует данные CPU в GPU. Вероятно, вы не хотите постоянно хранить данные в графическом процессоре. Это означает, что вы сохраняете данные в графическом процессоре только тогда, когда это действительно необходимо.
как упоминалось в обоих приведенных выше комментариях, создание свойства .cuda
неуместно. Мы возвращаем новые объекты при обращении к .cuda()
, и происходит многое.
Самый полезный комментарий
cuda
сделан методом, поскольку это относительно дорогая операция, которая включает копирование данных из ЦП в ГП. В то время какgrad
иdata
— дешевые операции (O(1)
), которые извлекают только ссылки на соответствующий тензор. Я думаю, что использование методаcuda
является разумным.