Как заполнить тензор в С++

Я создаю такой тензор:

tensorflow::Tensor a(tensorflow::DT_FLOAT, tensorflow::TensorShape());

Я знаю, как заполнить скалярное значение:

a.scalar<float>()() = 8.0;

Но я не знаю, как заполнить такой тензор, как [1, 4, 2].

Ответ 1

Есть несколько вариантов. Если тензор действительно маленький вектор, как и в вашем случае, вы можете сделать следующее:

tensorflow::Tensor a(tensorflow::DT_FLOAT, tensorflow::TensorShape(3));
a.vec<float>()(0) = 1.0f;
a.vec<float>()(1) = 4.0f;
a.vec<float>()(2) = 2.0f;

Если вы хотите построить немного больший и/или многомерный тензор, то tensorflow::ops::Input::Initializer, объявленный в tensorflow/cc/framework/ops.h, имеет много конструкторов, которые позволяют вам построить Tensor из различных типов констант С++, таких как простые примитивные константы и вложенные списки инициализаторов, представляющие многомерный массив.

Например, если вы хотите построить матрицу 2x2, вы можете сделать следующее:

#include "tensorflow/cc/framework/cc/ops.h"

tensorflow::ops::Input::Initializer a({{1, 2}, {3, 4}});
// a.tensor will be a Tensor with type DT_INT32 and shape {2, 2}.

Ответ 2

tensorflow::Input::Initializer a({{1, 2}, {3, 4}});

На самом деле это работает при компиляции, но ошибки при запуске, что показывает, что a является тензором с [0] тензорной формой. Я не знаю, где не так, но мой успешный путь:

tensorflow::Input::Initializer a({1, 2, 3, 4}, tensorflow::TensorShape({2, 2}));