【发布时间】:2018-07-06 06:18:08
【问题描述】:
C API 中有TF_GraphGetTensorShape,但该接口与C++ Graph 和Output 不兼容。如何使用 tensorflow C/C++ API 做同样的事情?
例如。如何使用 C++ API 获取 Slice 操作的返回张量形状,然后使用该张量形状制作具有相同形状的 variable?
【问题讨论】:
标签: c++ tensorflow
C API 中有TF_GraphGetTensorShape,但该接口与C++ Graph 和Output 不兼容。如何使用 tensorflow C/C++ API 做同样的事情?
例如。如何使用 C++ API 获取 Slice 操作的返回张量形状,然后使用该张量形状制作具有相同形状的 variable?
【问题讨论】:
标签: c++ tensorflow
这是一个将形状作为向量返回的小函数,例如{48,48,2}
std::vector<int> get_tensor_shape(tensorflow::Tensor& tensor)
{
std::vector<int> shape;
int num_dimensions = tensor.shape().dims()
for(int ii_dim=0; ii_dim<num_dimensions; ii_dim++) {
shape.push_back(tensor.shape().dim_size(ii_dim));
}
return shape;
}
除此之外,我发现 tensor.DebugString() 很有帮助,例如 “张量类型:浮点形状:[48,48,2] 值:[[0,0390625 -1][0,0390625]]...>”
对于 python,请参阅此线程:https://stackoverflow.com/a/40666375/2135504,其中推荐使用 tensor.get_shape().as_list()。
【讨论】:
我从未使用过 tensorflow C API,但在 C++ API 中你有 class Tensor,它有函数 shape()。它将返回const TensorShape&,它具有函数dim_size(int index)。此函数将返回给定索引值的维度。希望这对你有帮助:)
【讨论】:
tensor 仅在会话运行后返回。如果需要在运行会话之前获取张量形状,可以使用 C api 中的 TF_GraphGetTensorShape。我只是不知道如何在 C++ API 中做到这一点。相关的东西是推断某些操作的输出张量形状,这不是 C++ API 提供的,或者我没有找到..
看看tensor_shape.h,看起来tensor.shape().dim_sizes()应该给你一个包含形状的向量。
【讨论】: