【问题标题】:Tensorflow get shape from Graph Def in C++Tensorflow 从 C++ 中的 Graph Def 获得形状
【发布时间】:2025-12-20 07:35:16
【问题描述】:

在进行任何推理调用之前,我正在尝试在 C++ 中获取输入张量的形状。所以我只能从 Graph Def 做到这一点。

我正在尝试:

 auto att = graph_def.node(i).attr();
 att["shape"].PrintDebugString();
 Tensor tensor;
 std::cerr << tensor.FromProto(att["shape"].tensor()) << std::endl;

它返回错误。 PrintDebugString 打印时:

形状{昏暗{ 尺寸:-1 } 暗淡 { 尺寸:1024 } 暗淡 { 尺寸:1024 } 暗淡 { 大小:3 } }

所以我只需要获得 1024x1024x3。我对 Protobuf 协议不是很熟悉,对我来说完全不清楚该怎么做。

【问题讨论】:

  • 我没有安装 C++ API,所以这个建议可能是错误的,但是这个操作会给你 Python 中考虑的维度的大小:graphDef.node[i].attr['shape'].dim[j].size。请注意,nodeshapedim 是 google protobuf::Message 的衍生产品。

标签: c++ tensorflow protocol-buffers


【解决方案1】:

我设法做到了:

auto shape = graph_def.node().Get(0).attr().at("shape").shape();
for (int i = 0; i < shape.dim_size(); i++) {
    std::cout << shape.dim(i).size()<<std::endl;
}

在我的情况下是:1 128 128 3

【讨论】:

    最近更新 更多