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++的主要内容,如果未能解决你的问题,请参考以下文章
带有 Python 绑定的 Android 上的 Tensorflow?
具有Tensorflow后端的Keras的K.function方法是否适用于网络层?