Pytorch: ¿Por qué model.cuda() es un método de clase en lugar de una propiedad?

Creado en 15 abr. 2017  ·  3Comentarios  ·  Fuente: 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

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

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 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.

Todos 3 comentarios

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones