Преобразуйте C++ vector <vector <float>> в torch::tensor

Я пытаюсь преобразовать свой вектор С ++ в тензор факела. Однако мой код возвращает неправильные преобразования.

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

0 ответов

Вы не можете преобразовать 2D-вектор или более размерность в тензор с помощью 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;
}

Таким образом, вы можете преобразовать его в тензор (ширина m,n и высота вектора):

vector<float> vec = linearize(your2Dvector);
torch::Tensor t = torch::from_blob(vec.data(), {n,m});
Другие вопросы по тегам