【问题标题】:Using tensorflow in C++ on Windows在 Windows 上的 C++ 中使用 tensorflow
【发布时间】:2019-01-02 01:50:42
【问题描述】:
我知道有一些方法可以在 C++ 中使用 Tensorflow,他们甚至有一个 documentation 用于它,但我似乎能够获得它的库。我已经检查了build from source instructions,但它似乎构建了一个 pip 包而不是一个我可以链接到我的项目的库。我还找到了tutorial,但是当我尝试它时,我的内存不足并且我的电脑崩溃了。我的问题是,我怎样才能真正让 C++ 库在我的项目上工作?我确实有这些要求,我必须使用 C++ 中的 Visual Studio 在 Windows 上工作。如果我能得到一个预编译的 DLL,我希望能得到一个链接,但我还没有找到这样的东西,我愿意接受其他替代方案。
【问题讨论】:
标签:
c++
windows
tensorflow
【解决方案1】:
我无法发表评论,所以我写这个作为答案。
如果您不介意使用 Keras,可以使用包 frugally deep。我自己也没有见过图书馆,但我遇到的很节俭,而且似乎很容易实现。我目前正在尝试使用它,所以我不能保证它会起作用。
【解决方案3】:
答案似乎是hard :-(
尝试this 开始。在构建 pip 包之前,您可以按照building from source on Windows 的最新说明进行操作。但不要那样做 - 改为这样做/这些:
bazel -config=opt //tensorflow:tensorflow.dll
bazel -config=opt //tensorflow:tensorflow.lib
bazel -config=opt tensorflow:install_headers
这似乎工作正常。当您尝试使用任何头文件时,问题才真正开始 - 您可能会遇到编译错误,至少 TF 版本 >= 2.0。我试过了:
- 构建 label_image 示例(readme.md 文件中的说明)
- 它在 Windows 上构建和运行良好,这意味着所有的标头和源代码都在某个地方
- 尝试将该源代码合并到 Windows 控制台可执行文件中:由于与 std::min 和 std::max 冲突而导致编译器错误,可能是由于 Windows SDK。
- 在 Windows 控制台应用程序中包含 c_api.h:不会编译。
- 包含 TF-Lite 头文件:不会编译。
如果您无法编译头文件,那么在前两个 bazel 命令中投入冗长的编译时间是没有意义的 :-(
您可能有时间投资解决这些错误;我不。在这个阶段,Tensorflow 缺乏对 Windows C++ 的足够支持来依赖它,尤其是在商业环境中。我建议改为探索这些选项:
更新:浏览了上面的列表后,我最终发现以下在我的上下文中效果最好(实时连续项目识别):
尽管 Microsoft 建议在毫秒重要的情况下使用 DirectML,但使用 DirectML 作为执行提供程序的 ONNX 运行时性能意味着我们可以在大约 20 毫秒内通过英特尔 GPU 运行 224x224 RGB 图像,这对我们来说已经足够快了。但我们仍然很难找到答案
【解决方案4】:
我想说最好的选择是使用cppflow,这是我创建的一个简单的包装器,可以轻松地从 C++ 中使用 Tensorflow。
您无需安装任何东西,只需下载 TF C API,并将其放置在您计算机的某个位置。您可以查看docs 以了解如何操作以及如何使用该库。