Tensorflow c++:如何获取“Output”的张量形状?

6

在C API中有 TF_GraphGetTensorShape 这个函数,但该接口与C++的GraphOutput 不兼容。如何使用tensorflow C/C++ API实现相同的功能?

例如:如何使用C++ API获取Slice操作的返回张量形状,然后使用该张量形状创建一个具有相同形状的variable?

3个回答

9

这是一个返回向量形状的小函数,例如{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()很有帮助,例如输出结果为"Tensor type: float shape: [48,48,2] values: [[0,0390625 -1][0,0390625]]...>"。
对于Python,请参考此线程:https://dev59.com/LVkR5IYBdhLWcg3w6RID#40666375,其中推荐使用tensor.get_shape().as_list()

3

我从未使用过tensorflow C API,但在C++ API中,你有class Tensor,其中包含函数shape()。它将返回const TensorShape&,其中包含函数dim_size(int index)。这个函数将为给定的索引值返回维数。希望这能帮到你 :)


1
tensor只有在会话运行后才返回。如果您需要在运行会话之前获取张量形状,则可以在C API中使用TF_GraphGetTensorShape。我只是不知道如何在C++ API中实现这一点。与此相关的一些内容是推断某个操作的输出张量形状,这可能是C++ API没有提供或我尚未找到的。 - wumo
抱歉,我不知道你问题的完整背景,所以我无法真正帮助你。据我理解,您想知道某个张量的维度,因此您应该拥有这个类的对象。也许您可以在问题中添加一些代码示例。 - wdudzik

0

看起来tensor_shape.htensor.shape().dim_sizes()应该给你一个包含形状的向量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接