此刻我不知道如何让我训练有素的模型进入生产力环境。
我确实在媒体上看过这篇文章: https://medium.com/zendesk-engineering/how-zendesk-serves-tensorflow-models-in-production-751ee22f0f4b
并且他们说他们使用服务于api c ++的tensorflow
如果我理解正确,那就像是一个本地服务器,它在我的本地系统上加载一个模型,并且可以在客户端上加入(无论哪种编程语言)支持gRPC和瞧我有我的预测...是这对吗?
假设我有一个C#/ .Net环境,我希望在电影中有一些预测,我是否“只是”使用gRPC protocoll和tensorflow服务API?
还有其他可能性让我训练有素的模型进入生产力环境吗?你有什么步骤?任何帮助和建议表示赞赏! 谢谢!
答案 0 :(得分:1)
除了使用tensorflow服务之外,还有API可以将您的模型直接集成到您的程序中。可以找到C#的API here。您可能还会在this线程上找到一些有用的指向其他c#示例的指针。
在未经过培训的应用程序中使用模型的基本步骤对于任何API都是相同的。首先,将训练后的模型导出为.pb文件,例如通过使用freeze_graph函数。在您的应用程序中,您可以定义一个新图形,从文件中读取其定义,使用它开始一个会话,然后您提供并运行它。 C#中的代码示例可以在我上面链接的API的自述文件中找到。困难的部分通常是弄清楚如何将输入转换为形式张量流可以handel。
答案 1 :(得分:0)
有许多方法可以使用经过训练的模型。
gRPC到张量流服务是一种方式。很高兴您可以从几乎任何语言/平台使用它们,但由于您需要启动此其他过程,因此设置有点单调乏味。如果您在许多计算机上运行并且您不想在每个计算机上加载模型或者您已经有一些分布式系统,那么这可能是有利的。
另一种方法是编写一个在C#应用程序中链接的小型C ++包装器库。优点是模型现在在您的流程内运行。您也可以传递自定义类,而不必担心gRPC。我认为没有C#api for tensorflow,所以不幸的是你必须编写一些C ++。
如果你想全力以赴,你可以转储训练模型的重量,并在你的应用程序中自行应用。对于小型号,这可能会为您提供最佳性能,因为您绕过了tensorflow检查/线程/等。虽然它相当脆弱(模型结构的任何变化都必须反映在您的代码中,否则无效)。对于较大的模型,计算速度将是主导因素,因此这种方法不值得。
在任何情况下,最重要的部分是确保您提供的输入与您训练模型的内容一致。如果您执行任何处理步骤,则对于培训和推理,它们必须相同。