关于 TensorFlow 入坑那些事儿

本文来自TensorFlow 开发者出道计划精选推荐第一篇,作者:管小亮。

:loudspeaker: 声明:

  • 本文有参考网上的大牛和机器学习专家无私奉献的资料,仅供学术交流,非商用。
  • 博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。
  • 此属于第一版本,若有错误,还需继续修正与增删,还望大家多多指点。

:books: 〇、故事的开始

正如每个童话都有一个奇幻的开始那般,今天要讲述的故事也不曾例外,它也有一个令人惊Σ(っ °Д °;)っ奇的…嗯~ o( ̄▽ ̄)o你懂的。

请允许我以这种方式开始它的传奇,TensorFlow 与 2015 年 11 月的某天,伴随着《TensorFlow:异构分布式系统上的大规模机器学习》的发布,正式宣布开源了,但是事情似乎并没有这么简单,因为以 Google 在业界的地位和影响力,绝不会是高开低走的局面,那么这个让人兴奋又迷茫的词汇到底是什么?

Tensor 什么?Flow 什么?TensorFlow 是什么东西?什么用途?Google 又为什么要开源?这是不是代表了什么?

如果你也曾和我一般好奇,便会打开翻译软件,或者Google翻译,或者别的什么(Google 打钱),似乎是个很不错的名字,只是不是向量,那它是什么?

与此同时,在技术圈外这个词似乎并没有什么重要的,可能考四六级的小伙伴会多背一个单词罢了,因为这个世界上总会有各种各样的 “震惊”,不然UC也不会没有以前那么火了(苦笑),即使你大力地和研究人员介绍,大家也显得毫无兴趣,因为彼时 MatLab 几乎独掌天下,人工智能专家,斯坦福教授,吴恩达先生开放的课程也是基于 MatLab 的,你应该能感受到当时 MatLab 的地位。

然而随着 2016 年 3 月 AlphaGo 以 4:1 战胜了韩国围棋世界冠军李世石,事情出现了巨大的转变,大家开始爆发了对于 AI 的热情,越来越多的研究和 AI 相关😄,越来越多的应用和 AI 相关,这一刻,我们终于破圈了,TensorFlow 作为现象级别的名词,终于被大家认知。

作为 Google Brain 开发的 DistBelief 的改进版本,TensorFlow 有很多优点,最重要的是基于 Google 开发维护的它,可以保障支持和开发的持续性,拥有难以想象的活跃社区,截止到此时(2020 年 11 月 29 日)TensorFlow 在 GitHub 上的开源项目总计有 8.3k Watch,151k Star,83.4k Fork,当之无愧的最火深度学习开源框架。

那么如果我很感兴趣或者我有需要的话,应该如何学习 TensorFlow?

让我们开始今天的正题!?!

PS:你可能会有一些问题,先不要着急,just follow me,然后看一下 Q & A,相信你的一些问题会得到解答的~

:books: 一、昨夜西风凋碧树,独上高楼,望尽天涯路

首先是老生常谈但是枯木又逢春的经典问题,如何学习?如何高效地学习?如何快速学会?我以自己为例,谈谈我的一些见解,可能我们不同,但是会为你打开一条通向新世界的大门!

一直以来学习方法界(我姑且这么称呼)有两大派别,每每打架,总会惊天动地,怪不得 古人说:文无第二,其中一派是认为 ”从头到尾,方方面面,系统地学习“ 才是人间正路;另一派是支持 ”从项目或其他实战途径出发,以战养战“ 方为正理。

我这里不去评判谁对谁错,毕竟一千个人心里有一千个哈姆雷特,从另一个角度去看,或许风景不同。

  • 如果你是时间充裕,资源充足,想做更多地工作,比如想给 Google 做算法开发,或者想给 TensorFlow 做底层调优,毫无疑问地,第一种流派对你的益处更大;

  • 如果你是项目需要,课题准备,想做更快的成果,比如想给 EI 做文章 ”灌水“,想给 国家自然科学基金 做打工人,毫无疑问地,第二种流派对你的益处更大;

根据自己的需要去决定如何做,才是我们需要考量的,而不是瞻前顾后,迟迟不肯下笔。

闲言少叙,有哪些资料是你需要看的呢?

:point_right:First but not the least,TensorFlow 技术文档,看到这里肯定有人会说,就这?就这当然不行,但是一直靠博客等野路子,总有一天你会吃到亏,不信你就把 Flag⛳ 立下来,吃亏了记得来给我留个言。

如何高效地看文档呢?在 TensorFlow 官方做过一次回答(TensorFlow 打钱,嗷嗷,自己人,那算了),链接🔗 我放在这里了,需要的自己去看看吧,《想让文档使用技能更进一步?实用版独家教程来了》,我来简单写几条新手比较着急想看的。

第一个就是,阅读原版英文技术文档,作为深度学习爱好者,研究者,从业者,你会发现学习英语的必要性。(:star::star::star::star::star:

第二个就是,拜托了,TensorFlow 官方文档是英文的,我英文不好,怎么办呢?官方中文网站正在拼命更新中ing,不过函数的功能目前还都是英文的(有点那个啥),所以你可以使用最笨的方法,由于中文网站不会识别出 Google 翻译插件,所以把简体中文改成 English,然后 Google 翻译中文即可,作为机翻的代表,相信你看过之后,能简单满足你的要求。(:star::star::star:

第三个就是,各种第三方网站翻译的中文文档,比如 W3Cschool,或者在线文档等等(记得打钱),虽然是翻译,但是相对比较圆润,符合大部分人使用的需要了,如果你实在无法读英文或者机翻中文,可以尝试。(:star:

:point_right:Second,阅读经典入门书籍,我只以自己看过和了解过的(了解就是跳着看的)为例。

第一个就是**《TensorFlow:实战Google深度学习框架》**。(:star::star::star::star:

作为电子工业出版社出版的最早的 TensorFlow 书籍之一,虽然不是很系统,很多内容都没有涉及到更深层甚至没有强化学习,但是书中对一些基础知识讲解的通俗易懂,比如你看代码时不懂的某一行,都有一些介绍,与此同时,有的部分会与现在的版本以及编译器不同,导致出现一些错误,通过 Google 搜索、社群和官方文档的方式,总能找到解决办法,在寻找解决办法的同时,进步会非常大。另外还简单介绍了 TensorFlow 官方自带的可视化工具 TensorBoard,作为初学者,是一本很良心的书。

新出的第二版本,将第一版本书中所有示例代码从 TensorFlow 0.9 升级到了 TensorFlow 1.4,升级 API 的同时,也补充了更多很多内容,比如新增了两章介绍 TensorFlow 高层封装以及自然语言领域应用,推荐大家抽出一些时间,快速看完并简单实践!!!

第二书就是**《Scikit-Learn 与 TensorFlow 机器学习》**。(:star::star::star::star::star:

这本书英语名字叫 《Hands-On Machine Learning with Scikit-Learn & TensorFlow》,几乎可以算是目前 TensorFlow 最受欢迎的书本之一了,原作者是前 Google 职员,领导了 Youtube 视频分类团队,可以算是资深机器学习顾问,各种资源网上也比较全。

基本上到了这里,就算你没有系统地看过深度学习理论或者 TensorFlow 学习等等,经过不断地滚动学习,你也有一个大概的了解了,那么你就需要做一些项目了。

:books: 二、衣带渐宽终不悔,为伊消得人憔悴

有哪些好看又好用的项目呢?

:point_right:第一,吴恩达深度学习。(:star::star::star::star::star:

作为是人工智能和机器学习领域国际上最权威的学者之一,吴恩达教授可以算是大网红了,他不仅大力推动了机器学习和深度学习的发展,还开放自己的三门课程,分别是 Coursera 《Machine Learning》,斯坦福 CS229,deeplearning.ai《深度学习专项课程》。不只是圈内人,圈外人也是知道的,可惜图灵奖陪跑(哭😭)。

在他的深度学习笔记中有包括的 TensorFlow 的部分,首先这部分算是一个科普入门,学完后对 TensorFlow 会有一定的理解,同时还有对应的习题和作业可以用来实践,当之无愧的学习佳作。

给我们 TensorFlow 打个小广告。

TensorFlow 官方团队与 TensorFlow 专业老师们,来了一场梦幻联动,在中国大学 MOOC 平台,发布了一个基于 TensorFlow 技术推广工程师 Laurence Moroney 制作的新手入门课程(中!文!版!),欢迎大家来参与。

:point_right:第二,弗吉尼亚理工博士 Amirsina Torfi 的 TensorFlow 课程。(:star::star::star::star::star:

教程、代码、笔记,你能想到的,都有,应有尽有,最喜欢这种系统资源,省得我东跑西跑了,建议跟一个完整的就可以了,不要被各种资源迷惑了双眼。

目前 Star 和 Fork 都挺多的,说明了质量上乘,除此之外,还在更新,进化成了 TensorFlow 2.x 版本,当之无愧的好项目。

从安装到网络结构,动图加上代码,谁用谁知道啊。

:point_right:第三,Kaggle 的 Digit Recognizer。(:star::star::star::star::star:

作为在线数据发掘和预测竞赛平台,他们会为一些公司的问题去设置比赛题目,最终公司会选出心中的最佳方案,并给与 5K-10K 美金作为奖金。除此之外,Kaggle 官方还会每年举办一次大规模的竞赛,奖金高达一百万美金。所以如果你说它是一个众包平台好像也没错。基本上就是任用最聪明的人来解决世界上最棘手的问题。

作为经典题目,Digit Recognizer 比赛可以说是做计算机视觉人无法跳过的一个门槛,而 MNIST 又是计算机视觉领域的 hello world 数据集,所以好好打打这个比赛就是你真正的入门。

资源推荐的太多就会让你有一种迷茫和无措地感觉,这种感觉我懂,你懂,别人却不一定懂,要相信量变导致质变,勤勤恳恳且踏踏实实地努力,成功还会远嘛?

:books: 三、众里寻他千百度,蓦然回首,那人却在,灯火阑珊处

虽说进度条过半了,却还是得叮嘱一句,千里之行,始于足下。

那么问题来了,如何安装 TensorFlow 呢?哈哈,吓死你。(如果真不会记得搜索搜索)

借用李沐大神地话说,深度学习就是炼丹,深度学习开源框架就是丹炉,所以注意几下几点:

Q & A

:zap:Q:如何选择 TensorFlow 1.x 和 TensorFlow 2.x?

A:

  • 首先,关注自己所在的领域是否一定需要高端甚至尖端的技术,如果需要,毫无疑问2.x,新发表的网络结构或者调参技巧或者奇淫技巧,都会更新在新版本的 TensorFlow 中,只需要调用即可;

  • 其次,关注自己是否需要更多的资料和社区,能否根据文档独立开发,如果可以,毫无疑问2.x,发展了这么多年,TensorFlow 1.x 的社区可以说是相当巨大且活跃了,你的朋友,同事,竞争毒手都在和你使用相同的框架,有问题 Google 或者 StackOverFlow 都可;

  • 然后,关注自己是不是更注意开源框架的稳定性和成熟性,包括部署等等,如果注意,毫无疑问1.x,新发布的版本必然会有新改动,那就意味着会有新 bug,所以必然不如之前版本稳定性高,一般新版本的前两个版本会是更稳定的;

  • 最后,关注自己对哪一个版本的代码更来电,选炼丹炉和选衣服是一样的,哪一个让你更有 feeling?毫无疑问会增加你学习的兴趣和动力,兴趣是最好的老师;

  • PS:个人主推的还是 2.x 版本,毕竟新版本会有新气象,很多bug都会被修复!!!

:zap:Q:如果在学习过程中,遇到了问题,要如何解决呢?

A:

  • 这就是我常说的社群作用,古话说的好,三个臭皮匠顶个诸葛亮,并不只是鸡汤,两个人的思维碰撞,往往会带来更多的灵感以及思路,所以不要只是闭门造车,多和别人交流交流,你会有不一样的看法。

:zap:Q:交流的渠道有哪些呢?

A:

官方沟通渠道:

  • TensorFlow 官方微信公众号:(在这里你可以了解 TensorFlow 核心基础,获取最新的产品资讯和应用案例!)
  • TensorFlow User Group:(在这里你可以找到更多志同道合的伙伴,在开源社区中做贡献,在社区活动中获得提升!)
  • TensorFlow CSDN 社区:(在这里你可以找寻专业内容和资源,也可以提问开发者,贡献自己的经验和项目!)
  • TensorFlow 知乎 专栏:(在这里你可以分享实用技术资源,也可以分享开发者经验!)
  • TensorFlow Bilibili 官方频道:(在这里你可以查看更多官方入门视频教程,也可以查看各个行业案例!)

个人沟通渠道:

  • 首先是你周围的人,或者同学,或者老师,或者非商业性质技术演讲,或者网上的 open lecture,或者开发者大会等等,都是你获取最新信息和讨论知识的渠道,三人行,必有我师。

  • 其次是你的网友,在网络上你会碰到更多的人,比如CSDN写博客的时候,你的读者,你的留言者,比如知乎问问题(知乎打钱)的时候,你的回答者,你的追更者,比如 Kaggle 打比赛时,你的队友,你的对手,指点的大佬。

  • 然后是你的家人,或许你会好奇家人不懂这个技术,如果成为我的社群,不要只是钻牛角尖,有时候和家人聊天中,也会获得一些东西,打开你的思路,当然不要太频繁地联系,哈哈。

  • 最后是你的前辈,无论什么时候,什么行业,都会有数不胜数地前辈,毕竟闻道有先后,术业有专攻,不要觉得他们,难以企及,难以联系,有时给你看不懂地论文作者发邮件,他会 surprise you,尝试一下总是好的。

  • 这些都可以是你的社群,不只是微信群,QQ群(腾讯打钱)。

:zap:Q:有什么是学习中要注意的嘛?

A:

  • 首先,不要畏难,大家都是人,天赋异禀也是人,总会需要时间才能成长,学习也是,慢慢学总会有所进益,有句话叫:”种树最好时间是十年前,其次是现在“,送给你;

  • 其次,不要骄傲,往往在你无法进步,或者被困在哪一个区域的时候,会觉得自己无所不能,这个时候往往是你的退步的时候,骄傲让人退步,谦虚让人进步;

  • 然后,多思多问,学而不思则罔,思而不学则殆,古人诚不欺我也;

  • 最后,仰望星空与脚踏实地。

:zap:Q:TensorFlow 1.x 总是有很多函数,让我很困惑,怎么办?

A:

多查多问多动手,作为 ”经验学科“,我们需要多学习和继承前人的经验,多总结有效经验,转化为自己的知识,不过千万不要忘记多实践,因为别人用了好用的,你用却是不一定!!!

更好的解决办法是学习 TensorFlow 2.x 版本,谁用谁知道!!!

:zap:Q:深度学习有哪些境界呢,怎么知道自己入门了嘛?

A:

深度学习目前处于风口,于是很多人想要浑水摸鱼,都来分一杯羹,然而可能很多人连深度学习是什么都不知道,所以很多人在自学的时候,又不知道从何学起,下了一堆资料,跑了一堆 Demo,报了一堆 Cousera,调调参,看看模型结果不错,就以为入了门,抱歉,可能你连门都没入。

深度学习这块,有几个层次:

  • demo侠:下载了目前所有流行的框架,对不同框里的例子都跑一跑,看看结果,觉得不错就行了,进而觉得,嘛,深度学习也不过如此嘛,没有多难啊。在面试的时候经常可以遇到不少,很多学生或者刚转行的上来就是讲一个 Demo,手写数字识别,cifar10 数据的图像分类等等,然而你问他这个手写数字识别的具体过程如何实现的?现在效果是不是目前做好的,可以再优化一下吗?为什么激活函数要选这个,可以选别的吗?CNN 的原理能简单讲讲吗?懵逼了。

  • 调参侠:此类人可能不局限于跑了几个demo,对于模型里的参数也做了一些调整,不管调的好不好,先试了再说,每个都试一下,学习率调大了准确率下降了,那就调小一点,那个参数不知道啥意思,随便改一下值测一下准确率吧。这是大多数初级深度学习工程师的现状。当然,并不是这样不好,对于demo侠来说,已经进步了不少了,起码有思考。然而如果你问,你调整的这个参数为什么会对模型的准确率带来这些影响,这个参数调大调小对结果又会有哪些影响,就又是一问三不知了。

  • 懂原理侠:抱歉起了个这么蠢的名字。但是,进阶到这一步,已经可以算是入门了,可以找一份能养活自己的工作了。CNN,RNN,LSTM 信手拈来,原理讲的溜的飞起,对于不同的参数对模型的影响也是说的有理有据,然而,如果你要问,你可以手动写一个CNN吗?不用调包,实现一个最基础的网络结构即可,又gg了。

  • 懂原理+能改模型细节侠:如果你到了这一步,恭喜你,入门了。对于任何一个做机器学习/深度学习的人来说,只懂原理是远远不够的,因为公司不是招你来做研究员的,来了就要干活,干活就要落地。既然要落地,那就对于每一个你熟悉的,常见的模型能够自己手动写代码运行出来,这样对于公司的一些业务,可以对模型进行适当的调整和改动,来适应不同的业务场景。这也是大多数一二线公司的工程师们的现状。然而,对于模型的整体架构能力,超大数据的分布式运行能力,方案设计可能还有所欠缺。

  • 超大数据操控侠:到这一阶段,基本上开始考虑超大数据的分布式运行方案,对整体架构有一个宏观的了解,对不同的框架也能指点一二。海量数据的分布式运行如何避免网络通信的延迟,如何更高效更迅速的训练都有一定经验。这类人,一般就是上一个的领导了。

  • 模型/框架架构师:前面说了一堆都是对现有的框架/模型处理的经验,这个阶段的大侠,哦,不对,是大师可以独立设计开发一套新框架/算法来应对现有的业务场景,或者解决一直未解决的历史遗留问题。没啥好说了,膜拜!

最后祝大家长风破浪会有时,直挂云帆济沧海!!!

参考文献

原文:【TensorFlow开发者出道计划】关于TensorFlow入坑那些事儿
中文:TensorFlow 公众号