【问题标题】:most efficient way to create tensorflow::tensor from std::vector从 std::vector 创建 tensorflow::tensor 的最有效方法
【发布时间】:2016-09-28 02:55:40
【问题描述】:

所以我的问题是知道是否有办法将值从vector(但我们也可以考虑array)直接传递给tensorflow::tensor

我知道的唯一方法是一个一个地复制每个值。

示例(2D 矢量)

tensorflow::Tensor input(tensorflow::DT_FLOAT, tensorflow::TensorShape({50, 20})); 
auto input_map = input.tensor<float, 2>();


for (int b = 0; b < 50; b++) {
  for (int c = 0; c < 20; c++) {
    input_map(b, c) = (vector_name)[b][c];
  }
}

有更方便的方法吗?

例如arrayvector

int x[3] = {1, 2, 3};
std::vector<int> v(x, x + sizeof x / sizeof x[0]);

【问题讨论】:

  • 顺便说一句,是什么让你相信你的数组到向量 sn-p 没有复制任何东西? “高效”是指性能,还是方便?
  • 我主要看性能。我虽然这样矢量会占用数组使用的内存,但我可能错了。或者例如相反的动作: int* pv = &v[0]; (从向量创建数组,对于这个我确信它不会复制)。但如果有更方便的东西我也很想看看。
  • int* pv=&v[0] 不创建数组。它将向量第一个元素的当前地址分配给一个指针(如果你做一些调整向量大小的事情,pv 很可能会变得无效,顺便说一句)。不,该向量构造函数不会创建数组的视图。它只是复制元素。
  • 所以我想没有什么比这更有效了吗?在那种情况下更方便?
  • 有这个构造函数Tensor::Tensor(Allocator* a, DataType type, const TensorShape& shape)。但我看不出 (Allocator* a) 是什么。

标签: c++ tensorflow


【解决方案1】:

这个怎么样? std::copy_n(vec.begin(), vec.size(), input.flat&lt;float&gt;().data())

【讨论】:

    【解决方案2】:

    你试过tf.convert_to_tensor吗?也许像tf.convert_to_tensor(value, as_ref=True)

    https://www.tensorflow.org/versions/r0.11/api_docs/python/framework.html#convert_to_tensor

    【讨论】:

    • 恐怕只适用于python api,我说的是c++。我检查并没有找到关于 c++ 中的 convert_to_tensor。
    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2021-07-27
    • 2020-12-07
    相关资源
    最近更新 更多