Python 3.x 将tensorflow训练图部署到生产中的最佳方法是什么?

Python 3.x 将tensorflow训练图部署到生产中的最佳方法是什么?,python-3.x,c++11,tensorflow,cntk,Python 3.x,C++11,Tensorflow,Cntk,作为实习的一部分,我最近一直在研究机器学习问题。到目前为止,我一直在python中使用Tensorflow,因为这是我最熟悉的。一旦使用深度学习解决了一个问题,我就只剩下网络的架构和权重了。现在,我的问题是,如何在生产中部署解决方案?我不会使用tensorflow服务,因为它主要用于大型应用程序,在这些应用程序中,您设置了一个远程服务器,并且您开发的应用程序将向该服务器发出请求。在我的例子中,我只想开发一个机器学习解决方案,并将它集成到已经使用C++的Visual Studio 2017。 到目

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

1) 使用OpenCV中的“dnn”模块:该模块可以加载图形,您可以进行推理和其他操作(如在运行时从网络中提取特定层)。这个模块看起来很有前途,但当我使用与OpenCV github中所述示例中使用的网络稍有不同的网络时,我开始面临一些问题,他们使用“inception5h”作为示例,当我尝试加载“inception_v3”时,网络中的某个未知层出现错误,即JPEG_解码层

(p>2)从源建立张量流,并直接用C++来实现。这个解决方案似乎是最好的,但后来我遇到了很多问题,我的部分代码没有编译,而其他代码却编译。我正在使用Visual Studio 2017和Windows 10。因此,尽管我能够从源代码构建tensorflow,但我无法编译代码的所有部分,事实上,这甚至不是我的代码,这是tensorflow网站上的一个示例,这个:

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

4) 我考虑的最后一种可能性是使用CPython。基本上,我将在Python中创建我的预测管道,在一些Python函数中打包,然后在VisualStudio项目中使用<代码> <代码>,并使用C++调用这些函数,这里有一个例子:我以前从未使用过这样的解决方案,我不确定所有可能出错的事情


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

> P>我从一开始就使用CNTK,因为我只想呆在VisualStudio中的C++世界中,并且知道我想部署为C++桌面应用程序的一部分。没有Tensorflow,没有Python,没有cloud,甚至没有.NET,也没有转换模型。从一开始就在CNTK中进行。我现在有一个商业产品使用深度学习。酷

我最终使用了解决方案2。在tensorflow进行了新的更新之后,现在在Windows上从源代码构建tensorflow就更容易了。有了这个解决方案,我不用担心我的模型的兼容性,因为我用Python做了TysFooFraseToMe原型,我用C++来制作它。

< P>我考虑导出你的NN模型(这不限于TunSoFrSUM)。使用ONNX到英特尔VIO或TunSRRT,以便将您的模型导出到C++以获得优化CPU或优化GPU


据说Intel Vino的速度是tensorflow的两倍

谢谢你的回答。我唯一关心的是tensorflow有很好的文档记录,社区开发了许多工具,它们使用tensorflow(例如tensorflow对象检测API)。您认为使用CNTK开发这些工具容易吗?我只是觉得这会浪费时间,你怎么看?那么你使用了哪种框架?我只是补充了一个答案。一方面,这是令人鼓舞的——它可能会为我的问题提供一个答案。另一方面从你提出这个问题到找到答案,花了超过18个月的时间。这表明在Windows C++应用程序中尝试使用TrnSou流转仍然是一个可怕的想法:(你有什么更新的意见吗?)