簡體   English   中英

如何使用 c++ 陣列填充 torch::tensor?

[英]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.

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