将张量流训练图表部署到生产中的最佳方法是什么?

时间:2018-03-18 14:27:17

标签: python-3.x c++11 tensorflow cntk

作为实习的一部分,我最近一直在研究机器学习问题。到目前为止,我一直在使用Tensorflow和python,因为这是我最熟悉的。一旦使用深度学习解决了问题,我就会留下网络架构和权重。现在,我的问题是,如何在生产中部署我的解决方案?我不会使用tensorflow服务,因为它主要用于设置远程服务器的大型应用程序,并且您开发的应用程序将向此服务器发出请求。就我而言,我只想开发一种机器学习解决方案,并将其集成到现有的使用C ++和Visual Studio 2017的软件中。

到目前为止,经过大量研究,我有一些解决方案:

1)使用OpenCV中的“dnn”模块:该模块可以加载图形,您可以进行推理和其他操作(例如在运行时从网络中提取特定图层)。这个模块似乎非常有前景但是当我使用与OpenCV github中描述的示例中使用的网络有点不同的网络时,我开始遇到一些问题,他们使用“inception5h”作为示例,当我尝试加载“inception_v3”时关于网络中某个未知层的错误,即JPEG_decode层。

2)从源构建tensorflow并直接使用C ++。这个解决方案似乎是最好的解决方案,但后来我遇到了很多问题,我的代码部分没有编译而其他部分没有编译。我在Windows 10中使用Visual Studio 2017。虽然我能够从源代码构建tensorflow,但我无法编译代码的所有部分,实际上它甚至不是我的代码,它是tensorflow的一个例子网站,这一个:tensorflow C++ example

3)我感兴趣的另一种可能性是使用tensorflow来设计解决方案,然后使用另一个机器学习框架,如Caffe2,CNTK ......等部署到生产中。我发现在这里将图形从一个框架转换为另一个框架的可能性:models converters。我认为这可能是一个合理的解决方案,因为我所要做的就是找到与windows最兼容的框架,并在设计了tensorflow和python中的解决方案后进行模型转换。转换过程虽然看起来有点太好了,我错了吗?

4)我想到的最后一种可能性是使用CPython。所以基本上,我将在python中创建我的预测管道,包装一些python函数然后在我的Visual Studio项目中使用<Python.h>并使用C ++调用这些函数,这是一个例子:embedding python in C++。我之前从未使用过这样的解决方案,而且我不确定所有可能出错的事情。

基本上,您认为将机器学习解决方案部署到使用C ++的Visual Studio上现有项目的最佳解决方案是什么?我错过了更好的解决方案吗?非常感谢任何指导或提示!

3 个答案:

答案 0 :(得分:0)

我从一开始就使用CNTK因为我只想在Visual Studio中保留我的C ++世界,并且知道我想部署作为我的C ++桌面应用程序的一部分。没有Tensorflow,没有Python,没有云,甚至没有.NET,也没有翻译模型。从一开始就在CNTK做。我现在有一个使用深度学习的商业产品。酷!

答案 1 :(得分:0)

我最终使用了解决方案2。从tensorflow进行新的更新之后,现在可以更轻松地在Windows上从源代码构建tensorflow。有了这个解决方案,我不需要担心模型的兼容性,因为我将tensorflow与python一起用于原型设计,而将其与C ++一起用于生产。

答案 2 :(得分:0)

我会考虑使用ONNX将您的NN模型(不限于tensorflow)导出到Intel Vino或TensorRT,以便将模型导出到C ++以优化CPU或GPU

here指出,英特尔Vino的速度是张量流的两倍

相关问题