微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将C ++ vector <vector <float >>转换为torch :: tensor

如何解决将C ++ vector <vector <float >>转换为torch :: tensor

我正在尝试将我的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,6} ]

解决方法

您不能使用from_blob()方法将2D矢量或更多维转换为Tensor,但是可以使用此方法来克服该问题:

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;
}

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。