簡體   English   中英

在不使用“from_blob(...)...”的情況下從 C/C++ 數組創建一個 torch::Tensor

[英]Create a torch::Tensor from C/C++ array without using "from_blob(...)..."

使用 Pytorch 的 C++ Pytorch前端

我想從 C++ double[]數組創建一個torch::Tensor 來自舊版 C/C++ API。 我在文檔和論壇中都找不到關於該主題的簡單文檔。

就像是:

double array[5] = {1, 2, 3, 4, 5};   // or double *array;
auto tharray = torch::Tensor(array, 5, torch::Device(torch::kCUDA));

我發現的唯一一件事是使用torch::from_blob但如果我想將它與 CUDA 一起使用,我將不得不clone()並使用to(device)

double array[] = { 1, 2, 3, 4, 5};. // or double *array;
auto options = torch::TensorOptions().dtype(torch::kFloat64);
torch::Tensor tharray = torch::from_blob(array, {5}, options);

有沒有更清潔的方法呢?

我通常使用:

torch::Tensor tharray = torch::tensor({1, 2, 3, 4, 5}, {torch::kFloat64});

我沒有更清潔的方法,但我會給你另一種方法。

double array[5] = {1, 2, 3, 4, 5};
auto tharray = torch::zeros(5,torch::kFloat64) //or use kF64
std::memcpy(tharray.data_ptr(),array,sizeof(double)*tharray.numel())

希望它有幫助。

kFloat64 KF64因為 Torch 中不存在KF64

您可以在此處閱讀有關張量創建的更多信息: https://pytorch.org/cppdocs/notes/tensor_creation.html

我不知道有任何方法可以在不使用from_blob的情況下從數組創建張量,但是您可以使用TensorOptions來控制有關張量的各種事情,包括其設備。

根據您的示例,您可以在 GPU 上創建張量,如下所示:

double array[] = { 1, 2, 3, 4, 5};
auto options = torch::TensorOptions().dtype(torch::kFloat64).device(torch::kCUDA, 1);
torch::Tensor tharray = torch::from_blob(array, {5}, options);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM