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
Jika .data
dan .grad
adalah atribut kelas, maka .cuda()
dapat disimpan sebagai properti sehingga seseorang melakukan b = a.cuda
. Saya membuat saran dengan berpikir bahwa itu akan meningkatkan konsistensi API, karena .cuda()
, .data
dan .grad
adalah torch.Tensor
sehingga cuda() dapat diubah menjadi properti . Dengan melakukan ini, model yang berada di GPU dapat diakses dengan model.cuda
cuda
dijadikan metode karena merupakan operasi yang relatif mahal, yang melibatkan penyalinan data dari CPU ke GPU. Sementara grad
dan data
adalah operasi murah ( O(1)
), yang hanya mengambil referensi ke Tensor yang sesuai. Saya pikir membuat cuda
sebuah metode masuk akal.
.cuda() menyalin data CPU ke GPU. Anda mungkin tidak ingin menyimpan data di GPU sepanjang waktu. Artinya, Anda hanya menyimpan data di GPU saat benar-benar diperlukan.
seperti yang disebutkan oleh kedua komentar di atas, menjadikan .cuda
sebagai properti tidak pantas. Kami mengembalikan objek baru saat mereferensikan .cuda()
dan banyak hal yang terjadi.
Komentar yang paling membantu
cuda
dijadikan metode karena merupakan operasi yang relatif mahal, yang melibatkan penyalinan data dari CPU ke GPU. Sementaragrad
dandata
adalah operasi murah (O(1)
), yang hanya mengambil referensi ke Tensor yang sesuai. Saya pikir membuatcuda
sebuah metode masuk akal.