如何用C ++填充张量

时间:2016-08-25 15:00:56

标签: c++ tensorflow

我正在创建一个像这样的张量:

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

我知道如何填写标量值:

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

但我不知道如何填补像[1,4,2]那样的张量。

2 个答案:

答案 0 :(得分:14)

有几个选择。如果张量实际上是一个小向量,就像你的情况一样,你可以做到以下几点:

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有许多构造函数可以让你从各种C ++构造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}.

答案 1 :(得分:0)

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

实际上,它可以在编译中工作,但在运行时会出错,这表明a是具有[0]张量形状的张量。 我不知道哪里出了问题,但我成功的方法是:

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