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
Wenn .data
und .grad
Klassenattribute sind, dann kann .cuda()
als Eigenschaft behalten werden, damit man b = a.cuda
machen kann. Ich mache einen Vorschlag und denke, dass dies die API-Konsistenz erhöhen würde, da .cuda()
, .data
und .grad
torch.Tensor
sind, sodass cuda() in eine Eigenschaft geändert werden kann . Auf diese Weise kann über model.cuda
das GPU-residente Modell zugegriffen werden
cuda
wird zu einer Methode, da es sich um eine relativ teure Operation handelt, bei der Daten von der CPU auf die GPU kopiert werden. Während grad
und data
billige Operationen sind ( O(1)
), die nur Verweise auf den entsprechenden Tensor abrufen. Ich denke, es ist vernünftig, cuda
zu einer Methode zu machen.
.cuda() kopiert CPU-Daten auf die GPU. Wahrscheinlich möchten Sie die Daten nicht die ganze Zeit in der GPU behalten. Das bedeutet, dass Sie nur dann Daten in der GPU speichern, wenn es wirklich notwendig ist.
Wie in den beiden obigen Kommentaren erwähnt, ist es unangemessen, .cuda
zu einer Eigenschaft zu machen. Wir geben neue Objekte zurück, wenn auf .cuda()
verwiesen wird, und es passiert viel.
Hilfreichster Kommentar
cuda
wird zu einer Methode, da es sich um eine relativ teure Operation handelt, bei der Daten von der CPU auf die GPU kopiert werden. Währendgrad
unddata
billige Operationen sind (O(1)
), die nur Verweise auf den entsprechenden Tensor abrufen. Ich denke, es ist vernünftig,cuda
zu einer Methode zu machen.