项目介绍:frugally-deep
什么是 frugally-deep?
frugally-deep 是一个小巧而强大的工具,用于在 C++ 中无缝运行 Keras 模型的预测。它最适合那些希望在 Python 中利用 Keras 构建和训练模型,但在实际应用中希望使用 C++ 运行这些模型的人。与 TensorFlow 的直接链接不同,frugally-deep 提供了一种轻量级的替代方案。
frugally-deep 的特点
- 纯头文件库:frugally-deep 是一个完全用现代 C++ 编写的头文件库,非常容易集成和使用。
- 依赖管理简单:它仅依赖三个其他头文件库:[FunctionalPlus, Eigen, 和 json]。
- 支持多种模型:不仅支持 Keras 中的顺序模型,还支持功能 API 创建的复杂计算拓扑。
- 轻量级:通过实现 TensorFlow 的一小部分功能来支持预测,生成的二进制文件比直接链接 TensorFlow 小得多。
- 跨平台兼容性:支持 32 位和 64 位的可执行文件。
- 内存优化:在卷积过程中,通过避免 materializing 大的中间矩阵,frugally-deep 大大减少了临时内存(RAM)的占用。
- CPU 使用:完全忽略 GPU,仅使用一个 CPU 核进行预测。但是,它在单个 CPU 核上运行得非常快,并支持并行化以提高整体吞吐量。
支持的层类型
frugally-deep 支持众多的层类型,如加法、乘法、卷积、池化、批归一化等。此外,它还支持多输入输出、嵌套模型、残差连接以及自定义层等结构。
使用示例
使用 frugally-deep 的过程如下:
-
在 Keras/Python 中设计、训练和保存模型:一般情况下,使用
model.compile(...)
构建模型,model.fit(...)
训练模型,并通过model.save('....keras')
保存模型。 -
转换模型格式:使用
keras_export/convert_model.py
将 Keras 模型转换为 frugally-deep 能够识别的格式。 -
在 C++ 中加载模型并进行预测:通过
fdeep::load_model(...)
加载模型,并使用model.predict(...)
进行前向传递。
具体代码示例展示了如何在 Python 中创建和保存一个简单的模型,然后在 C++ 中加载并使用它进行预测。这个过程确保了在 Keras 和 C++ 中的预测结果一致。
安装和要求
要使用 frugally-deep,您需要:
- C++14 兼容的编译器:如 GCC 4.9, Clang 3.7, 和 Visual C++ 2015。
- Python 3.7 或更高版本。
- TensorFlow 2.17 或者可能其他稍旧的版本也行。
详细的安装指南位于 INSTALL.md
文件中。
FAQ
更多有关使用的常见问题可以在 FAQ.md
文件中找到。
免责声明
frugally-deep 的 API 未来可能会有所更改。欢迎您提出建议、发现错误或提供反馈。项目也欢迎任何形式的贡献。该项目是根据 MIT 许可证分发的。