在Windows上使用C++中的tensorflow
Using tensorflow in C++ on Windows
我知道在C++中有使用Tensorflow的方法,他们甚至有文档,但我似乎能够获得它的库。我已经根据源代码说明检查了构建,但它似乎构建了一个pip包,而不是一个我可以链接到我的项目的库。我也找到了一个教程,但当我尝试它时,我的内存用完了,我的电脑崩溃了。我的问题是,我如何才能真正让C++库在我的项目中工作?我确实有这些要求,我必须在C++中使用Visual Studio开发windows。我很想得到的是,如果我能得到一个预编译的DLL,我可以直接链接,但我还没有找到这样的东西,我对其他选择持开放态度。
我不能发表评论,所以我写这篇文章作为回答。如果你不介意使用Keras,你可以节省使用深度的包装。我自己也没有见过图书馆,但我发现它很深,而且似乎很容易实现。我目前正在尝试使用它,所以我不能保证它会起作用。
您可以从这里查看neural2D:
https://github.com/davidrmiller/neural2d
它是一个没有任何依赖库的神经网络实现(全部从头开始编写)。
我想说,最好的选择是使用cppflow,这是我创建的一个简单的包装器,可以轻松地使用C++中的Tensorflow。
您不需要安装任何东西,只需下载TFC API,并将其放置在您的计算机中。你可以看一下文档,看看如何做到这一点,以及如何使用库。
答案似乎很难:-(
试试这个开始。您可以按照最新的说明在Windows上从源代码构建直到构建pip包。但不要那样做——改为做这个/这些:
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++的足够支持来依赖它,尤其是在商业环境中。我建议探索这些选项:
- 如果TF Lite是一个选项,请观看
- Windows ML/Direct ML(需要将TF模型转换为ONNX格式)
- CPPFlow
- 果味浓郁
- Keras2CPP
UPDATE:在浏览了上面的列表后,我最终发现以下内容在我的上下文中最有效(实时连续项目识别):
- 将模型转换为ONNX格式(使用tf2onnx或keras2onnx
- 使用Microsoft的ONNX运行时
尽管微软建议在毫秒很重要的地方使用DirectML,但使用DirectML作为执行提供程序的ONNX运行时的性能意味着我们可以在20ms左右通过英特尔GPU运行224x224 RGB图像,这对我们来说已经足够快了。但我们仍然很难找到答案
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- arr[-1]在c++中的奇怪行为
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 将值指定给向量(2D)的向量中的某个位置
- 内置函数可查看CPP中的成员变量