01_pytorch和tensorflow的区别

Pytorch和TensorFlow的区别

引言

在这里,我们长话短说,短话简说,抱歉,还是说了这么多废话,两年多没有正式写技术博客了,有点兴奋又有点伤感,那就正式开始吧。

话说在某某年有人发明了人工智能这个专业术语,因此后来者想要达到这个人说的人工智能的那种状态。当然了,你可以把人工智能弱智的理解成机器人这种啦,当然咯,目前这还是很难实现的,我们就说两个现在大多数人都用得到的吧。

这两个东西就是你们手机的siri、小冰、小白、小度啥的,扯一下,为什么都要加个“小”字,就不能是大白吗?也挺亲切的。好了,言归正传,上述的小某某其实专业点讲就是语音助手,它用到的是人工智能中自然语言处理这个技术,也就是大白话的语音识别,说的再清楚点,就是你说啥,机器都能听懂,还能做出回应。比如你说:有德是最帅的吗?毫无疑问,它们的回复都是:是的。可惜它们不是她们。除了这些所谓的语音助手,还有一个就是人脸识别,无论是你的高档某某保时捷牌手机,还是在高铁口,我们都可以通过刷脸进行一定的操作,其实简单点说,人脸识别就是努力让机器人认识你,当然咯,这种人脸识别技术更多的是对比技术,还没有那么高端。总而言之,你只要知道,人工智能这玩意儿已经离你的生活特别近了,它并不遥远。如果你还想了解更多,我给你说几个高端但还没怎么落地的应用,基因测序、医疗影像、无人驾驶,其它的一时半会也想不出来,就这样吧!

pytorch和tensorflow的功能

上面为什么要说那么多呢?也许就是我想说点废话,其实不然,说了那么多,就是想告诉大家人工智能是一个很高端的东西。而这种高端的东西只是看起来很高端,为什么这样讲呢,因为如果你不去了解,你可能认为你需要去了解各种各样类型的知识呢,比如:哲学、数学、经济学、神经科学、心理学、计算机工程、控制论、语言学。(此八种来自《人工智能——一种现代的方法》,南京大学AI学院研究生初试的一本书)对的,就是这么恐怖,所以很多人可能“直接推,放弃”。

但是人工智能真的只是表面看起来高端,如果你有一定的毅力,你是可以很好地去实现它的,因为上述八种类型的学科想要实现的是一种还远在天边的通用人工智能,此时你可以把它理解成一个和人一样的机器人。而我们的目标仅仅只是需要做一个会下围棋的人工智能,对的,就是那个曾经红红火火的alphago,我造个这玩意还需要考虑啥哲学、心理学吗?还不至于。

那么重点来了,为了造一个如alphago一样的人工智能,我们需要干嘛呢?其实很简单:

  1. 自己买本深度学习的书看看,现在市面上一大堆这样的书,别问我看哪本,市面上的深度学习的书其实差不多都是五十步笑百步,所以哪一本都行。
  2. 大概看完这本书后,学个Python,Python网课和文档我都给你整理好了,链接在此://www.cnblogs.com/nickchen121/p/10718112.html
  3. 然后开始敲代码就行。

我们的主人公pytorch和tensorflow终于要出场了,他们在幕后可愁死了,至于keras、caffe这种就别问了,他们可能一直都要在我的幕后做冷板凳,21世纪了,谁还用这些,你用我不用。下面pytorch简称torch,tensorflow简称tf,别问我为什么,就是想少打几个字,打字很累的。也就是说torch和tf的功能是干啥呢?他们的功能很简单,就是为了完成上面说的第二步,也就是方便我们敲代码。

为什么说他能方便我们敲代码呢?举个很简单的例子,比如我现在有一个极其复杂的函数:

\[z = ax^2+bx+clnx+dy^3+ey+\epsilon
\]

好吧,其实并不复杂,但是如果我们需要对x和y求偏导,动笔一算,结果为\(\frac{\partial{z}}{\partial{y}}=3d^2+e\),x的偏导我还需要动笔一算,总感觉很麻烦的感觉,但是如果我们用了torch这个玩意儿,tf同理,这样就行了,x和y的一次性求出来:

from torch import autograd

z2x_grad, z2y_grad = autograd.grad(z, [x, y]) # z对x求偏导,z对y求偏导

好了,就透露这么多。对了,别运行这段代码,运行报错,还有一些定义变量啥的代码没写出来,但这已经够打动你了吧?

复杂点说吧,torch和tf有啥用呢,可以让你把一些看起来高深莫测的东西,几行代码解决。其实就是it届广为流传的一句话:面试造航母,工作拧螺丝。为什么说工作拧螺丝呢?就拿我从事过的Python后端开发来说吧!Python后端开发中有一个和tf一样的东西,叫做Django,也是个框架,只要你用它做开发,拧螺丝就行了。为什么说拧螺丝呢?因为无论是torch,还是tf,还是Django,他们帮我们把各种轮子造好了,比如上述求偏导,我们不需要求偏导是什么,如何求偏导,我们只要知道我们要去求偏导的时候,autograd.grad一下,然后填几个参数就行。

简单点说吧,torch和tf有啥呢?就是他们属于一个成型的框架系统,里面封装了各种各样的轮子,你只要会一些他们的基本使用方法,便可以使用这个轮子完成那些高深莫测的东西,比如造航母,其实也不是不行,哈哈!

torch和tf的区别

上面说到了torch和tf的功能,就是他们作为一个合格的框架系统,在这个系统里面,他们提供了各种各样的轮子给我们造航母。但是他们既然都有同样的功能,那我该用哪个呢?实话实说,最好的方法,两个都学,但是不是两个都精通。

比如我以前作为Python讲师给学生们上课的时候,Python后端开发有三个比较有名的框架,分别是Django、Flask、Tornado,我们主讲Django,其他的你说要不要学,要学,他们是副学,至少要能简单使用。为什么这样呢?因为三个框架各有好坏,每个公司的项目需求和CTO们的喜好又不同,你怎么知道他喜欢用哪个。但是一通百通,既然三者都是为了完成一件事,那么他们的本质区别不会很大,所以主学 一个,其他的深入一下也可信手拈来。

好了,言归正传,也就是说torch和tf我们都要学,但要有主次,至于哪个主哪个次,我给你说出优劣,你自己抉择。不过成人才做选择,我作为一个小孩子我全都要,那怕是要累死我。

torch

那我们先说说torch吧!因为不久之后我可能需要使用他,所以我需要先学这个,我也就先讲讲这个。torch它有啥优点呢!它的优点其实目前我发现就两个,简单和灵活,对的,简单和灵活。缺点,有啥缺点,目前也没啥缺点,你要说几年前吧,用的人少,社区少,这样你碰到了问题要么找“鬼”,要么自己慢慢钻研吧!但是现在他挺火爆的,不亚于tf。

缺点你要说有,还真有,在他不火爆的时候,tf1.0挺火爆的,导致刚开始工业界大兴土木都是用的tf,你要知道,我100万行的代码用的是tf,就因为你torch简单我就换个100万代码?你以为你是谁。但是,随着时间的发展,这样的问题已经没了。就好比Python2和Python3一样,现在谁还用Python2,怕是远古企业才用吧。然而我以后要搞三年学术,那个缺点对我来说也不是啥缺点。

总结下,torch这东西简单而且灵活,但是由于工业界早期使用tf,不可能因为你简单我就换torch。所以,如果你是为了工作,最好提前打听清楚,如果你是搞学术研究,也别急着做定论,毕竟tf2.0出来了,也可以看看下面tf的介绍。

tf

Tf它说起来就一言难尽了,但是我也要长话短说,现在20:30,我有个21点的闹钟要去睡觉,我得赶进度,哈哈!其实不是,只是我们重点讲tf2.0就没必要说那么多了。

tf它很特别,它得区分tf1.0和tf2.0版本,如果它没有2.0版本,那么我认为“如无必要,勿增实体”,什么意思,选简单的,哪个简单,torch简单呀。当然咯,公司、研究室有规定,那就选tf1.0咯。我都能想到,那么其他开发者怎么想不到,所以当torch出来的时候,tf1.0的使用人数一直下滑,那个恐怖程度,看下图(终于有图片了):

不用我多说了吧,tf那一段黑暗的时光,就是它骄傲自满,和以前的我一样,所以我得了干眼症,它,你懂得。

但是很多人好奇为什么tf的使用人数为什么又增多了呢?这里,不得不说,以前是tf的金主爸爸google骄傲自满,后面就是torch的金主爸爸facebook不仅要获取用户隐私,还非要泄露用户隐私,搞得facebook总公司鸡犬不宁,更何况他的小儿子。而此时的tf也争了口气,洗心革面出了tf2.0版本,也因此tf1.0版本静态计算(不懂就算了),用个轮子都麻烦死的缺点没了。人生就是这样啊!哈哈哈,不自然的来句鸡汤。

因为tf2.0版本出来了,大家都好奇呗,其实就是变简单的了,它骄傲自满的缺点还没有彻底改变,用起来稍微还是比torch复杂一点的,但总归是五十步笑百步了。

Torch和tf到底用哪个

说了这么多,感觉还是不清楚用哪个。其实,很简单,现在你的问题就是到了是该去淘宝还是去京东网上shopping。至于去哪个,给几个参考:

  1. torch和tf两者的生态是不一样的,也就是两者提供的轮子是有区别的,如果你要用到tf的轮子,那你就去tf,反之,torch。
  2. torch和tf的服务态度是不一样的,网上说torch的服务态度好,我也没试过,我不清楚,但是没人说tf的服务态度好。
  3. torch不仅服务态度好,提供的文档和api也很整齐,和我一样,爱整理东西,哈哈,写个文章都要吹嘘自己,而tf貌似文档和api很乱。
  4. tf线上部署友好,方便运维和开发了,不过torch也开始迎面而上了。

说了这么多,还是不清楚用哪个呀!那我就说说我吧!由于我未来马上需要用到torch,那么我一定是先学torch的。但是你说我tf要不要学,我也是要学的,只不过会未来再学。

如果你先学torch也行,先学tf也行,那么对于这种五十步和一百步区别的东西,告诉你一个最简单也最好用的方法,抛硬币!貌似抛硬币才是这篇文章的核心内容,但是如果我一来就说抛硬币,你怕是会说我,这个人脑子瓦特(傻)了吧!

总结

本篇文章正式介绍了torch和tf的区别,废话那么多,相信你已经很明白两者的区别了,不过是五十步笑百步,先学哪个按照你的需求来就行,但是无论你第一个选择了哪个,另外一个都要作为你的备胎,两个都要学,只不过一个主,一个次。

如果两者对你来说都可以先学,那么,我也教了你一个简单的方法,抛硬币!