《MXNet深度学习实战》—3.3 Module
524
2022-05-30
智能系统与技术丛书
MXNet 深 度 学 习 实 战
魏凯峰 著
PREFACE
前 言
为什么要写这本书
深度学习领域开始受到越来越多的关注,各大深度学习框架也孕育而生,在这个阶段,我被深度学习深深吸引并逐渐开始学习相关知识。研究生毕业后,我继续从事算法相关的工作,具体而言是深度学习算法在图像领域的应用,也就是常说的计算机视觉算法。
MXNet和PyTorch这两个框架我都非常喜欢,不过目前市面上关于MXNet框架的书籍较少,而且MXNet发展至今各种接口比较稳定,用户体验挺不错的,所以最终决定以MXNet框架来写这本深度学习实战教程。MXNet是亚马逊官方维护的深度学习框架,在灵活性和高效性方面都做得很棒,非常推荐读者学习。
本书的写作难度比想象中要大许多,在写作过程中许多零散的知识点需要想办法串联起来,让不同知识储备的人都能看懂,许多环境依赖需要从头到尾跑一遍来确认清楚。写书和写博客(AI之路)最大的区别在于书籍在出版后修正比较麻烦,不像博客,随时发现错误都可以修改,因此在写作过程中对许多细节和措辞都推敲了很久,自己也从中学到了许多。
读者对象
随着深度学习的快速发展和相关学习资料的出版,深度学习入门门槛越来越低,竞争也越来越激烈,相关从业者不仅要有坚实的算法基础,更要具备一定的实战经验,相信本书能够帮助你更好地入门深度学习。
本书面向的读者为:
计算机视觉算法从业者或爱好者
准备入门深度学习的读者
使用MXNet框架进行算法实现的读者
本书特色
假如一本书只是单纯介绍算法内容,那其实和直接看论文没有太大区别;假如一本书只是单纯介绍框架接口,那其实和直接看接口文档没有太大区别。在笔者看来,算法是思想,框架是工具,用框架实现算法才能体现算法的价值,因此这本书将算法和框架结合起来,通过讲解算法和个人项目经验介绍如何使用MXNet框架实现算法,希望能够帮助读者领略算法之美。
本书是从一名算法工程师的角度出发介绍算法实现,整体上偏基础和细节,能够帮助入门者少走弯路。随着这几年深度学习的快速发展,众多深度学习框架对各类接口的封装都很完善,使用起来非常方便,但是部分深度学习入门者仅仅停留在跑通demo却不理解细节内容的层面,这也常常被人调侃有些浮躁,通过本书,笔者希望读者不仅能够灵活调用这些接口实现算法,而且能够理解这些接口的内在含义,不断夯实自己的算法基础。
如何阅读本书
本书分为四大部分:
第一部分为准备篇(第1~2章),简单介绍深度学习相关的基础背景知识、深度学习框架MXNet的发展过程和优缺点,同时介绍基础开发环境的构建和docker的使用,帮助读者构建必要的基础知识背景。
第二部分为基础篇(第3~7章),介绍MXNet的几个主要模块,介绍MXNet的数据读取、数据增强操作,同时介绍了常用网络层的含义及使用方法、常见网络结构的设计思想,以及介绍模型训练相关的参数配置。
第三部分为实战篇(第8~10章),以图像分类、目标检测和图像分割这三个常用领域为例介绍如何通过MXNet实现算法训练和模型测试,同时还将结合MXNet的接口详细介绍算法细节内容。
第四部分为扩展篇(第11~12章),主要介绍Gluon和GluonCV。Gluon接口是MXNet推出的用于动态构建网络结构的重要接口,GluonCV则是一个专门为计算机视觉任务服务的深度学习库。
本书按照由浅至深的顺序进行编写,如果你是一名初学者,那么建议从第1章的基础理论知识开始学习,如果你是一名经验丰富的资深用户,能够理解MXNet的相关基础知识和使用技巧,那么你可以直接阅读实战部分的内容。
勘误和支持
致谢
首先要感谢MXNet的开发者们,是你们创造并一直维护这个高效便捷的深度学习框架,让众多深度学习爱好者能够通过MXNet享受算法带来的乐趣。
感谢MXNet社区中每一位为MXNet的发展和推广做出贡献的朋友,是你们带领我走进MXNet并逐渐喜欢上它,你们的活力与坚持将使得MXNet的明天更加美好。
感谢机械工业出版社华章公司的杨福川老师、李良老师和张锡鹏老师,在这一年多的时间中始终支持我的写作,你们的鼓励和帮助引导我顺利完成全部书稿。
感谢那些通过华章鲜读购买和阅读早期电子版书籍的读者们,你们的支持让我更加有动力不断完善这本书的内容,也让我更加确信自己在做一件非常有意义的事情。
最后感谢我的家人将我培养成人,你们永远是我最坚实的后盾!
谨以此书献给众多热爱深度学习算法及MXNet的朋友们!
魏凯峰
CONTENTS
目 录
前言
第1章 全面认识MXNet1
1.1 人工智能、机器学习与深度学习2
1.1.1 人工智能2
1.1.2 机器学习2
1.1.3 深度学习4
1.2 深度学习框架4
1.2.1 MXNet6
1.2.2 PyTorch6
1.2.3 Caffe/Caffe27
1.2.4 TensorFlow7
1.2.5 其他7
1.3 关于MXNet8
1.3.1 MXNet的发展历程8
1.3.2 MXNet的优势9
1.4 MXNet开发需要具备的知识10
1.4.1 接口语言11
1.4.2 NumPy11
1.4.3 神经网络11
1.5 本章小结12
第2章 搭建开发环境13
2.1 环境配置14
2.2 使用Docker安装MXNet19
2.2.1 准备部分19
2.2.2 使用仓库安装Docker20
2.2.3 基于安装包安装Docker23
2.2.4 安装nvidia-docker23
2.2.5 通过Docker使用MXNet25
2.3 本地pip安装MXNet27
2.4 本章小结29
第3章 MXNet基础31
3.1 NDArray31
3.2 Symbol37
3.3 Module43
3.4 本章小结48
第4章 MNIST手写数字体分类50
4.1 训练代码初探52
4.2 训练代码详细解读55
4.2.1 训练参数配置56
4.2.2 数据读取59
4.2.3 网络结构搭建59
4.2.4 模型训练61
4.3 测试代码初探62
4.4 测试代码详细解读64
4.4.1 模型导入64
4.4.2 数据读取66
4.4.3 预测输出67
4.5 本章小结68
第5章 数据读取及增强69
5.1 直接读取原图像数据70
5.1.1 优点及缺点70
5.1.2 使用方法71
5.2 基于RecordIO文件读取数据75
5.2.1 什么是RecordIO文件75
5.2.2 优点及缺点76
5.2.3 使用方法76
5.3 数据增强78
5.3.1 resize79
5.3.2 crop83
5.3.3 镜像89
5.3.4 亮度90
5.3.5 对比度92
5.3.6 饱和度 94
5.4 本章小结95
第6章 网络结构搭建97
6.1 网络层98
6.1.1 卷积层98
6.1.2 BN层106
6.1.3 激活层108
6.1.4 池化层111
6.1.5 全连接层114
6.1.6 损失函数层116
6.1.7 通道合并层119
6.1.8 逐点相加层121
6.2 图像分类网络结构122
6.2.1 AlexNet123
6.2.2 VGG124
6.2.3 GoogleNet125
6.2.4 ResNet128
6.2.5 ResNeXt130
6.2.6 DenseNet131
6.2.7 SENet132
6.2.8 MobileNet134
6.2.9 ShuffleNet136
6.3 本章小结138
第7章 模型训练配置140
7.1 问题定义141
7.2 参数及训练配置142
7.2.1 参数初始化142
7.2.2 优化函数设置144
7.2.3 保存模型145
7.2.4 训练日志的保存146
7.2.5 选择或定义评价指标147
7.2.6 多GPU训练150
7.3 迁移学习151
7.4 断点训练153
7.5 本章小结154
第8章 图像分类156
8.1 图像分类基础知识157
8.1.1 评价指标158
8.1.2 损失函数160
8.2 猫狗分类实战160
8.2.1 数据准备161
8.2.2 训练参数及配置165
8.2.3 数据读取168
8.2.4 网络结构搭建170
8.2.5 训练模型171
8.2.6 测试模型176
8.3 本章小结179
第9章 目标检测180
9.1 目标检测基础知识182
9.1.1 数据集184
9.1.2 SSD算法简介188
9.1.3 anchor189
9.1.4 IoU194
9.1.5 模型训练目标195
9.1.6 NMS199
9.1.7 评价指标mAP201
9.2 通用目标检测202
9.2.1 数据准备203
9.2.2 训练参数及配置205
9.2.3 网络结构搭建208
9.2.4 数据读取215
9.2.5 定义训练评价指标218
9.2.6 训练模型220
9.2.7 测试模型221
9.4 本章小结224
第10章 图像分割225
10.1 图像分割226
10.1.1 数据集227
10.1.2 评价指标229
10.1.3 语义分割算法230
10.2 语义分割实战231
10.2.1 数据准备232
10.2.2 训练参数及配置233
10.2.3 数据读取237
10.2.4 网络结构搭建240
10.2.5 定义评价指标245
10.2.6 训练模型249
10.2.7 测试模型效果251
10.3 本章小结253
第11章 Gluon255
11.1 Gluon基础256
11.1.1 data模块256
11.1.2 nn模块260
11.1.3 model zoo模块265
11.2 CIFAR10数据集分类267
11.2.1 基于CPU的训练代码267
11.2.2 基于GPU的训练代码272
11.2.3 测试代码275
11.3 本章小结276
第12章 GluonCV278
12.1 GluonCV基础279
12.1.1 data模块280
12.1.2 model zoo模块285
12.1.3 utils模块292
12.2 解读ResNet复现代码293
12.2.1 导入模块296
12.2.2 命令行参数设置296
12.2.3 日志信息设置297
12.2.4 训练参数配置298
12.2.5 模型导入300
12.2.6 数据读取301
12.2.7 定义评价指标303
12.2.8 模型训练303
12.3 本章小结308
机器学习 深度学习
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。