tiny-dnn
tiny-dnn 是一个基于 C++14 的轻量级深度学习框架,专为资源受限的环境设计。它无需安装任何外部依赖,仅需包含头文件即可在支持 C++14 编译器的任意平台上运行,非常适合嵌入式系统、物联网设备以及无法使用 GPU 的计算场景。
针对传统深度学习框架体积庞大、部署困难的问题,tiny-dnn 提供了极简的解决方案。它不仅去除了复杂的安装步骤,还通过 TBB 多线程和 SSE/AVX 向量优化技术,确保了在无 GPU 环境下依然拥有合理的训练速度(例如在普通笔记本上约 13 分钟即可完成 MNIST 数据集训练)。此外,其设计注重稳定性与可预测性,支持恒定吞吐量且不会抛出异常,便于集成到对实时性要求高的实际应用中。
这款工具主要面向 C++ 开发者、嵌入式工程师以及希望深入理解神经网络底层原理的研究人员。对于想要学习深度学习内部机制的教育者而言,其简洁的代码结构也是极佳的教学素材。虽然项目目前处于寻求新维护者的状态,但其支持的卷积、池化、批归一化等多种网络层及丰富的激活函数,仍使其成为构建小型神经网络的实用选择。
使用场景
某嵌入式开发团队需要在资源受限的工业摄像头中部署实时缺陷检测模型,以监控流水线上的产品瑕疵。
没有 tiny-dnn 时
- 依赖环境复杂:传统深度学习框架(如 TensorFlow 或 Caffe)体积庞大且依赖复杂的运行时库,难以移植到仅有几十兆内存的嵌入式 Linux 系统中。
- 部署成本高昂:团队不得不维护额外的 Python 解释器或重型 C++ 运行环境,导致固件编译时间长,且容易因版本冲突引发崩溃。
- 推理延迟不可控:通用框架常带有垃圾回收机制或动态内存分配,造成推理耗时波动大,无法满足工业场景对毫秒级稳定响应的要求。
- 集成难度高:将训练好的模型嵌入现有的 C++ 图像处理管道需要编写大量胶水代码,甚至需要重写整个数据预处理流程。
使用 tiny-dnn 后
- 零依赖轻量集成:tiny-dnn 是纯头文件库,只需包含
tiny_dnn.h即可在支持 C++14 的编译器上运行,无需安装任何第三方库,完美适配嵌入式芯片。 - 确定性实时响应:得益于无垃圾回收和简单的并行模型,tiny-dnn 提供了恒定的吞吐量,确保每次缺陷检测的耗时稳定在预设阈值内。
- 无缝对接现有系统:作为原生 C++ 实现,它能直接嵌入现有的图像采集程序,不产生标准输出干扰,且支持导入 Caffe 模型,复用已有训练成果。
- 极致资源利用:利用 SSE/AVX 指令集优化,即便在没有 GPU 的 Core i7 甚至更低功耗处理器上,也能在数分钟内完成高精度推理。
tiny-dnn 通过极致的轻量化和无依赖特性,让高性能深度学习模型得以在资源严苛的边缘设备上稳定落地。
运行环境要求
- Linux
- macOS
- Windows
- 非必需
- 默认仅使用 CPU(支持 SSE/AVX 指令集加速)
- 可通过 OpenCL 实验性支持 GPU,但未指定具体型号或显存要求
未说明(设计目标为适用于计算资源受限的设备、嵌入式系统和 IoT 设备)

快速开始

该项目可能已被放弃,因为维护者正打算转向其他方向。如果有任何人对继续该项目感兴趣,请联系我们,以便我们讨论后续步骤。
请访问:https://groups.google.com/forum/#!forum/tiny-dnn-dev
tiny-dnn 是一个基于 C++14 的深度学习实现。它非常适合在计算资源有限的环境中运行,例如嵌入式系统和物联网设备。
Linux/Mac OS |
Windows |
|---|---|
目录
更多详细信息请参阅 文档。
最新动态
- 2016年11月30日 v1.0.0a3 发布!
- 2016年9月14日 tiny-dnn v1.0.0alpha 发布!
- 2016年8月7日 tiny-dnn 已迁移到组织账号,并更名为 tiny-dnn :)
- 2016年7月27日 tiny-dnn v0.1.1 发布!
特性
- 在没有 GPU 的情况下仍保持合理速度:
- 使用 TBB 多线程和 SSE/AVX 向量化技术。
- 在 Core i7-3520M 上训练 MNIST 数据集仅需 13 分钟,准确率达到 98.8%。
- 跨平台且纯头文件实现:
- 只要拥有支持 C++14 的编译器,即可在任何地方运行。
- 只需包含 tiny_dnn.h 文件,用 C++ 编写模型即可,无需安装任何额外组件。
- 易于集成到实际应用中:
- 不向 stdout/stderr 输出信息。
- 具有稳定的吞吐量(简单的并行化模型,无垃圾回收)。
- 不会抛出异常。
- 可导入 Caffe 模型。
- 实现简单:
- 是学习神经网络的理想库。
与其他库的比较
请参阅 维基页面。
支持的网络
层类型
- 核心层
- 全连接层
- Dropout 层
- 线性运算层
- 零填充层
- 幂运算层
- 卷积层
- 卷积层
- 平均池化层
- 最大池化层
- 反卷积层
- 平均反池化层
- 最大反池化层
- 归一化层
- 对比度归一化层(仅前向传播)
- 批量归一化层
- 拆分/合并层
- 拼接层
- 切片层
- 元素级相加层
激活函数
- tanh
- asinh
- sigmoid
- softmax
- softplus
- softsign
- 整流线性(ReLU)
- 漏斗 ReLU
- 恒等函数
- 缩放 tanh
- 指数线性单元(ELU)
- 缩放指数线性单元(SELU)
损失函数
- 交叉熵
- 均方误差
- 平均绝对误差
- 带 ε 范围的平均绝对误差
优化算法
- 随机梯度下降(带/不带 L2 正则化)
- 动量法及 Nesterov 动量法
- Adagrad
- RMSprop
- Adam
- Adamax
依赖项
无需任何依赖。你只需要一个支持 C++14 的编译器(gcc 4.9+、clang 3.6+ 或 VS 2015+)。
构建
tiny-dnn 是纯头文件库,因此 无需构建。如果想要运行示例程序或单元测试,你需要安装 cmake 并输入以下命令:
cmake . -DBUILD_EXAMPLES=ON
make
然后切换到 examples 目录并运行可执行文件。
如果你希望使用 Visual Studio 或 Xcode 等 IDE,也可以利用 cmake 生成相应的项目文件:
cmake . -G "Xcode" # 对于 Xcode 用户
cmake . -G "NMake Makefiles" # 对于 Windows Visual Studio 用户
之后在 Visual Studio 中打开 .sln 文件进行构建(Windows/MSVC),或者在 Linux/macOS/Windows-MinGW 上输入 make 命令。
以下是一些可用的 cmake 选项:
| 选项 | 描述 | 默认值 | 使用所需的附加条件 |
|---|---|---|---|
| USE_TBB | 使用 Intel TBB 进行并行化 | OFF1 | Intel TBB |
| USE_OMP | 使用 OpenMP 进行并行化 | OFF1 | OpenMP 编译器 |
| USE_SSE | 使用 Intel SSE 指令集 | ON | 支持 SSE 的 Intel CPU |
| USE_AVX | 使用 Intel AVX 指令集 | ON | 支持 AVX 的 Intel CPU |
| USE_AVX2 | 以 AVX2 库支持构建 tiny-dnn | OFF | 支持 AVX2 的 Intel CPU |
| USE_NNPACK | 使用 NNPACK 进行卷积运算 | OFF | 多核 CPU 上的神经网络加速包 |
| USE_OPENCL | 启用/禁用 OpenCL 支持(实验性) | OFF | 异构系统并行编程的开放标准 |
| USE_LIBDNN | 使用 Greentea LibDNN 通过 OpenCL 在 GPU 上进行卷积运算(实验性) | OFF | 支持 CUDA 和 OpenCL 的通用卷积实现 |
| USE_SERIALIZER | 启用模型序列化 | ON2 | - |
| USE_DOUBLE | 使用双精度计算代替单精度 | OFF | - |
| USE_ASAN | 使用 Address Sanitizer | OFF | clang 或 gcc 编译器 |
| USE_IMAGE_API | 启用 Image API 支持 | ON | - |
| USE_GEMMLOWP | 启用 gemmlowp 支持 | OFF | - |
| BUILD_TESTS | 构建单元测试 | OFF3 | - |
| BUILD_EXAMPLES | 构建示例项目 | OFF | - |
| BUILD_DOCS | 构建文档 | OFF | Doxygen |
| PROFILE | 构建单元测试 | OFF | gprof |
1 tiny-dnn 默认使用 C++14 标准库进行并行化。
2 如果不使用序列化功能,可以将其关闭以加快编译速度。
3 tiny-dnn 默认使用 Google Test 框架来运行单元测试。无需预先安装,它会在 CMake 配置过程中自动下载。
例如,如果你想使用 Intel TBB 并构建测试,可以输入以下命令:
cmake -DUSE_TBB=ON -DBUILD_TESTS=ON .
自定义配置
你可以编辑 include/config.h 文件来定制默认行为。
示例
构建卷积神经网络
#include "tiny_dnn/tiny_dnn.h"
using namespace tiny_dnn;
using namespace tiny_dnn::activation;
using namespace tiny_dnn::layers;
void construct_cnn() {
using namespace tiny_dnn;
network<sequential> net;
// 添加层
net << conv(32, 32, 5, 1, 6) << tanh() // 输入:32x32x1, 5x5卷积, 6个特征图
<< ave_pool(28, 28, 6, 2) << tanh() // 输入:28x28x6, 2x2池化
<< fc(14 * 14 * 6, 120) << tanh() // 输入:14x14x6, 输出:120
<< fc(120, 10); // 输入:120, 输出:10
assert(net.in_data_size() == 32 * 32);
assert(net.out_data_size() == 10);
// 加载 MNIST 数据集
std::vector<label_t> train_labels;
std::vector<vec_t> train_images;
parse_mnist_labels("train-labels.idx1-ubyte", &train_labels);
parse_mnist_images("train-images.idx3-ubyte", &train_images, -1.0, 1.0, 2, 2);
// 定义优化算法
adagrad optimizer;
// 训练(50 轮,每次 30 个小批量)
net.train<mse, adagrad>(optimizer, train_images, train_labels, 30, 50);
// 保存
net.save("net");
// 加载
// network<sequential> net2;
// net2.load("net");
}
构建多层感知机 (MLP)
#include "tiny_dnn/tiny_dnn.h"
using namespace tiny_dnn;
using namespace tiny_dnn::activation;
using namespace tiny_dnn::layers;
void construct_mlp() {
network<sequential> net;
net << fc(32 * 32, 300) << sigmoid() << fc(300, 10);
assert(net.in_data_size() == 32 * 32);
assert(net.out_data_size() == 10);
}
另一种构建 MLP 的方式
#include "tiny_dnn/tiny_dnn.h"
using namespace tiny_dnn;
using namespace tiny_dnn::activation;
void construct_mlp() {
auto mynet = make_mlp<tanh>({ 32 * 32, 300, 10 });
assert(mynet.in_data_size() == 32 * 32);
assert(mynet.out_data_size() == 10);
}
更多示例,请参阅 examples/main.cpp 或 MNIST 示例 页面。
贡献
随着深度学习社区的快速发展,我们非常欢迎你的贡献,以加速 tiny-dnn 的开发! 有关快速贡献指南,请查看 贡献文档。
参考文献
[1] Y. Bengio, 基于梯度的深度架构训练实用建议。 arXiv:1206.5533v2, 2012
[2] Y. LeCun, L. Bottou, Y. Bengio 和 P. Haffner, 应用于文档识别的基于梯度的学习。 IEEE 会刊, 86, 2278-2324.
其他有用的参考列表:
许可证
BSD 3-Clause 许可证
Gitter 社区
我们设有 Gitter 社区,用于讨论新功能和质量保证。 欢迎加入我们!
| 开发者 | https://gitter.im/tiny-dnn/developers |
| 用户 | https://gitter.im/tiny-dnn/users |
版本历史
v1.0.0a32016/11/29v1.0.0a22016/11/13v1.0.0a2016/09/14v0.1.12016/07/26v0.1.02016/06/06常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。