TensorFlow 模型适用于 Python,但不适用于 C++

Posted

技术标签:

【中文标题】TensorFlow 模型适用于 Python,但不适用于 C++【英文标题】:Tensorflow model works in Python but not in C++ 【发布时间】:2017-01-06 02:26:02 【问题描述】:

作为背景知识,我的主要目标是使用 Tensorflow 的 C++ API 对图像进行分类并在不同系统上对其进行计时。

我使用Ry's model converter 将他的Caffe 模型转换为Tensorflow,一旦打开它就会生成vgg16.tfmodel 文件,它看起来是一个.pb 文件。

使用 Ry 的 tf_forward.py 运行这个生成的文件似乎工作得很好,可以对猫、狗等进行分类。但是,当我修改 label_image 示例 (tensorflow/examples/label_image/) 以使用我的新 vgg16.pb 文件时,似乎出了点问题。

这里是从 tensorflow-vgg16 示例中对猫的图片进行分类的输出:

I tensorflow/examples/label_image/main.cc:195] n03729826 matchstick (644): 0.0762781
I tensorflow/examples/label_image/main.cc:195] n01930112 nematode, nematode worm, roundworm (111): 0.0493599
I tensorflow/examples/label_image/main.cc:195] n03196217 digital clock (530): 0.0317698
I tensorflow/examples/label_image/main.cc:195] n03666591 lighter, light, igniter, ignitor (626): 0.0313151
I tensorflow/examples/label_image/main.cc:195] n04286575 spotlight, spot (818): 0.0252088

这是我在修改 label_image/main.cc 时使用的设置:

string image = "tensorflow/examples/label_image/data/cat.jpg"; //from Ry's project
string graph = "tensorflow/examples/label_image/data/vgg16.pb"; //renamed from Ry's project
string labels ="tensorflow/examples/label_image/data/synset.txt"; //from Ry's project
int32 input_width = 224;
int32 input_height = 224;
int32 input_mean = 128;
int32 input_std = 128;
string input_layer = "mul";
string output_layer = "prob";
bool self_test = false;
string root_dir = "";

我也尝试过 freeze_graph.py 来获取模型和权重,但我永远无法让它正常工作。在追溯所有内容后,我遇到了 protobuf 代码并有点卡住了。任何帮助将不胜感激:)

【问题讨论】:

【参考方案1】:

对于以后看到这个的人来说,这个问题是由于使用了错误的输入层名称造成的。

【讨论】:

以上是关于TensorFlow 模型适用于 Python,但不适用于 C++的主要内容,如果未能解决你的问题,请参考以下文章

为TensorFlow引入即时执行

带有 Python 绑定的 Android 上的 Tensorflow?

具有Tensorflow后端的Keras的K.function方法是否适用于网络层?

tensorflow机器学习模型的跨平台上线

Autodesk Forge Data Viz 组件适用于 SVF 模型,但不适用于 SVF2 模型

第二十二节,TensorFlow中的图片分类模型库slim的使用