上篇 初见 2
第1天 什么是深度学习 2
1.1 星星之火,可以燎原 3
1.2 师夷长技 4
1.2.1 谷歌与微软 4
1.2.2 Facebook、亚马逊与NVIDIA 5
1.3 中国崛起 6
1.3.1 BAT在路上 6
1.3.2 星光闪耀 7
1.3.3 企业热是风向标 8
1.4 练习题 9
第2天 深度学习的过往 10
2.1 传统机器学习的局限性 10
2.2 从表示学习到深度学习 11
2.3 监督学习 12
2.4 反向传播算法 13
2.5 卷积神经网络 15
2.6 深度学习反思 17
2.7 练习题 18
2.8 参考资料 18
第3天 深度学习工具汇总 19
3.1 Caffe 19
3.2 Torch&OverFeat 20
3.3 MxNet 22
3.4 TensorFlow 22
3.5 Theano 24
3.6 CNTK 24
3.7 练习题 25
3.8 参考资料 26
第4天 准备Caffe环境 27
4.1 Mac OS环境准备 27
4.2 Ubuntu环境准备 28
4.3 RHEL/Fedora/CentOS环境准备 29
4.4 Windows环境准备 29
4.5 常见问题 32
4.6 练习题 32
4.7 参考资料 33
第5天 Caffe依赖包解析 34
5.1 ProtoBuffer 34
5.2 Boost 38
5.3 GFLAGS 38
5.4 GLOG 39
5.5 BLAS 40
5.6 HDF5 41
5.7 OpenCV 42
5.8 LMDB和LEVELDB 42
5.9 Snappy 43
5.10 小结 43
5.11 练习题 49
5.12 参考资料 49
第6天 运行手写体数字识别例程 50
6.1 MNIST数据集 50
6.1.1 下载MNIST数据集 50
6.1.2 MNIST数据格式描述 51
6.1.3 转换格式 53
6.2 LeNet-5模型 60
6.2.1 LeNet-5模型描述 60
6.2.2 训练超参数 65
6.2.3 训练日志 66
6.2.4 用训练好的模型对数据进行预测 76
6.2.5 Windows下训练模型 76
6.3 回顾 78
6.4 练习题 79
6.5 参考资料 79
篇尾语 80
中篇 热恋 82
第7天 Caffe代码梳理 82
7.1 Caffe目录结构 82
7.2 如何有效阅读Caffe源码 84
7.3 Caffe支持哪些深度学习特性 86
7.3.1 卷积层 86
7.3.2 全连接层 89
7.3.3 激活函数 91
7.4 小结 99
7.5 练习题 99
7.6 参考资料 100
第8天 Caffe数据结构 101
8.1 Blob 101
8.1.1 Blob基本用法 102
8.1.2 数据结构描述 108
8.1.3 Blob是怎样炼成的 109
8.2 Layer 125
8.2.1 数据结构描述 126
8.2.2 Layer是怎样建成的 127
8.3 Net 136
8.3.1 Net基本用法 136
8.3.2 数据结构描述 139
8.3.3 Net是怎样绘成的 139
8.4 机制和策略 146
8.5 练习题 147
8.6 参考资料 148
第9天 Caffe I/O模块 149
9.1 数据读取层 149
9.1.1 数据结构描述 149
9.1.2 数据读取层实现 150
9.2 数据变换器 155
9.2.1 数据结构描述 155
9.2.2 数据变换器的实现 156
9.3 练习题 171
第10天 Caffe模型 172
10.1 prototxt表示 173
10.2 内存中的表示 176
10.3 磁盘上的表示 176
10.4 Caffe Model Zoo 178
10.5 练习题 180
10.6 参考资料 180
第11天 Caffe前向传播计算 181
11.1 前向传播的特点 181
11.2 前向传播的实现 182
112.1 DAG构造过程 182
11.2.2 Net Forward实现 190
11.3 练习题 192
第12天 Caffe反向传播计算 193
12.1 反向传播的特点 193
12.2 损失函数 193
12.2.1 算法描述 194
12.2.2 参数描述 195
12.2.3 源码分析 195
12.3 反向传播的实现 203
12.4 练习题 205
第13天 Caffe最优化求解过程 207
13.1 求解器是什么 207
13.2 求解器是如何实现的 208
13.2.1 算法描述 208
13.2.2 数据结构描述 210
13.2.3 CNN训练过程 218
13.2.4 CNN预测过程 225
13.2.5 Solver的快照和恢复功能 227
13.3 练习题 230
第14天 Caffe实用工具 231
14.1 训练和预测 231
14.2 特征提取 241
14.3 转换图像格式 247
14.4 计算图像均值 254
14.5 自己编写工具 257
14.6 练习题 257
篇尾语 258
下篇 升华 260
第15天 Caffe计算加速 260
15.1 Caffe计时功能 260
15.2 Caffe GPU加速模式 262
15.2.1 GPU是什么 262
15.2.2 CUDA是什么 263
15.2.3 GPU、CUDA和深度学习 263
15.2.4 Caffe GPU环境准备 264
15.2.5 切换到Caffe GPU加速模式 268
15.3 Caffe cuDNN加速模式 269
15.3.1 获取cuDNN 270
15.3.2 切换到Caffe cuDNN加速模式 270
15.3.3 Caffe不同硬件配置性能 272
15.4 练习题 273
15.5 参考资料 273
第16天 Caffe可视化方法 275
16.1 数据可视化 275
16.1.1 MNIST数据可视化 275
16.1.2 CIFAR 10数据可视化 277
16.1.3 ImageNet数据可视化 278
16.2 模型可视化 279
16.2.1 网络结构可视化 279
16.2.2 网络权值可视化 281
16.3 特征图可视化 288
16.4 学习曲线 295
16.5 小结 298
16.6 练习题 298
16.7 参考资料 299
第17天 Caffe迁移和部署 300
17.1 从开发测试到生产部署 300
17.2 使用Docker 302
17.2.1 Docker基本概念 302
17.2.2 Docker安装 303
17.2.3 Docker入门 305
17.2.4 Docker使用进阶 312
17.3 练习题 317
17.4 参考资料 317
第18天 关于ILSVRC不得不说的一些事儿 318
18.1 ImageNet数据集 318
18.2 ILSVRC比赛项目 319
18.2.1 图像分类(CLS) 320
18.2.2 目标定位(LOC) 320
18.2.3 目标检测(DET) 321
18.2.4 视频目标检测(VID) 322
18.2.5 场景分类 322
18.3 Caffe ILSVRC实践 323
18.4 练习题 326
18.5 参考资料 326
第19天 放之四海而皆准 327
19.1 图像分类 327
19.1.1 问题描述 327
19.1.2 应用案例——商品分类 330
19.2 图像中的字符识别 332
19.2.1 问题描述 332
19.2.2 应用案例——身份证实名认证 333
19.3 目标检测 337
19.3.1 问题描述 337
19.3.2 最佳实践——运行R-CNN例程 337
19.4 人脸识别 340
19.4.1 问题描述 340
19.4.2 最佳实践——使用Face++SDK实现人脸检测 342
19.5 自然语言处理 343
19.5.1 问题描述 343
19.5.2 最佳实践——NLP-Caffe 344
19.6 艺术风格 350
19.6.1 问题描述 350
19.6.2 最佳实践——style-transfer 352
19.7 小结 354
19.8 练习题 354
19.9 参考资料 355
第20天 继往开来的领路人 356
20.1 Caffe Traps and Pitfalls 356
20.1.1 不支持任意数据类型 356
20.1.2 不够灵活的高级接口 357
20.1.3 繁杂的依赖包 357
20.1.4 堪忧的卷积层实现 357
20.1.5 架构之殇 358
20.1.6 应用场景局限性 358
20.2 最佳实践——Caffe2 359
20.3 练习题 361
20.4 参考资料 362
第21天 新生 363
21.1 三人行,必有我师 363
21.2 路漫漫其修远兮,吾将上下而求索 364
篇尾语 366
结束语 367
附录A 其他深度学习工具 368