gitbook/PyTorch深度学习实战/docs/425450.md
2022-09-03 22:05:03 +08:00

78 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开篇词 | 如何高效入门PyTorch
你好我是方远欢迎你跟我一起学习PyTorch。
先做个自我介绍吧我曾先后供职于百度和腾讯两家公司任职高级算法研究员目前在一家国际知名互联网公司Line China担任数据科学家从事计算机视觉与自然语言处理相关的研发工作每天为千万级别的流量提供深度学习服务。
想一想我进入机器学习与深度学习的研究和应用领域已经有10年的时间了这是个很有意思的过程。在人工智能快速发展的背景下各种各样的深度学习框架层出不穷有当下的主流也有如今的新秀。
为什么我会这么说呢这其实可以追溯到我的研究生时期。最早我只是把PyTorch打上了一个新秀的标签记得那时候深度学习的浪潮才刚刚兴起传统的机器学习开始转到深度学习但是我们能选的框架却十分有限。
当时在学术界流行的一个深度学习框架是Theano可能有的同学都没有听说过它。这个框架就像是祖师爷般的存在从2008年诞生之后的很长一段时间中它都是深度学习开发和研究的行业标准。
为了复现论文中的算法我开始学习Theano。接触之后我发现它的声明式编程无论是风格还是逻辑都十分奇特。而且那时候的学习资料很匮乏只能啃官方的说明文档。如此一来我觉得Theano十分晦涩难学入门门槛非常高。
后来我去到了互联网大厂的核心部门工作。那时学术界已经涌现出了很多深度学习方面的研究而工业界才刚刚开始将深度学习技术落地。Google 的 TensorFlow 框架于2015年正式开源而我们的团队也开始着手把深度学习技术应用于文本处理等方向。
2017年Google发布了TensorFlow 1.0版本到了2019年又发布了2.0新版本。TensorFlow 1.x版本时期TensorFlow框架拥有大量的用户。不过问题也非常明显主要的弊端就是**框架环境配置不兼容,新老版本函数差异也很大,且编程困难**。
但凡涉及版本更新总会出现API变化前后版本不兼容的问题。并且当我阅读别人代码的时候TensorFlow 1.x的可读性也不是很高。这些问题都增加了我的学习成本。直到TensorFlow 2.x版本TensorFlow逐渐借鉴了PyTorch的优点进行了自我完善。
而与 TensorFlow 同一时期横空出世,也拥有众多用户的一个深度学习框架还有 Keras。Keras 的 API 对用户十分友好,使用起来很容易上手。如果有什么想法需要快速实验,看一看效果,那 Keras 绝对是不二的选择。
但是高度模块化的封装也同样会带来弊端看起来学习Keras似乎十分容易但我很快就遇到了瓶颈。高度封装就意味着不够灵活比如说如果需要修改一些网络底层的结构Keras 所提供的接口就没有支持。在使用Keras的大多数时间里我们主要都停留在调用接口这个阶段很难真正学习到深度学习的内容。
直到 PyTorch 出现随着使用它的人越来越多其技术迭代速度跟生态发展速度都很迅猛。如果你在GitHub找到了一个PyTorch项目相关的开源代码我们可以很容易移植到自己的项目中来直接站在巨人的肩膀上看世界。
而且相比前面那些主流框架,**PyTorch有着对用户友好的命令式编程风格**。PyTorch设计得更科学无需像TensorFlow那样要在各种API之间切换操作更加便捷。
PyTorch 的环境配置也很方便各种开发版本都能向下兼容不存在老版本的代码在新版本上无法使用的困扰而且PyTorch跟NumPy的风格比较像能轻易和Python生态集成起来我们只需掌握NumPy和基本的深度学习概念即可上手在网络搭建方面也是快捷又灵活。
另外PyTorch 在debug代码的过程也十分方便可以随时输出中间向量结果。用PyTorch就像在Python中使用print一样简单只要把一个pdb断点扔进PyTorch模型里直接就能用。
因为它的优雅灵活和高效可用吸引了越来越多的人学习。如果还有人只把PyTorch当成一个新秀觉得PyTroch不过是个“挑战者”试图在TensorFlow主导的世界里划出一片自己的地盘。那么数据可以证明这种想法已经时过境迁。事实上PyTorch无论在学术界还是在工业界都已经霸占了半壁江山。
从学术界来看2019年之前TensorFlow还是各大顶会论文选择的主流框架而2019年之后顶会几乎成了PyTorch的天下此消彼长PyTorch只用了一年的时间。
![](https://static001.geekbang.org/resource/image/96/57/96afc1a6981ea2f8a2d847584ccb7c57.jpg?wh=900x559)
要知道,**机器学习这个领域始终是依靠研究驱动的,工业界自然也不能忽视科学研究的成果**。就拿我所在的团队来说现在也已经逐步向PyTorch框架迁移新开展的项目都会首选用PyTorch框架进行实现。
不得不说,**PyTorch的应用范围已经逐渐扩大同时也促进了其生态建设的发展**。由于现在越来越多的开发者都在使用PyTroch一旦我们的程序遇到了error或bug很容易就可以在开发论坛上寻找到解决方案。
**总之一旦你掌握了PyTorch就相当于走上了深度学习、机器学习的快车道。**以后学习其他深度学习框架也可以快速入门,融会贯通。
如果你即将或者已经进入了深度学习和机器学习相关领域PyTorch能够帮你快速实现模型与算法的验证快速完成深度学习模型部署提供高并发服务还可以轻松实现图像生成、文本分析、情感分析等有趣的实验。另外有很多算法相关的岗位也同样会要求你熟练使用PyTorch等工具。
可以探索的方向还有很多这里就不一一列举了。那么问题来了既然PyTorch有这么多优点我们要怎样快速上手呢
只看原理好比空中楼阁,而直接实战对初学者来说又相对困难。因此我推荐的方法是,先理一个整体框架,有了整体认知之后,再通过实战练习巩固认知。
具体来说我们要先把框架的基本语法大致了解一下然后尽快融入到一个实际项目当中看一看在实际任务中我们是怎么基于框架去解决一个问题的。这个专栏也正是沿着这样一个思路设计的。我在专栏里给你提供了丰富的代码和实战案例可以帮助你快速上手PyTorch。
![图片](https://static001.geekbang.org/resource/image/08/7a/08b96da4677066769fe3e6246f70237a.jpg?wh=1920x1418 "专栏知识地图")
通过这个专栏,你将会熟练使用 PyTorch 工具,解决自己的问题,这是这个专栏要实现的最基础的目标。
除了掌握工具用法之上,我希望交付的终点是让你获得分析问题的能力和解决问题的方法,让你懂得如何优化你自己的算法与模型。在学习经验方面,我希望这个专栏为你打开一扇窗,让你知道走深度学习这条路,需要有怎样的知识储备。
为了让你由入门到精通,我把专栏分成了三个递进的部分。
**基础篇**
简要介绍PyTorch的发展趋势与框架安装方法以及 PyTorch的前菜——NumPy的常用操作。我们约定使用PyTorch 1.9.0 版本以及默认你已经掌握了Python编程与简单的机器学习基础不过你也不用太过担心遇到新知识的我基本都会从0开始讲起的。
**模型训练篇**
想要快速掌握一个框架就要从核心模块入手。在这个部分会结合深度学习模型训练的一系列流程为你详解自动求导机制、搭建网络、更新模型参数、保存与加载模型、训练过程可视化、分布式训练等等模块带你具体看看PyTorch 能给我们提供怎样的帮助。通过这个部分的学习你就能基于PyTorch搭建网络模型了。
**实战篇**
我们整个专栏都是围绕 PyTorch 框架在具体项目实践中的应用来讲的,所以最后我还会结合当下流行的图像与自然语言处理任务,串联前面两个模块的内容,为你深入讲解 PyTorch 如何解决实际问题。
总之,**除了交付给你一个系统的PyTorch技术学习框架我还希望给你传递我在深度学习这条路上的经验思考**。
最后给你一点建议对于学习PyTorch来说边学边查、边练边查是个很好的方法。因为在我们实际做项目的时候肯定会遇到一些之前没有使用过的函数自己去查的话可以很好地加强记忆。
当然我也会尽心做好一个引路人带你一步步实现课程目标也期待你能以更加积极的状态投入到本次的学习之旅。现在就让我们一起探索PyTorch打开深度学习的大门吧