使用Tensorflow C ++ API运行会话比使用Python慢得多

吉尔登斯滕

我正在尝试使用tensorflow c ++ api(仅限CPU)运行SqueezeDet。我已经冻结了tensorflow图并从C ++加载了它。就检测质量而言,一切都很好,但性能要比python慢​​得多。这可能是什么原因?

简化后,我的代码如下所示:

  int main (int argc, const char * argv[])
  {
    // Initializing graph 
    tensorflow::GraphDef graph_def;
    // Folder in which graph data is located
    string graph_file_name = "Model/graph.pb";
    // Loading graph 
    tensorflow::Status graph_loaded_status =  ReadBinaryProto(tensorflow::Env::Default(), graph_file_name, &graph_def);
    if (!graph_loaded_status.ok())
    {
      cout << graph_loaded_status.ToString() << endl;
      return 1;
    }
    unique_ptr<tensorflow::Session> session_sqdet(tensorflow::NewSession(tensorflow::SessionOptions()));
    tensorflow::Status session_create_status = session_sqdet->Create(graph_def);
    if (!session_create_status.ok())
    {
      cout << "Session create status: fail." << endl;
      return 1;
    }
    while ()
    {
      /* create & preprocess batch */

      session.Run({{ "image_input", input_tensor}, {"keep_prob", prob_tensor}}, {"probability/score", "bbox/trimming/bbox"}, {}, &final_output);

      /* do some postprocessing */
    }
  }

我试过的

1)使用优化标志-全部打开,没有警告。

2)使用批处理:性能有所提高,但是python和C ++之间的差距仍然很大(在batch_size = 20的情况下,运行会话需要1s对比2.4s)。

任何帮助将不胜感激。

吉尔登斯滕

我在这个问题上花了很多时间(大部分是因为我犯了愚蠢的错误),但是我终于解决了。现在,我想在这里发布我的经验,因为它可能有用。

因此,我建议您采取以下步骤来跟着遇到相同问题的人进行跟踪(尽管其中有些非常明显):

0)正确进行分析!确保使用的工具在多核/ GPU /任何设置下均可靠。

1)检查tensorflow和所有相关软件包是否已启用所有优化。

2)优化冻结后的图形。

3)如果在训练和推理期间使用不同的批次大小,请确保已删除模型中的所有依赖项!请注意,否则,在结果质量方面,您将不会收到错误消息或什至更差的性能,您只会遇到神秘的减速!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用TensorFlow进行梯度下降比基本的Python实现要慢得多,为什么呢?

如何使用C API遍历Tensorflow图?

为什么我的C ++磁盘写测试比使用bash进行简单文件复制要慢得多?

在C ++版本的Tensorflow上使用多个GPU

如何使用Tensorflow在C ++中训练模型?

在 C++ 中使用加载的 tensorflow 模型运行推理

用c ++重写此python函数似乎会使它运行慢得多。这合理吗?

如何构建和使用Google TensorFlow C ++ API

使用Tensorflow C ++ API执行在skflow中训练的模型

在Windows上可以使用TensorFlow C ++ API吗?

Tensorflow冻结图Protobuf无法使用C API进行预测

为什么在C#中使用结构Vector3I而不是三个整数要慢得多?

使用 asp.net 和 c# 在文本框上进行会话

进程输出比使用cmd慢得多

Tensorflow中的A3C-我应该使用线程还是分布式Tensorflow API

如何使用C ++语言使用tensorflow.so和c_api.h加载图形?

StdOut充满“ C:\ fakepath”警告,整数除法可能会慢得多,如果可能,请尝试通过C#使用Selenium来使用uint

为什么使用Python生成器遍历二叉树要慢得多?

无法使用Tensorflow作为依赖项的Bazel构建C ++项目

Windows是否可以使用Tensorflow C库?

使用Opencv和Tensorflow C ++时冲突Protobuf版本

使用Tensorflow检查点在C ++中还原模型

转换tfjs模型以在c ++中的Tensorflow中使用

在Tensorflow C ++中使用FIFOQueue遇到问题

使用TF_SessionRun在C中运行TensorFlow图时出现分段错误(不是C ++)

为什么在C ++中从stdin读取行比Python慢得多?

为什么在C ++中从stdin读取行比Python慢得多?

基准矩阵乘法性能:C ++(本征)比Python慢得多

C ++似乎比Project Euler的Python Ruby都慢得多