Tensorflow C ++:如何获得输出的张量形状?

时间:2018-07-06 06:18:09

标签: c++ tensorflow

C API中有TF_GraphGetTensorShape,但是接口与C ++ GraphOutput不兼容。如何使用Tensorflow C / C ++ API做同样的事情?

例如。如何使用C ++ API获取返回的Slice操作的张量形状,然后使用该张量形状制作具有相同形状的variable

2 个答案:

答案 0 :(得分:4)

这是一个小函数,可将形状作为矢量返回,例如{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()

答案 1 :(得分:2)

我从未使用过tensorflow C API,但在C ++ API中,您有def convert_to_unicode(text: str): # Replace %. text = text.replace('%', '\\') # Escape unicode into character. text = text.encode().decode('unicode-escape') return text ,它们具有函数class Tensor。它将返回shape(),该函数具有功能const TensorShape&。此函数将返回给定索引值的尺寸。希望对您有帮助:)