作者:黄璞
链接:https://www.zhihu.com/question/41667903/answer/109611087
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
前言:其实TensorFlow本身仅仅是一个分布式的高性能计算框架,想要用TF做深度学习,仅仅学习这个框架本身是没有太大意义的。因此应该将TF看作技术路线中的一个核心点,去掌握整个开发所需要的必要技术,知识。尤其是深度学习的基本原理,这对日后搭建模型,模型调参以至提出新的模型都是极其有用的。
第一篇学习之路写于2016年6月份,时过境迁,特别是深度学习这个日新月异的领域,隔了那么久,不得不说已经有些过时了,并且随着学习的深入,越发觉得之前的学习之路过于笼统,加之TensorFlow发布了1.0正式版,因此整理一下,再次写一篇。这次在内容的结构上将会大体分为三种,首先是公共基础部分,这个无需多解释。另外,一个是偏向应用性质的快节奏(fast peace),针对不想也没必要深入了解理论知识希望尽快应用的人群,另一种是偏向研究性质的人群(hard way),针对例如研究生之类希望深入理论知识的人群。当然,hard way的前提是fast peace。但是写法上,并没有分别写,因为某种意义上这两种是相互包含的,分开写会显得冗长与重复,因此采用粗体标记提示特定部分是属于哪一种。
有些技术在知乎是不适合公开讨论的,因此还是要贴上自己这篇博客的链接:新手向的TensorFlow学习之路2(Learning paths 2)
1. 稳定的网络【公共基础】:这是个不是技术的技术,TensorFlow毕竟出自Google,官方文档访问不是很稳定。
2. Github【公共基础】:这是个开源程序的网站,Linux内核就在这个网站托管。Github的核心是Git,一种版本控制系统,已经逐渐取代SVN。这个网站托管了很多高质量的或者说世界顶尖的开源项目,比如TensorFlow。学习一下这个网站如何使用,注册个账号,学习一下Git的使用方法。这个网站有自己的tutorial和guide。而且后期自己的项目管理多半也会用到git,所以,早点学习肯定是有好处的。
【fast peace(即简略的快节奏教程,下同)】:
1. Git 参考手册(推荐)
【hard way(即大而全的完整或者正式教程,下同)】:
3. Git Tutorial
3. Python【公共基础】:这是一种非常流行的脚本语言,庞大的第三方库可以快速写出短小容易理解的代码,而且也是TensorFlow的推荐开发语言。不仅仅是对于TensorFlow这门语言很重要,对于整个机器学习,应用层面放眼望去基本就是Python与R的天下了,而R更偏向与统计学领域,深度学习Python简直是红透了半边天,当然我是针对初学者,如果已经掌握了其他语言,例如Java,C++,那么其实理论上而言可以不用掌握Python,选择自己熟悉的语言的API即可。但是对于TensorFlow,只有Python的API最全面,文档社区也最完善(截至2017年3月),当然随着TensorFlow的发展都会完善,可是现在就要用呀:)。而且,最重要的是,对于已经掌握其他语言的人来说,学习Python不会花费太久的。并且,Pytohn写起来短小精悍,易于理解,很适合这种用来搭架子调用框架而且不怎么需要考虑效率的场景(一般来讲,最需要效率的部分框架会用C++实现,Python仅仅是作为顶层去调用)。另外,推荐学习Python3,这才是Python的未来,2.7的支持在2020年会停止。而且,后面会知道的,对于Python2.7向3的支持很多情况仅仅是import几个future包。
【fast peace】:
1. Tutorial – Learn Python in 10 minutes
【hard way】:
1. 廖雪峰的Python教程
4. Linux【公共基础】:TensorFlow的主要运行平台之一就是Linux,但是正式版对Windows的支持日趋完善,真的没时间学习Linux平台可以先在Windows上运行TensorFlow。不过,学习Linux真的用不了多久(当然是指做开发环境日常日用,立志做系统管理员还是要下一番功夫的)。推荐Ubuntu 16.04 LTS,这不仅是“新手友好”的发行版,也是Google很多产品的官方支持版本,官方支持就会带来很多便捷以及少一些”坑“。LTS(长期支持版本)的加成保证了系统的稳定(稳定不仅指运行稳定,更是指软件环境,例如python不会突然默认变成3.6,gcc不会突然就默认变成6,插一句,之所以这么说,是因为以前用的是Arch,装了TensorFlow一直跑的很开心,直到有天突然发现跑不起来了,原来是Arch升级了一下Python的默认版本变成了3.6了XD。)
【fast peace】:
1. 我的知乎回答
【hard way】:
1. UNIX Tutorial for Beginners
3. Linux工具快速教程
5. 深度学习–概念与基础:
【fast peace】(偏向概念介绍,introduction):
1. 深度学习wiki
【hard way】(偏向概念解释,数学推导,基本原理):
两本经典中的经典书籍:第一本倾向于理论阐述,第二本则是倾向于直观解释。
2. Neural Networks and Deep Learning
第三本则是代码应用向的,使用Theano从零搭建各种常见的网络结构,虽然是Theano,但是基本思想是统一的。
6. Python常用科学计算库【公共基础】:
1. Numpy
2. Sklearn
3. Matplotlib
4. Pandas
虽然说是公共基础部分,但是系统学习这几个库,也不是一件容易的事,而且很耗时间。因此还是遵循够用即可的原则。但是还是想列在这里,因为后来发现如果这几个库掌握的比较熟练,数据预处理后处理都能极大地节省时间,当你还在苦苦想如何设计预处理方法的时候,其实去查一查手册,大概率在这几个库里已经写好了。这几个库的官方文档都很优秀,比如Pandas的10 Minutes to pandas。因此,闲余时间多看看官方tutorial即可。
7. TensorFlow:
【fast peace】(偏向应用性质,到手即用,pretrained-models,tflearn,keras等):
1. TensorFlow的三份白皮书,对TensorFlow的整体有个把握或者说印象是很有必要的,对后期的“图编程”,优化,都很有启发。
2. TFLearn,基于TensorFlow的高级API,不需要了解太多细节,应用向的可以直接看这个。
【hard way】(偏向理论性质,调用基本API手写,自定义layer,自定义kernel,自定义optimizer等):
1. 官网教程,Get Start,Programmer’s guide,Tutorials,Performance过一遍。
8. 论文阅读路线图【hard way】: github上有个很有名的Deep Learning papers reading roadmap,已经过万stars,从事深度学习科研者的必读清单,在我写的上一篇学习之路中,虽然整理了很多论文,但是过于杂乱,在此就不做引用啦。
9. 相关博客等其他资源:
- 先放上我的博客啦(笑)
- Beginner-level tutorials for a powerful framework
- CS231n: Convolutional Neural Networks for Visual Recognition
- CS224n: Natural Language Processing with Deep Learning
- UFLDL Tutorial
- UFLDL教程(上面UFLDL Tutorial旧版,但是是中文的)
- First Contact With TensorFlow
- Deep Learning
- colah’s blog(推荐,写了很多晦涩概念可视化的博客)
- DeepLearning4J(虽然是一个面向Java的深度学习框架,但是文档很好,通用性也很强)
10. 不错的资源类网站:
1. arxiv-sanity
2. GitXiv
---------------------------------旧答案的分割线---------------------------------
发一波预告~最近刚用tensorflow搞完一个算是接近实际并且带有移动端应用外加inception retrain的项目,打算考试结束更新一波~:)
已更新(求助,如何使用删除线,<del>似乎无效)
TensorFlow已经发布1.0版本!
近期更新计划:
1.重新整理Learning path,将各个部分更加详尽阐述,同时给出合适的快速入手教程。
2.及时跟进最新进展,删除陈旧信息。
已更新(继续求助如何使用删除线,<del>似乎无效)
我在blog中总结了学习路线,针对新手。
新手向的Tensorflow学习之路(Learning paths)
文中的教程或者blog以及论文书籍基本上都是经典,推荐入门学习。
贴在这里:
在学习Tensorflow的过程中磕磕碰碰,总结一些个人心得记录于此,志同道合之友共勉~~
1.稳定的网络:Tensorflow毕竟出自Google,官方文档访问不是很稳定。而且一般来说,对于英文的文档,资料和疑问,Google搜索的结果要比Baidu好很多。(不是偏见,是各有所长,天气地图电影啥的,百度还是做的很好的)
2.Github:这是个开源程序的网站,Linux内核就在这个网站托管。Github的核心是Git,一种版本控制系统,已经逐渐取代SVN。这个网站托管了很多高质量的或者说世界顶尖的开源项目,比如Tensorflow。学习一下这个网站如何使用,注册个账号,学习一下Git的使用方法。这个网站有自己的tutorial和guide。
3.Linux: Tensorflow的主要运行平台就是Linux,目前在Windows上运行的方案是虚拟机,但是深度学习对计算要求还是比较高的,虚拟机效率不是太高,因此还是推荐在原生Linux中运行。新手推荐发行版是Ubuntu 或者Linux mint。这个可以自行搜索。学习Linux也有很多好处,因为很多开源软件都only linux的。
4.Python:这是一种非常流行的脚本语言,庞大的第三方库可以快速写出短小容易理解的代码,而且也是Tensorflow的推荐开发语言。教程太多了,这里给几个优秀的教程:官网教程,Learn Python the Hard Way,Python2.7教程
5.深度学习(Deep Learning,DL):虽然Tensorflow已经封装好了大部分DL的细节,但是如果不了解DL的相关核心概念,就会很难着手分析问题。首先强烈推荐这个教程,通读一遍,然后还有这个,可以快速浏览或者只看自己不太明白的地方,还有这个分块介绍的,还有几篇blog,这个和这个讲的是卷积神经网络。图像识别用的比较多的就是卷积神经网络,这两篇可以看看。
6.Tensorflow:前面都是铺垫,是为了更好地使用Tensorflow。官方的文档不错,可以从get started然后tutorial看起,有个中文的翻译版,但是更新不及时(官方已经v1.0,这个可能是v0.8或者v0.7),可能有坑,可以和英文对照着看,还有个Tensorflow的教程,也不错。有篇FIRST CONTACT WITH TENSORFLOW也不错。
7.优秀博客:Hackery, Math &amp; Design, Mike Bostock, http://colah.github.io/, Café, bonne nuit这几个都是我在学习中遇到的非常nice的blog,有时间读读定会有所收获。
8.经典论文及书籍:收集了一些DL的经典论文&书籍,有些杂乱,不过几乎都是经典,各取所需吧。百度云地址(密码: 4w91)。各位有更好的欢迎推荐,我会整理上传。
9.几篇原创TF相关文章(持续更新):如何理解TensorFlow中的batch和minibatch,结合TensorFlow PlayGround的简单神经网络原理解释,TensorFlow从源码安装,利用TF重训练Google Inception模型,在Android端使用TensorFlow
其中,Python,DL,Tensorflow是重点,其他都是辅助, 自己感觉够用即可,无需深入。学习中遇到困难首先向搜索引擎询问。
2017.4.3 更新:修正笔误,同时加了前言
2017.3.30 更新:修正一些笔误
2017.3.28 更新:完成了近期更新计划,重新整理了所有内容,同时及时跟进了新的内容
2017.2.17 更新:更新了在移动端使用TF的项目笔记,添加了近期更新计划
2016.11.25 更新:更新预告
2016.10.15 更新:更新了提及的软件版本号,添加了第九部分原创TF相关博文
2016.8.8 更新:更新了提及的软件版本号
2016.7.27 更新:重新排版,上传了资料
2016.7.6 更新:重新排版