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
を実行できます。 .cuda()
、 .data
、 .grad
はtorch.Tensor
なので、cuda()をプロパティに変更できるため、APIの一貫性が向上することを考えて提案しています。 。 これにより、GPU常駐モデルにmodel.cuda
でアクセスできます。
cuda
は、CPUからGPUにデータをコピーする必要がある比較的コストのかかる操作であるため、メソッドになります。 grad
とdata
は安価な操作( O(1)
)であり、対応するTensorへの参照のみを取得します。 cuda
をメソッドにするのは合理的だと思います。
.cuda()はCPUデータをGPUにコピーします。 おそらく、データを常にGPUに保持したくないでしょう。 つまり、本当に必要な場合にのみデータをGPUに保存します。
上記の両方のコメントで述べたように、 .cuda
をプロパティにすることは不適切です。 .cuda()
を参照すると、新しいオブジェクトが返され、多くのことが発生しています。
最も参考になるコメント
cuda
は、CPUからGPUにデータをコピーする必要がある比較的コストのかかる操作であるため、メソッドになります。grad
とdata
は安価な操作(O(1)
)であり、対応するTensorへの参照のみを取得します。cuda
をメソッドにするのは合理的だと思います。