Pytorch: Mengapa model.cuda() merupakan metode kelas alih-alih properti?

Dibuat pada 15 Apr 2017  ·  3Komentar  ·  Sumber: 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

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

Komentar yang paling membantu

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.

Semua 3 komentar

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

NgPDat picture NgPDat  ·  3Komentar

bartvm picture bartvm  ·  3Komentar

kuangliu picture kuangliu  ·  3Komentar

szagoruyko picture szagoruyko  ·  3Komentar

rajarshd picture rajarshd  ·  3Komentar