5

使用 C++ libtorch 前端Pytorch

我想 torch::Tensor从 C++double[]数组创建一个。来自旧版 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);

有没有更清洁的方法呢?

4

3 回答 3

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);
于 2019-10-30T18:37:02.893 回答
5

我通常使用:

torch::Tensor tharray = torch::tensor({1, 2, 3, 4, 5}, {torch::kFloat64});
于 2020-07-23T18:34:30.570 回答
1

我没有更清洁的方法,但我会给你另一种方法。

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())

希望它有帮助。

更正KF64kFloat64因为KF64在火炬中不存在

于 2020-04-01T08:14:38.700 回答