![](/img/trans.png)
[英]how to populate torch::jit::IValue with C++ array without using torch::from_blob
[英]How to populate torch::tensor with c++ array?
這是非常基本的:我通常使用 Eigen3 進行數學運算,但需要使用 libtorch 進行網絡前向傳遞。 現在我想用我的 Eigen3(或純 C++ array
)中的數據填充torch::tensor
,但沒有for
循環。 我怎樣才能做到這一點?
這是帶有循環的解決方案:
Eigen::Matrix<double, N, 1> inputEigen; // previously initialized
torch::Tensor inputTorch = torch::ones({1, N}); // my torch tensor for the forward pass
for (int i = 0; i < N; i++) {
inputTorch[0][i] = inputEigen[i]; // batch size == 1
}
std::vector<torch::jit::IValue> inputs;
inputs.push_back(inputTorch);
at::Tensor output = net.forward(inputs).toTensor();
這目前工作正常,但N
可能會變得非常大,我只是在尋找一種方法來直接使用以前使用的 C++ array
設置我的torch::tensor
的基礎數據
Libtorch 提供了torch::from_blob
function(參見這個線程),它要求一個指向某些數據的void*
指針和一個IntArrayRef
來了解解釋數據的維度。 所以這會給出類似的東西:
Eigen::Matrix<double, N, 1> inputEigen; // previously initialized;
torch::Tensor inputElement = torch::from_blob(inputEigen.data(), {1,N}).clone(); // dims
請注意您可能需要或不需要的clone
調用,具體取決於您的用例:基本上from_blob
不獲取基礎數據的所有權,因此如果沒有克隆,它將與您的特征矩陣保持共享(並可能被銷毀)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.