【问题标题】:Convert C++ vector<vector<float>> to torch::tensor将 C++ vector<vector<float>> 转换为 torch::tensor
【发布时间】:2020-11-16 05:36:31
【问题描述】:

我正在尝试将我的 c++ 向量转换为火炬张量。但是,我的代码返回的转换不正确。

    cout << history << endl;
    auto options1 = torch::TensorOptions().dtype(torch::kFloat32);
    input = torch::from_blob(history.data(), {size, 1, 6}, options1).to(torch::kFloat32);

    cout << input << endl;

以上代码返回如下输出:

-9 -3 -3 -12 -0 -0 -12 -2 -3 -12 -0 -0

(1,.,.) = 
 -9.8681e-32  4.5793e-41 -9.8682e-32  4.5793e-41 -9.8682e-32  4.5793e-41




(2,.,.) = 
 -9.8682e-32  4.5793e-41 -9.8683e-32  4.5793e-41 -9.8683e-32  4.5793e-41




[ CPUFloatType{2,1,6} ]

【问题讨论】:

  • history的类型是什么?是std::vector&lt;int&gt; 吗?
  • 你可以试试this,它对我有用

标签: torch torchscript


【解决方案1】:

您不能使用from_blob() 方法将二维向量或更多维度转换为张量,但您可以使用此方法来解决问题:

vector<float> linearize(const vector<vector<float>>& vec_vec) {
    vector<float> vec;
    for (const auto& v : vec_vec) {
        for (auto d : v) {
            vec.push_back(d);
        }
    }
    return vec;
}

而且,通过这种方式,您可以将其转换为Tensor(向量的m,n宽度和高度):

vector<float> vec = linearize(your2Dvector);
torch::Tensor t = torch::from_blob(vec.data(), {n,m});

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 2022-01-02
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2013-03-15
    • 1970-01-01
    相关资源
    最近更新 更多