内容简介
这是一本能指导读者快速掌握PyTorch和深度学习的著作,从PyTorch的原理到应用,从深度学习到强化学习,本书提供了全栈解决方案。<br />第1版上市后销量和口碑俱佳,是深度学习领域的畅销书,被誉为PyTorch领域的标准著作。第2版在第1版的基础上,去芜存菁,与时具进,根据PyTorch新版本全面升级,技术性、实战性、针对性、丰富性、易读性均得到了进一步提升,必定能帮助读者更轻松、更高效地进入深度学习的世界。<br />全书一共19章,在结构上分为三大部分:<br />第1部分(第1~4章) PyTorch基础<br />首先有针对性地讲解了Python和PyTorch的基石NumPy中的关键知识,然后详细讲解了PyTorch的基础知识、神经网络工具箱和数据处理工具箱等内容,帮助读者快速了解和掌握PyTorch。<br />第二部分(第5~10章) 深度学习基础<br />依次讲解了机器学习、视觉处理、自然语言处理、注意力机制、目标检测、语义分割、生成式深度学习等机器学习和深度学习的核心技术的原理和使用。<br />第三部分(第11~17章) 深度学习实践<br />通过实战案例的方式,详细讲解了PyTorch在人脸检测和识别、迁移学习、中英文互译、图像分类、语义分割、生成式网络、对抗攻击等领域的应用和解决方案。<br />第四部分(第18-19章) 强化学习<br />重点介绍了强化学习和深度强化学习的基础理论、常用算法及相关实例。<br />更为重要的是,为了让本书通俗易懂,在内容安排和写作方式上也颇花了一番心思。内容选择上,广泛涉猎、重点突出、注重实战;内容安排上,实例切入、由浅入深、循序渐进;表达形式上,深度抽象、化繁为简、用图说话。<br />
目录
前言<br />第1版前言<br />第一部分 PyTorch基础<br />第1章 NumPy基础知识2<br />1.1 生成NumPy数组3<br />1.1.1 数组属性4<br />1.1.2 利用已有数据生成数组4<br />1.1.3 利用 random 模块生成数组5<br />1.1.4 生成特定形状的多维数组7<br />1.1.5 利用arange、linspace <br /> 函数生成数组8<br />1.2 读取数据9<br />1.3 NumPy的算术运算11<br />1.3.1 逐元素操作11<br />1.3.2 点积运算12<br />1.4 数组变形13<br />1.4.1 修改数组的形状13<br />1.4.2 合并数组16<br />1.5 批处理19<br />1.6 节省内存20<br />1.7 通用函数21<br />1.8 广播机制23<br />1.9 小结24<br />第2章 PyTorch基础知识25<br />2.1 为何选择PyTorch25<br />2.2 PyTorch的安装配置26<br />2.2.1 安装CPU版PyTorch26<br />2.2.2 安装GPU版PyTorch28<br />2.3 Jupyter Notebook环境配置30<br />2.4 NumPy与Tensor31<br />2.4.1 Tensor概述31<br />2.4.2 创建Tensor32<br />2.4.3 修改Tensor形状34<br />2.4.4 索引操作35<br />2.4.5 广播机制35<br />2.4.6 逐元素操作36<br />2.4.7 归并操作37<br />2.4.8 比较操作37<br />2.4.9 矩阵操作38<br />2.4.10 PyTorch与NumPy比较39<br />2.5 Tensor与autograd39<br />2.5.1 自动求导要点40<br />2.5.2 计算图40<br />2.5.3 标量反向传播41<br />2.5.4 非标量反向传播42<br />2.5.5 切断一些分支的反向传播45<br />2.6 使用NumPy实现机器学习任务47<br />2.7 使用Tensor及autograd实现机器<br /> 学习任务49<br />2.8 使用优化器及自动微分实现机器<br /> 学习任务51<br />2.9 把数据集转换为带批量处理功能的<br /> 迭代器52<br />2.10 使用TensorFlow 2实现机器<br /> 学习任务54<br />2.11 小结55<br />第3章 PyTorch神经网络工具箱56<br />3.1 神经网络核心组件56<br />3.2 构建神经网络的主要工具57<br />3.2.1 nn.Module57<br />3.2.2 nn.functional58<br />3.3 构建模型59<br />3.3.1 继承nn.Module基类构建模型59<br />3.3.2 使用nn.Sequential按层<br /> 顺序构建模型60<br />3.3.3 继承nn.Module基类并应用<br /> 模型容器来构建模型63<br />3.3.4 自定义网络模块66<br />3.4 训练模型68<br />3.5 实现神经网络实例69<br />3.5.1 背景说明69<br />3.5.2 准备数据70<br />3.5.3 可视化源数据71<br />3.5.4 构建模型72<br />3.5.5 训练模型72<br />3.6 小结74<br />第4章 PyTorch数据处理工具箱75<br />4.1 数据处理工具箱概述75<br />4.2 utils.data76<br />4.3 torchvision78<br />4.3.1 transforms78<br />4.3.2 ImageFolder79<br />4.4 可视化工具81<br />4.4.1 TensorBoard简介81<br />4.4.2 用TensorBoard可视化<br /> 神经网络82<br />4.4.3 用TensorBoard可视化损失值83<br />4.4.4 用TensorBoard可视化特征图84<br />4.5 小结85<br />第二部分 深度学习基础<br />第5 章 机器学习基础88<br />5.1 机器学习的基本任务88<br />5.1.1 监督学习89<br />5.1.2 无监督学习89<br />5.1.3 半监督学习90<br />5.1.4 强化学习90<br />5.2 机器学习的一般流程90<br />5.2.1 明确目标91<br />5.2.2 收集数据91<br />5.2.3 数据探索与预处理91<br />5.2.4 选择模型及损失函数91<br />5.2.5 评估及优化模型92<br />5.3 过拟合与欠拟合93<br />5.3.1 权重正则化93<br />5.3.2 dropout正则化94<br />5.3.3 批量归一化97<br />5.3.4 层归一化99<br />5.3.5 权重初始化99<br />5.4 选择合适的激活函数100<br />5.5 选择合适的损失函数101<br />5.6 选择合适的优化器103<br />5.6.1 传统梯度优化算法104<br />5.6.2 批量随机梯度下降法105<br />5.6.3 动量算法106<br />5.6.4 Nesterov动量算法108<br />5.6.5 AdaGrad算法109<br />5.6.6 RMSProp算法111<br />5.6.7 Adam算法112<br />5.6.8 Yogi算法113<br />5.6.9 使用优化算法实例114<br />5.7 GPU加速116<br />5.7.1 单GPU加速116<br />5.7.2 多GPU加速117<br />5.7.3 使用GPU时的注意事项120<br />5.8 小结121<br />第6章 视觉处理基础122<br />6.1 从全连接层到卷积层122<br />6.1.1 图像的两个特性123<br />6.1.2 卷积神经网络概述124<br />6.2 卷积层125<br />6.2.1 卷积核127<br />6.2.2 步幅129<br />6.2.3 填充130<br />6.2.4 多通道上的卷积131<br />6.2.5 激活函数134<br />6.2.6 卷积函数135<br />6.2.7 转置卷积136<br />6.2.8 特征图与感受野137<br />6.2.9 全卷积网络138<br />6.3 池化层139<br />6.3.1 局部池化140<br />6.3.2 全局池化140<br />6.4 现代经典网络142<br />6.4.1 LeNet-5模型142<br />6.4.2 AlexNet模型143<br />6.4.3 VGG模型143<br />6.4.4 GoogLeNet模型144<br />6.4.5 ResNet模型145<br />6.4.6 DenseNet模型146<br />6.4.7 CapsNet模型148<br />6.5 使用卷积神经网络实现CIFAR10<br /> ......
前言/序言
前 言<br />第2版说明<br />自本书第1版第1次于2019年10月印刷至今,已累计印刷了9次。在这3年的时间里,深度学习的发展可谓日新月异,其应用范围得到进一步拓展,同时出现了很多新的框架、新的方向。<br />在众多创新中,注意力机制是一个典型代表。注意力机制,尤其是以Transformer为基础的一些模型,在自然语言处理(NLP)领域取得了目前最好的效果(如SOTA),近几年研究人员把这种模型(如ViT模型、Swin-T模型等)应用到计算机视觉领域,也取得了巨大成功。<br />为此,本书第2版增强了注意力机制的相关内容,把注意力机制单独列为一章(即第8章),同时增加了注意力机制的应用实例,详细内容请参考第14章。<br />人工智能广泛应用于图像、视频、语音等诸多领域,比如人工智能在目标检测、语义分割等任务中的应用日益受到大家的关注,所以在第2版中我们增加了这方面的内容,具体可参考第9章和第15章。<br />除了这些新增内容外,第2版对很多原有内容进行了补充和完善,如PyTorch基础、优化算法、视觉处理基础、自然语言处理基础等内容。<br />读者对象<br />对机器学习、深度学习感兴趣的高校学生及工程师。<br />对Python、PyTorch、TensorFlow等感兴趣并希望进一步提升水平的高校学生及工程师。<br />如何阅读本书<br />本书分为三部分,共19章。<br />第一部分(第1~4章)为PyTorch基础,这是本书的基础部分,能为后续学习打好坚实基础。第1章介绍Python和PyTorch的基石—NumPy;第2章介绍PyTorch基础知识;第3章和第4章分别介绍PyTorch神经网络工具箱和数据处理工具箱等内容。<br />第二部分(第5~10章)为深度学习基础,这也是本书的核心部分。第5章为机器学习基础,也是深度学习基础,其中包含很多机器学习经典理论、算法和方法等内容;第6章为视觉处理基础,介绍卷积神经网络的相关概念、原理及架构等内容,并用PyTorch实现多个视觉处理实例;第7章介绍自然语言处理基础,重点介绍循环神经网络的原理和架构,同时介绍了词嵌入等内容,然后用PyTorch实现多个自然语言处理、时间序列方面的实例;第8章介绍注意力机制;第9章介绍目标检测与语义分割;第10章介绍生成式深度学习的相关内容,具体包括编码器-解码器模型、带注意力的编码器-解码器模型、生成式对抗网络及多种衍生生成器,同时使用PyTorch实现多个生成式对抗网络实例。<br />第三部分(第11~19章)为深度学习实战,即前面两部分知识的具体应用。这部分在介绍相关原理、架构的基础上,使用PyTorch实现多个深度学习的典型应用实例,最后介绍了强化学习、深度强化学习等内容。第11章用PyTorch实现人脸检测与识别;第12章用PyTorch实现迁移学习;第13章用PyTorch实现中英文互译;第14章使用ViT进行图像分类;第15章为语义分割实例;第16章介绍多个生成模型实例;第17章介绍对抗攻击原理及用PyTorch实现对抗攻击实例;第18章和第19章介绍了强化学习、深度强化学习基础知识及多个强化学习实例。<br />勘误和支持<br />在本书编写过程中得到了张魁、刘未昕等人的大力支持,他们负责整个环境的搭建和维护工作。由于笔者水平有限,书中难免存在错误或不准确的地方,恳请读者批评指正。你可以通过访问httpgithub.comWumg 3000feiguyunai下载代码和数据,也可以通过QQ交流群(493272175)进行反馈,非常感谢你的支持和帮助。<br />致谢<br />在本书编写过程中,得到了很多同事、朋友、老师和同学的大力支持!感谢博世的王冬、王红星;感谢上海交大慧谷的程国旗老师,上海大学的白延琴老师、李常品老师,上海师范大学的田红炯老师、李昭祥老师,以及赣南师范大学的许景飞老师等。<br />感谢机械工业出版社的编辑给予本书的大力支持和帮助。<br />最后,感谢我的爱人赵成娟,她在繁忙的教学之余帮助审稿,提出许多改进意见或建议。<br /><br />吴茂贵<br /><br /><br />PREFACE<br />第1版前言<br />为什么写这本书<br />在人工智能时代,如何尽快掌握人工智能的核心—深度学习呢?相信这是每个欲进入此领域的人面临的主要问题。目前,深度学习框架很多,如TensorFlow、PyTorch、Keras、FastAI、CNTK等,这些框架各有优点或不足,如何选择呢?是否有一些标准?有,我觉得适合自己的就是最好的。<br />如果你是一位初学者,建议你选择PyTorch,待有了一定的基础之后,可以学习其他框架,如TensorFlow、CNTK等。建议初学者选择PyTorch的主要依据如下。<br />1)PyTorch是动态计算图,更贴近Python的用法,并且PyTorch与Python共用了许多NumPy命令,降低了学习门槛,比TensorFlow更容易上手。<br />2)PyTorch需要定义网络层、参数更新等关键步骤,这非常有助于理解深度学习的核心;而Keras虽然也非常简单,容易上手,但封装粒度很粗,隐藏了很多关键步骤。<br />3)PyTorch的动态图机制在调试方面非常方便,如果计算图运行出错,马上可以跟踪问题。PyTorch与Python一样,通过断点检查就可以高效解决问题。<br />4)PyTorch的流行度仅次于 TensorFlow。而最近一年,在GitHub关注度和贡献者的增长方面,PyTorch与TensorFlow 基本持平。PyTorch 的搜索热度持续上涨,再加上FastAI的支持,PyTorch 将受到越来越多的机器学习从业者的青睐。<br />深度学习是人工智能的核心,随着大量相关项目的落地,人们对深度学习的兴趣也持续上升。不过掌握深度学习知识并不是一件轻松的事情,尤其是对机器学习或深度学习的初学者来说挑战更大。为了能让广大人工智能初学者或爱好者在较短时间内掌握深度学习基础及利用PyTorch解决深度学习问题,我们花了近一年时间打磨这本书,在内容选择、安排和组织等方面采用了如下方法。<br />1.内容选择:广泛涉猎+精讲+注重实战<br />深度学习涉及面比较广,且有一定门槛,没有一定广度很难达到一定深度,所以本书基本包括了机器学习、深度学习的主要内容,各章一般先简单介绍相应的组件(工具)或原理,这些内容有助于读者理解深度学习的本质。当然,如果只有概念、框架、原理、数学公式的介绍,可能显得有点抽象或乏味,所以,每章都配有大量实践案例,以便加深读者对原理和公式的理解,同时有利于把相关内容融会贯通起来。<br />2.内容安排:简单实例开始+循序渐进讲解<br />深度学习是一块难啃的“硬骨头”,对有一定开发经验和数学基础的读者如此,对初学者更是如此。其中卷积神经网络、循环神经网络、生成式对抗网络是深度学习的基石,同时也是深度学习的三大硬骨头。为了让读者更好地理解并掌握这些网络,我们采用循序渐进的方式,先从简单特例开始,然后逐步进入更一般性的内容介绍,最后通过一些PyTorch代码实例将其实现,整本书的结构及各章节内容安排都遵循这个原则。此外,一些优化方法也采用这种内容安排方式,如对数据集CIFAR10进行分类优化时,先用一般卷积神经网络,然后使用集成方法、现代经典网络,最后采用数据增强和迁移方法,不断提升模型精度,由最初的68%逐步提升到74%和90%,最后达到95%左右。<br />3.表达形式:让图说话,一张好图胜过千言万语<br />机器学习、深度学习中有很多抽象的概念、复杂的算法、深奥的理论等,如NumPy的广播机制、梯度下降对学习率敏感、神经网络中的共享参数、动量优化法、梯度消失或爆炸等,这些概念如果只用文字来描述,可能很难达到茅塞顿开的效果。但如果用一些图形来展现,再加上适当的文字说明,往往能取得非常好的效果,正所谓一张好图胜过千言万语。<br />除了以上谈到的3个方面,为了帮助大家更好地理解并且更快地掌握机器学习、深度学习这些人工智能的核心内容,本书还介绍了其他方法,用心的读者将能体会到。我们希望通过这些方法带给你不一样的理解和体验,使你感到抽象的数学不抽象、复杂的算法不复杂、难学的深度学习不难学。<br />至于人工智能(AI)的重要性,我想就不用多说了。如果说2016年前属于摆事实论证的阶段,2017年和2018年属于事实胜于雄辩的阶段,那么2019年及以后就进入百舸争流、奋楫者先的阶段。目前各行各业都忙于AI+,大家都希望通过AI来改造传统流程、传统结构、传统业务、传统架构,其效果犹如用电改造原有的各行各业一样。<br />本书特色<br />本书特色概括来说就是:把理论原理与代码实现相结合;找准切入点,从简单到一般,把复杂问题简单化;图文并茂使抽象问题直观化;实例说明使抽象问题具体化。希望本书能带给你新的视角、新的理解,甚至更好的未来。<br />读者对象<br />对机器学习、深度学习感兴趣的高校学生及工程师。<br />对Python、PyTorch、TensorFlow等感兴趣并希望进一步提升水平的高校学生及工程师。<br />如何阅读本书<br />本书分为三部分,共16章。<br />第一部分(第1~4章)为PyTorch基础,这是本书的基础,能为后续章节的学习打下坚实基础。第1章介绍Python和PyTorch的基石—NumPy;第2章介绍PyTorch基础知识;第3章和第4章分别介绍PyTorch神经网络工具箱和数据处理工具箱等内容。<br />第二部分(第5~8章)为深度学习基本原理,也是本书的核心部分,包括机器学习流程、常用算法和技巧等内容。第5章为机器学习基础,也是深度学习基础,其中包含很多机器学习经典理论、算法和方法等内容;第6章为视觉处理基础,介绍卷积神经网络的相关概念、原理及架构等内容,并用PyTorch实现多个视觉处理实例;第7章介绍自然语言处理基础,重点介绍循环神经网络的原理和架构,同时介绍了词嵌入等内容,然后用PyTorch实现多个自然语言处理、时间序列方面的实例;第8章介绍生成式深度学习的相关内容,具体包括编码器—解码器模型、带注意力的编码器—解码器模型、生成式对抗网络及多种衍生网络,同时用PyTorch实现多个生成式对抗网络实例。<br />第三部分(第9~16章)为实战部分,即前面两部分知识的具体应用,这部分在介绍相关原理、架构的基础上,用PyTorch具体实现多个深度学习的典型实例,最后介绍了强化学习、深度强化学习等内容。第9章用PyTorch实现人脸检测与识别;第10章用PyTorch实现迁移学习;第11章用PyTorch实现中英文互译;第12章实现多个生成式网络实例;第13章主要介绍如何进行模型迁移;第14章介绍对抗攻击原理及用PyTorch实现对抗攻击实例;第15章和第16章介绍了强化学习、深度强化学习基础及多个强化学习实例