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
Si .data
y .grad
son atributos de clase, entonces .cuda()
se puede mantener como propiedad para que uno haga b = a.cuda
. Estoy haciendo una sugerencia pensando que aumentaría la consistencia de la API, ya que .cuda()
, .data
y .grad
son torch.Tensor
por lo que cuda() se puede cambiar a una propiedad . Al hacer esto, se puede acceder al modelo que reside en la GPU mediante model.cuda
cuda
se convierte en un método ya que es una operación relativamente costosa, que implica copiar datos de la CPU a la GPU. Mientras que grad
y data
son operaciones baratas ( O(1)
), que solo recuperan referencias al Tensor correspondiente. Creo que hacer cuda
un método es razonable.
.cuda() copia los datos de la CPU a la GPU. Probablemente no desee mantener los datos en la GPU todo el tiempo. Eso significa que solo almacena datos en la GPU cuando es realmente necesario.
como se menciona en los dos comentarios anteriores, hacer que .cuda
sea una propiedad es inapropiado. Devolvemos nuevos objetos cuando hacemos referencia a .cuda()
y suceden muchas cosas.
Comentario más útil
cuda
se convierte en un método ya que es una operación relativamente costosa, que implica copiar datos de la CPU a la GPU. Mientras quegrad
ydata
son operaciones baratas (O(1)
), que solo recuperan referencias al Tensor correspondiente. Creo que hacercuda
un método es razonable.