本书主要介绍Caffe的技术原理和一些高级使用技巧,首先介绍深度学习的趋势和业内动态,然后介绍Caffe的基础知识。在理解了Caffe算法的基础上,介绍Caffe的技术原理和特点,包括数学知识和设计知识。*后介绍Caffe深度学习多任务网络。本书将实践和现有系统进行无缝对接,并详述了各种调参技巧。
目录
- 前言
- 第1章 深度学习简介 1
- 1.1 深度学习的历史 1
- 1.2 深度学习工具简介 4
- 1.3 深度学习的未来趋势 12
- 第2章 搭建你的Caffe武器库 13
- 2.1 硬件选型 13
- 2.2 Caffe在Windows下的安装 14
- 2.3 Caffe在Linux下的安装 16
- 2.3.1 Linux安装 16
- 2.3.2 Nvidia CUDA Toolkit的安装(*.deb方法) 17
- 2.3.3 Caffe的安装和测试 20
- 2.4 OpenCV的安装和编译 23
- 2.4.1 OpenCV的下载 23
- 2.4.2 配置环境变量 24
- 2.5 Boost库的安装和编译 27
- 2.6 Python相关库的安装 31
- 2.7 MATLAB接口的配置 33
- 2.8 其他库的安装 44
- 2.8.1 LMDB的编译与安装 44
- 2.8.2 LevelDB的编译与安装 51
- 2.8.3 glog的编译与安装 57
- 2.8.4 安装gflags 63
- 第3章 Caffe的简单训练 69
- 3.1 Caffe转化数据工具的使用介绍 69
- 3.1.1 命令参数介绍 69
- 3.1.2 生成文件列表 70
- 3.1.3 使用的Linux命令简介 70
- 3.1.4 生成文件结果 71
- 3.1.5 图片参数组详解 71
- 3.2 Caffe提取特征的工具使用说明 72
- 3.3 Caffe训练需要的几个部件 73
- 3.3.1 网络proto文件的编写 73
- 3.3.2 Solver配置 74
- 3.3.3 训练脚本的编写 76
- 3.3.4 训练log解析 76
- 3.4 Caffe简单训练分类任务 79
- 3.5 测试训练结果 86
- 3.6 使用训练好的模型进行预测 87
- 第4章 认识深度学习网络中的层 97
- 4.1 卷积层的作用与类别 97
- 4.1.1 卷积层的作用 97
- 4.1.2 卷积分类 98
- 4.2 激活层的作用与类别 99
- 4.2.1 激活函数的定义及相关概念 99
- 4.2.2 激活函数的类别 101
- 4.3 池化层的作用与类别 101
- 4.3.1 池化层的历史 101
- 4.3.2 池化层的作用 102
- 4.3.3 池化层分类 103
- 4.4 全连接层的作用与类别 105
- 4.5 dropout层的作用 106
- 4.6 损失函数层 106
- 第5章 Caffe的框架设计 110
- 5.1 Caffe中CPU和GPU结构的融合 110
- 5.1.1 SyncedMemory函数及其功能 110
- 5.1.2 SyncedMemory类的作用 112
- 5.2 Caffe训练时层的各个成员函数的调用顺序 112
- 5.3 Caffe网络构建函数的解析 115
- 5.4 Caffe层如何使用proto文件实现反射机制 116
- 5.4.1 工厂模式 116
- 5.4.2 层的创建 118
- 5.5 Caffe的调用流程图及函数顺序导视 122
- 5.6 Caffe框架使用的编码思想 125
- 5.6.1 Caffe的总体结构 125
- 5.6.2 Caffe数据存储设计 128
- 第6章 基础数学知识 130
- 6.1 卷积层的数学公式及求导 130
- 6.2 激活层的数学公式图像及求导 132
- 6.3 三种池化层的数学公式及反向计算 134
- 6.4 全连接层的数学公式及求导 135
- 6.4.1 全连接层的前向计算及公式推导 135
- 6.4.2 全连接层的反向传播及公式推导 136
- 6.5 反卷积层的数学公式及求导 137
- 第7章 卷积层和池化层的使用 139
- 7.1 卷积层参数初始化介绍 139
- 7.2 池化层的物理意义 141
- 7.3 卷积层和池化层输出计算及参数说明 141
- 7.4 实践:在Caffe框架下用Prototxt定义卷积层和池化层 142
- 7.4.1 卷积层参数的编写 142
- 7.4.2 必须设置的参数 143
- 7.4.3 其他可选的设置参数 143
- 7.4.4 卷积参数编写具体示例 144
- 7.4.5 卷积参数编写小建议 145
- 第8章 激活函数的介绍 146
- 8.1 用ReLU解决sigmoid的缺陷 146
- 8.2 ReLU及其变种的对比 148
- 8.3 实践:在Caffe框架下用Prototxt定义激活函数 150
- 8.3.1 ReLU 150
- 8.3.2 PReLU 150
- 8.3.3 Sigmoid 151
- 第9章 损失函数 152
- 9.1 contrastive_loss函数和对应层的介绍和使用场景 152
- 9.2 multinomial_logistic_loss函数和对应层的介绍和使用说明 154
- 9.3 sigmoid_cross_entropy函数和对应层的介绍和使用说明 155
- 9.4 softmax_loss函数和对应层的介绍和使用说明 158
- 9.5 euclidean_loss函数和对应层的介绍和使用说明 161
- 9.6 hinge_loss函数和对应层的介绍和使用说明 162
- 9.7 infogain_loss函数和对应层的介绍和使用说明 163
- 9.8 TripletLoss的添加及其使用 165
- 9.8.1 TripletLoss的思想 165
- 9.8.2 TripletLoss梯度推导 166
- 9.8.3 新增加TripletLossLayer 167
- 9.9 Coupled Cluster Loss的添加及其使用 176
- 9.9.1 增加loss层 176
- 9.9.2 实现具体示例 177
- 第10章 Batch Normalize层的使用 194
- 10.1 batch_normalize层的原理和作用 194
- 10.2 batch_normalize层的优势 196
- 10.3 常见网络结构batch_normalize层的位置 197
- 10.4 proto的具体写法 202
- 10.5 其他归一化层的介绍 204
- 第11章 回归网络的构建 205
- 11.1 如何生成回归网络训练数据 205
- 11.2 回归任务和分类任务的异同点 206
- 11.3 回归网络收敛性的判断 207
- 11.4 回归任务与级联模型 210
- 第12章 多任务网络的构建 214
- 12.1 多任务历史 214
- 12.2 多任务网络的数据生成 216
- 12.3 如何简单建立多任务 216
- 12.4 近年的多任务深度学习网络 217
- 12.5 多任务中通用指导性调参和网络构建结论 221
- 12.5.1 如何避免出现多任务后性能下降的情况 221
- 12.5.2 怎样