Estoy creando un tensor como este:

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

Sé cómo llenar un valor escalar:

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

Pero no sé cómo llenar un tensor como [1, 4, 2].

11
Kevin 25 ago. 2016 a las 18:00

2 respuestas

La mejor respuesta

Hay algunas opciones. Si el tensor es realmente un vector pequeño, como en tu caso, puedes hacer lo siguiente:

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;

Si desea construir un tensor un poco más grande y / o multidimensional, entonces tensorflow::ops::Input::Initializer declarado en tensorflow/cc/framework/ops.h tiene muchos constructores que le permiten construir un Tensor a partir de varios tipos de constantes de C ++ como constantes primitivas simples y listas de inicializadores anidadas que representan una matriz multidimensional.

Por ejemplo, si desea construir una matriz 2x2, puede hacer lo siguiente:

#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}.
20
keveman 25 ago. 2016 a las 15:19
tensorflow::Input::Initializer a({{1, 2}, {3, 4}});

En realidad, funciona en la compilación, pero hay errores al ejecutar, lo que muestra que a es un tensor con [0] forma tensora. No sé dónde está mal, pero mi forma exitosa es:

tensorflow::Input::Initializer a({1, 2, 3, 4}, tensorflow::TensorShape({2, 2}));
1
fiverwyp 18 sep. 2019 a las 02:32