在不使用“from_blob(...)...”的情况下从 C/C++ 数组创建一个 torch::Tensor

eus*_*iro 4 c++ pytorch libtorch

使用 C++ libtorch 前端 Pytorch

我想torch::Tensor从 C++double[]数组创建一个 。来自遗留的 C/C++ API。我在文档和论坛中都找不到关于该主题的简单文档。

就像是:

double array[5] = {1, 2, 3, 4, 5};
auto tharray = torch::Tensor(array, 5, torch::Device(torch::kCUDA));
Run Code Online (Sandbox Code Playgroud)

我发现的唯一的事情就是用torch::from_blob后来我就必须clone()和使用to(device),如果我想与CUDA使用它。

double array[] = { 1, 2, 3, 4, 5};
auto options = torch::TensorOptions().dtype(torch::kFloat64);
torch::Tensor tharray = torch::from_blob(array, {5}, options);
Run Code Online (Sandbox Code Playgroud)

有没有更清洁的方法呢?

Jos*_*rty 12

您可以在此处阅读有关张量创建的更多信息: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);
Run Code Online (Sandbox Code Playgroud)

  • 可以?如何判断它是在 CPU 还是 GPU 上? (3认同)
  • 是的,它有效!你是对的@JacKeown,我对这个问题感到困惑https://github.com/pytorch/pytorch/issues/12506#issuecomment-429573396 (2认同)

小智 5

我通常使用:

torch::Tensor tharray = torch::tensor({1, 2, 3, 4, 5}, {torch::kFloat64});
Run Code Online (Sandbox Code Playgroud)