Pytorch: model.cuda()がプロパティではなくクラスメソッドであるのはなぜですか?

作成日 2017年04月15日  ·  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を実行できます。 .cuda().data.gradtorch.Tensorなので、cuda()をプロパティに変更できるため、APIの一貫性が向上することを考えて提案しています。 。 これにより、GPU常駐モデルにmodel.cudaでアクセスできます。

最も参考になるコメント

cudaは、CPUからGPUにデータをコピーする必要がある比較的コストのかかる操作であるため、メソッドになります。 graddataは安価な操作( O(1) )であり、対応するTensorへの参照のみを取得します。 cudaをメソッドにするのは合理的だと思います。

全てのコメント3件

cudaは、CPUからGPUにデータをコピーする必要がある比較的コストのかかる操作であるため、メソッドになります。 graddataは安価な操作( O(1) )であり、対応するTensorへの参照のみを取得します。 cudaをメソッドにするのは合理的だと思います。

.cuda()はCPUデータをGPUにコピーします。 おそらく、データを常にGPUに保持したくないでしょう。 つまり、本当に必要な場合にのみデータをGPUに保存します。

上記の両方のコメントで述べたように、 .cudaをプロパティにすることは不適切です。 .cuda()を参照すると、新しいオブジェクトが返され、多くのことが発生しています。

このページは役に立ちましたか?
0 / 5 - 0 評価