2016-08-25 2 views
9

Я создаю тензор так:Как заполнить тензор в C++

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

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

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

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

ответ

9

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

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 из различных типов констант C++, таких как простые примитивные константы и вложенные списки инициализаторов, представляющие многомерный массив.

Например, если вы хотите построить 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}. 
+0

Эй. Я попробовал первый пример и tensorflow :: TensorShape (3) дает мне синтаксическую ошибку. #include "tensorflow/cc/framework/cc/ops.h" говорит мне, что этого не существует. Это изменилось? (Я новичок в C++), тензор потока :: TensorShape ({3}) компилируется, но я не уверен, что это работает. – CodingYourLife

+0

update: нашел способ проверить, работает ли shadoworflow :: TensorShape ({3}) – CodingYourLife

+0

Должен быть #include "tensorflow/cc/framework/ops.h", а затем tensorflow :: Input :: Initializer a ({ {1, 2}, {3, 4}}); – jshapy8

Смежные вопросы