1

如何使用 Tensorflow 的 C_api 重塑 TF_Tensor*,因为它是在 C++ 中完成的?

TensorShape inputShape({1,1,80,80});

Tensor inputTensor;
Tensor newTensor;

bool result = inputTensor->CopyFrom(newTensor, inputShape);

我没有看到使用 tensorflow 的 c_api 的类似方法。

4

1 回答 1

1

Tensorflow C API 使用(data,dims)模型进行操作 - 将数据视为提供所需维度的平面原始数组。

第 1 步:分配new张量

看看TF_AllocateTensor参考):

TF_CAPI_EXPORT extern TF_Tensor* TF_AllocateTensor(TF_DataType,
                                                   const int64_t* dims,
                                                   int num_dims, size_t len);

这里:

  1. TF_DataType:TF相当于您需要的数据类型
  2. dims: 对应于要分配的张量维度的数组,例如。{1, 1, 80, 80}
  3. num_dims:暗淡的长度(4以上)
  4. len: reduce(dims, *): 即 1*1*80*80*sizeof(DataType) = 6400*sizeof(DataType)。

第 2 步:复制数据

// Get the tensor buffer
auto buff = (DataType *)TF_TensorData(output_of_tf_allocate);
// std::memcpy() ...

是我之前在编写一个非常轻量级的 Tensorflow C-API Wrapper 时所做的一个项目的一些示例代码。

所以,基本上你的重塑将涉及分配你的新张量并将数据从原始张量复制到buff.

Tensorflow C API 不适合常规使用,因此更难学习 + 缺乏文档。我通过实验想出了很多。更有经验的开发人员有什么建议吗?

于 2018-11-21T22:36:30.173 回答