【问题标题】:How to fill a tensor in C++如何在 C++ 中填充张量
【发布时间】:2016-08-25 15:00:55
【问题描述】:

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

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

我知道如何填充标量值:

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

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

【问题讨论】:

    标签: c++ tensorflow


    【解决方案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/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::TensorShape(3) 给了我一个语法错误。 #include "tensorflow/cc/framework/cc/ops.h" 告诉我它不存在。这改变了吗? (我是 C++ 新手) tensorflow::TensorShape({3}) 可以编译,但我不确定它是否有效。
    • 更新:找到了一种方法来测试 tensorflow::TensorShape({3}) 是否有效
    • 应该是#include "tensorflow/cc/framework/ops.h" 然后是tensorflow::Input::Initializer a({{1, 2}, {3, 4}});
    【解决方案2】:
    tensorflow::Input::Initializer a({{1, 2}, {3, 4}});
    

    其实在编译的时候是可以的,但是运行的时候报错,说明a是一个张量,张量形状为[0]。 不知道哪里错了,但是我成功的方法是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 2023-03-29
      • 2018-07-19
      • 1970-01-01
      • 2015-04-25
      • 2018-10-14
      相关资源
      最近更新 更多