Pytorch: Почему model.cuda() является методом класса, а не свойством?

Созданный на 15 апр. 2017  ·  3Комментарии  ·  Источник: pytorch/pytorch

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 является разумным.

Все 3 Комментарий

cuda сделан методом, поскольку это относительно дорогая операция, которая включает копирование данных из ЦП в ГП. В то время как grad и data — дешевые операции ( O(1) ), которые извлекают только ссылки на соответствующий тензор. Я думаю, что использование метода cuda является разумным.

.cuda() копирует данные CPU в GPU. Вероятно, вы не хотите постоянно хранить данные в графическом процессоре. Это означает, что вы сохраняете данные в графическом процессоре только тогда, когда это действительно необходимо.

как упоминалось в обоих приведенных выше комментариях, создание свойства .cuda неуместно. Мы возвращаем новые объекты при обращении к .cuda() , и происходит многое.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги