由于维护者只是想继续前进,因此可以放弃该项目。在任何人对继续项目感兴趣的情况下,请告诉我们,以便我们可以讨论下一步。
请访问:https://groups.google.com/forum/#!forum/tiny–dnn-dev
Tiny-DNN是C ++ 14深度学习的实施。它适用于有限的计算资源,嵌入式系统和物联网设备的深入学习。
| Linux/Mac OS | 视窗 |
|---|---|
目录
- 特征
- 与其他图书馆进行比较
- 支持的网络
- 依赖性
- 建造
- 例子
- 贡献
- 参考
- 执照
- 吉特室
查看文档以获取更多信息。
什么是新的
- 2016/11/30 V1.0.0A3已发布!
- 2016/9/14 tiny-dnn v1.0.0.0alpha已发布!
- 2016/8/7 Tiny-DNN现在已转移到组织帐户,并将其重命名为Tiny-DNN 🙂
- 2016/7/27 Tiny-DNN V0.1.1发布!
特征
- 相当快,没有GPU:
- 带有TBB螺纹和SSE/AVX矢量化。
- MNIST在13分钟训练中的精度为98.8%(@core I7-3520m)。
- 便携式和标题:
- 只要您拥有支持C ++ 14的编译器,就可以在任何地方运行。
- 只需包含tiny_dnn.h,然后将您的模型写入C ++即可。没有什么可安装的。
- 易于与真实应用程序集成:
- 没有输出对Stdout/stderr的输出。
- 恒定的吞吐量(简单的并行化模型,无垃圾收集)。
- 没有抛出例外的情况下工作。
- 可以导入Caffe的模型。
- 简单实施:
- 学习神经网络的好库。
与其他图书馆进行比较
请参阅Wiki页面。
支持的网络
图层类型
- 核
- 完全连接
- 辍学
- 线性操作
- 零填充
- 力量
- 卷积
- 卷积
- 平均合并
- 最大池
- 反向解决方案
- 平均不熟食
- 最大不冷
- 正常化
- 对比归一化(仅向前传)
- 批量归一化
- 拆分/合并
- concat
- 片
- elementwise-add
激活功能
- Tanh
- asinh
- 乙状结肠
- SoftMax
- 软plus
- SoftSign
- 纠正线性(relu)
- 漏水
- 身份
- 缩放的tanh
- 指数线性单元(ELU)
- 缩放指数线性单元(SELU)
损失功能
- 跨肠道
- 平方误差
- 平均绝对错误
- Epsilon范围的平均绝对误差
优化算法
- 随机梯度下降(有/不具有L2归一化)
- 动力和内斯特罗的动力
- Adagrad
- RMSPROP
- 亚当
- Adamax
依赖性
没有什么。您需要的只是C ++ 14编译器(GCC 4.9+,Clang 3.6+或VS 2015+)。
建造
Tiny-DNN仅是标题,所以没有什么可建造的。如果要执行示例程序或单元测试,则需要安装CMAKE并键入以下命令:
cmake . -DBUILD_EXAMPLES=ON make
然后更改为示例目录并运行可执行文件。
如果您想使用诸如Visual Studio或Xcode之类的IDE,也可以使用CMAKE生成相应的文件:
cmake . -G \"Xcode\" # for Xcode users cmake . -G \"NMake Makefiles\" # for Windows Visual Studio users
然后在Visual Studio中打开.sln文件并在Windows/MSVC上构建,或键入Make Command(在Linux/Mac/Windows-Mingw上)。
有一些CMAKE选项可用:
| 选项 | 描述 | 默认 | 使用的其他要求 |
|---|---|---|---|
| USE_TBB | 使用英特尔TBB并行化 | 1 | 英特尔TBB |
| USE_OMP | 使用OpenMP进行并行化 | 1 | OpenMP编译器 |
| USE_SSE | 使用Intel SSE指令集 | 在 | 支持SSE的英特尔CPU |
| USE_AVX | 使用英特尔AVX指令集 | 在 | 支持AVX的英特尔CPU |
| USE_AVX2 | 使用AVX2库支持构建微小的DNN | 离开 | 支持AVX2的英特尔CPU |
| USE_NNPACK | 使用NNPACK进行卷积操作 | 离开 | 多核CPU上神经网络的加速软件包 |
| USE_OPENCL | 启用/禁用OpenCL支持(实验) | 离开 | 异质系统并行编程的开放标准 |
| use_libdnn | 使用greentea libdnn通过OpenCL(实验)与GPU进行卷积操作 | 离开 | 支持CUDA和OPENCL的通用卷积实施 |
| use_serializer | 启用模型序列化 | 在2 | – |
| use_double | 使用双精度计算而不是单个精度 | 离开 | – |
| use_asan | 使用地址消毒剂 | 离开 | Clang或GCC编译器 |
| use_image_api | 启用图像API支持 | 在 | – |
| use_gemmlowp | 启用Gemmlowp支持 | 离开 | – |
| build_tests | 建立单元测试 | 休息3 | – |
| build_examples | 建立示例项目 | 离开 | – |
| build_docs | 构建文档 | 离开 | doxygen |
| 轮廓 | 建立单元测试 | 离开 | Gprof |
1 Tiny-DNN使用C ++ 14标准库进行并行化。
2如果您不使用序列化,则可以关闭加速汇编时间。
3 Tiny-DNN使用Google测试作为默认框架来运行单元测试。无需预安装,它会在CMAKE配置期间自动下载。
例如,如果要使用Intel TBB并构建测试,请键入以下命令:
cmake -DUSE_TBB=ON -DBUILD_TESTS=ON .
自定义配置
您可以编辑包含/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; // add layers net << conv ( 32 , 32 , 5 , 1 , 6 ) << tanh () // in:32x32x1, 5x5conv, 6fmaps << ave_pool ( 28 , 28 , 6 , 2 ) << tanh () // in:28x28x6, 2x2pooling << fc ( 14 * 14 * 6 , 120 ) << tanh () // in:14x14x6, out:120 << fc ( 120 , 10 ); // in:120, out:10 assert (net. in_data_size () == 32 * 32 ); assert (net. out_data_size () == 10 ); // load MNIST dataset 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 ); // declare optimization algorithm adagrad optimizer; // train (50-epoch, 30-minibatch) net. train <mse, adagrad>(optimizer, train_images, train_labels, 30 , 50 ); // save net. save ( \" net \" ); // load // 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 ); }
有关更多样本,请阅读示例/main.cpp或mnist示例页面。
贡献
由于深度学习社区正在迅速增长,因此我们很乐意从您那里获得贡献,以加速微小的DNN开发!有关贡献的快速指南,请查看贡献文件。
参考
[1] Y. Bengio,基于梯度的深度建筑培训的实用建议。 ARXIV:1206.5533V2,2012
[2] Y. Lecun,L。Bottou,Y。Bengio和P. Haffner,基于梯度的学习应用于文档识别。 IEEE的论文集,86,2278-2324。
其他有用的参考列表:
- UFLDL建议阅读
- 深度学习。net阅读列表
执照
BSD 3级许可证
吉特室
我们有用于讨论新功能和质量检查的吉特室。随时加入我们!
| 开发人员 | https://gi*t*ter*.im/tiny-dnn/developers |
| 用户 | https://gitt*e*r.i*m/tiny-dnn/users |
