【问题标题】:Tensorflow c++: how to get the tensor shape of an `Output?`Tensorflow C++:如何获得“输出”的张量形状?
【发布时间】:2018-07-06 06:18:08
【问题描述】:

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

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

【问题讨论】:

    标签: c++ tensorflow


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我从未使用过 tensorflow C API,但在 C++ API 中你有 class Tensor,它有函数 shape()。它将返回const TensorShape&amp;,它具有函数dim_size(int index)。此函数将返回给定索引值的维度。希望这对你有帮助:)

      【讨论】:

      • tensor 仅在会话运行后返回。如果需要在运行会话之前获取张量形状,可以使用 C api 中的 TF_GraphGetTensorShape。我只是不知道如何在 C++ API 中做到这一点。相关的东西是推断某些操作的输出张量形状,这不是 C++ API 提供的,或者我没有找到..
      • 对不起,我不知道你问题的全部内容,所以我不能真正帮助你。据我了解,您想知道某些张量的尺寸,因此您应该拥有此类的对象。也许您可以在问题中添加一些代码示例
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-21
        • 2019-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 2018-05-17
        相关资源
        最近更新 更多