一文说清楚pytorch和tensorFlow的区别究竟在哪里

最近用了一点pytorch,想着稍稍理一下,这样一个和TensorFlow抗衡的一个框架,究竟是何方神圣?首先我们要搞清楚pytorch和TensorFlow的一点区别,那就是pytorch是一个动态的框架,而TensorFlow是一个静态的框架。何为静态的框架呢?我们知道,TensorFlow的尿性是,我们需要先构建一个TensorFlow的计算图,构建好了之后,这样一个计算图是不能够变的了…

大家好,又见面了,我是你们的朋友全栈君。

最近用了一点pytorch,想着稍稍理一下,这样一个和TensorFlow抗衡的一个框架,究竟是何方神圣?

首先我们要搞清楚pytorch和TensorFlow的一点区别,那就是pytorch是一个动态的框架,而TensorFlow是一个静态的框架。何为静态的框架呢?我们知道,TensorFlow的尿性是,我们需要先构建一个TensorFlow的计算图,构建好了之后,这样一个计算图是不能够变的了,然后我们再传入不同的数据进去,进行计算。这就带来一个问题,就是固定了计算的流程,势必带来了不灵活性,如果我们要改变计算的逻辑,或者随着时间变化的计算逻辑,这样的动态计算TensorFlow是实现不了的,或者是很麻烦。

但是pytorch就是一个动态的框架,这就和python的逻辑是一样的,要对变量做任何操作都是灵活的。

举个简单的例子,当我们要实现一个这样的计算图时:

一文说清楚pytorch和tensorFlow的区别究竟在哪里

用TensorFlow是这样的:

一文说清楚pytorch和tensorFlow的区别究竟在哪里

而用pytorch是这样的:

一文说清楚pytorch和tensorFlow的区别究竟在哪里

当然,里面都包含了建立前向计算图,传入变量数据,求梯度等操作,但是显而易见,pytorch的代码更为凝练。TensorFlow我也用得比较少,我本文重点说说pytorch的一些学习心得,一是总结,而是若有缘人能看见此文,也能当个参考。

其实一个好的框架应该要具备三点:对大的计算图能方便的实现;能自动求变量的导数;能简单的运行在GPU上;pytorch都做到了,但是现在很多公司用的都是TensorFlow,而pytorch由于比较灵活,在学术科研上用得比较多一点。鄙人认为可能,Google可能下手早一些,而Facebook作后来者,虽然灵活,但是很多公司已经入了TensorFlow的坑了,要全部迁移出来还是很费功夫;而且,TensorFlow在GPU的分布式计算上更为出色,在数据量巨大时效率比pytorch要高一些,我觉得这个也是一个重要的原因吧。

好的,不闲扯了。pytorch的一些心得,我总结一下:

首先,pytorch包括了三个层次:tensor,variable,Module。tensor,即张量的意思,由于是矩阵的运算,十分适合在GPU上跑。但是这样一个tensor为什么还不够呢?要搞出来一个variable,其实variable只是tensor的一个封装,这样一个封装,最重要的目的,就是能够保存住该variable在整个计算图中的位置,详细的说:能够知道计算图中各个变量之间的相互依赖关系。什么,你问这有什么用?当然是为了反向求梯度了;而Module,是一个更高的层次,如果使用这个Module,那可厉害了,这是一个神经网络的层次,可以直接调用全连接层,卷积层,等等神经网络。

感觉写不完了,有人看再更吧,如果又兴趣的话,可以去看我的这一课https://blog.csdn.net/ibelieve8013/article/details/84206410的导图,只要你认真看,真的很清晰的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125444.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 10万字208道Java经典面试题总结(附答案)

    1、JDK和JRE有什么区别?JDK(JavaDevelopmentKit),Java开发工具包JRE(JavaRuntimeEnvironment),Java运行环境JDK中包含JRE,JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。2、==和equals的区别是什么?对于基本类型,==比较的是值; 对于引用类型,==比较的是地址; equals不能用于基本类型的比较; 如果没有重写equa

    2022年4月9日
    51
  • Python解释器新手安装教程

    Python解释器新手安装教程Python解释器本身也是个程序,它是解释执行Python代码的,没有它Python代码是没有办法运行的。既然Python解释器如此重要,那么大家赶紧一起来看看Python解释器新手安装教程吧!免费领取Python、PyCharm、激活码安装包及视频教程Step1:确定操作系统Python解释器的下载地址为:https://www.python.org/,点击“Downloads”选项如下图所示:可以看到最新版为Python3.8.2,接下来根据自己的情况选择相应的电脑系统,…

    2022年7月22日
    13
  • 【FAQ】SpingMVC实现集合參数(Could not instantiate bean class [java.util.List])

    【FAQ】SpingMVC实现集合參数(Could not instantiate bean class [java.util.List])

    2021年12月7日
    66
  • mysql 端口号_mysql的端口号(mysql常用端口号)「建议收藏」

    mysql的端口号(mysql常用端口号)2020-05-0721:58:15共10个回答mysql的默认端口号是多少mysql默认端口号为3306,修改端口号方法:修改配置文件/etc/my.cnf如何查看mysql的端口号1使用命令showglobalvariableslike’port’;查看端口号2修改端口,编辑/etc/my.cnf文件,早期版本有可能是my.conf文件名,增加端口参…

    2022年4月18日
    400
  • 我的 Java 自学之路[通俗易懂]

    我的 Java 自学之路[通俗易懂]其实在转正之后我就想抽个时间好好的梳理一下我的Java上车之路,但是一直拖到现在,因为有学弟问到,所以也就给了我动力。毕竟答应了人家的事要做到。首先要有相应的背景介绍,不然说个毛线啊,大家不在同一水平,不好参考借鉴。我呢,学校很牛逼,是一所刚过线的二本,自身的成绩在班里也就第8名左右吧(一共60个人),在大二的时候学校开设了Java这门课,我的期末考试…

    2022年7月7日
    22
  • 屏蔽FlashCookie

    屏蔽FlashCookieFlashCookie首先来做一个小测试,用IE浏览器(任意浏览器均可)进入百度MP3搜索,在不登录百度帐号的情况下打开百度音乐盒,随便试听几首歌曲,这时可以看到在百度音乐盒的试听历史中会出现之前试听的歌曲。接下来我们使用IE自带的删除功能来清除Cookie(也可以使用各种软件的清理Cookie功能),清理完之后再重新打开百度音乐盒,我们发现之前试听的歌曲信息居然还在,情况还不只如此,用

    2022年7月14日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号