Pytorch: Por que model.cuda() é um método de classe em vez de propriedade?

Criado em 15 abr. 2017  ·  3Comentários  ·  Fonte: 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

Se .data e .grad são atributos de classe, então .cuda() pode ser mantido como propriedade para que se faça b = a.cuda . Estou sugerindo que isso aumentaria a consistência da API, pois .cuda() , .data e .grad são torch.Tensor para que cuda() possa ser alterado para uma propriedade . Ao fazer isso, o modelo residente da GPU pode ser acessado por model.cuda

Comentários muito úteis

cuda torna-se um método, pois é uma operação relativamente cara, que envolve a cópia de dados da CPU para a GPU. Enquanto grad e data são operações baratas ( O(1) ), que apenas recuperam referências ao tensor correspondente. Eu acho que fazer cuda um método é razoável.

Todos 3 comentários

cuda torna-se um método, pois é uma operação relativamente cara, que envolve a cópia de dados da CPU para a GPU. Enquanto grad e data são operações baratas ( O(1) ), que apenas recuperam referências ao tensor correspondente. Eu acho que fazer cuda um método é razoável.

.cuda() copia os dados da CPU para a GPU. Você provavelmente não quer manter os dados na GPU o tempo todo. Isso significa que você só armazena dados na GPU quando é realmente necessário.

como mencionado por ambos os comentários acima, tornar .cuda uma propriedade é inapropriado. Retornamos novos objetos ao referenciar .cuda() e muita coisa está acontecendo.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

bartvm picture bartvm  ·  3Comentários

soumith picture soumith  ·  3Comentários

mishraswapnil picture mishraswapnil  ·  3Comentários

kuangliu picture kuangliu  ·  3Comentários

dablyo picture dablyo  ·  3Comentários