【发布时间】:2016-08-25 15:00:55
【问题描述】:
我正在创建一个这样的张量:
tensorflow::Tensor a(tensorflow::DT_FLOAT, tensorflow::TensorShape());
我知道如何填充标量值:
a.scalar<float>()() = 8.0;
但我不知道如何填充像 [1, 4, 2] 这样的张量。
【问题讨论】:
标签: c++ tensorflow
我正在创建一个这样的张量:
tensorflow::Tensor a(tensorflow::DT_FLOAT, tensorflow::TensorShape());
我知道如何填充标量值:
a.scalar<float>()() = 8.0;
但我不知道如何填充像 [1, 4, 2] 这样的张量。
【问题讨论】:
标签: c++ tensorflow
有几个选项。如果张量确实是一个小向量,就像您的情况一样,您可以执行以下操作:
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/cc/framework/ops.h 中声明的tensorflow::ops::Input::Initializer 有许多构造函数,可以让你从各种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}.
【讨论】:
tensorflow::Input::Initializer a({{1, 2}, {3, 4}});
其实在编译的时候是可以的,但是运行的时候报错,说明a是一个张量,张量形状为[0]。
不知道哪里错了,但是我成功的方法是:
tensorflow::Input::Initializer a({1, 2, 3, 4}, tensorflow::TensorShape({2, 2}));
【讨论】: