由于人工智能正在几乎所有自动化领域得到实施。 深度学习是用于开发和最大化类人计算机效率的最棘手的架构之一。 为了帮助产品开发人员,Google,Facebook和其他大型科技公司已经发布了各种Python环境框架,可以学习,构建和培训多样化的神经网络。
谷歌的TensorFlow是深度学习的开源框架,多年来受到欢迎。 使用新框架,PyTorch因其易于编写的代码而受到初学者的关注。 PyTorch是基于Python,C ++和CUDA后端开发的,可用于Linux,macOS和Windows。
这两个广泛使用的框架之间存在一些差异,可能是因为它们实现代码,可视化技术以及静态和动态编程的方式。
我们来看看差异:
计算图
初始化时,在PyTorch上分配和构建图形遵循动态计算图形方法。熟悉Python中的数学库的用户会发现它很容易,因为人们不必为了构建图形而头脑发热。您可以按照自己的方式直接编写输入和输出功能,而无需担心尺寸张量。通过CUDA支持,这使生活变得更加容易。
在TensorFlow中,人们必须努力构建张量(图形)的维度以及为变量分配占位符。完成此操作后,必须运行会话才能计算出所有计算结果。这样的痛苦,不是吗?
例如,tf.Session()用于构建会话,tf.Variable()用于将权重分配给变量,依此类推。初始化后,可以构建一个神经网络,用于TensorFlow中的训练。
文档
PyTorch和TensorFlow的文档广泛可用,考虑到两者都在开发中,而PyTorch是最近发布的,与TensorFlow相比。人们可以在两个框架上找到大量文档,其中实现得到了很好的描述。
这两个框架都提供了大量的教程,这有助于人们专注于通过用例学习和实现它们。
适应设备
PyTorch和TensorFlow都有GPU扩展可用。这两个框架之间的主要区别在于,当考虑GPU进行TensorFlow计算时,它会消耗所有可用GPU的整个内存。通过为特定进程分配正确的GPU设备可以避免这种情况。 tf.device()为您提供选择首选GPU的选项。由于TensorFlow是一种静态计算图形方法,因此可以轻松优化此框架上的代码。
在PyTorch上,变量可以与权重一起分配并同时运行,其中框架构建计算所需的图形。这方面的GPU使用已经通过CUDA安装启用,即使在尝试在CPU上运行时,PyTorch也总是试图找到要计算的GPU。因此,必须提供X.cpu()扩展才能在CPU上运行它。
在TensorFlow tf.device(/ cpu:0):参数用于在CPU上运行它。也可以选择使用tf.device(/ gpu:0)的GPU来选择第一个GPU或tf.device(/ gpu:1)来选择第二个GPU。
模型可视化
可视化是理解模型性能和工作的关键。 TensorFlow具有图形和模型TensorBoard的实时表示功能,非常方便。 在这里,人们不仅能够获得神经网络的图形表示,还能够获得实时的损失和准确度图,其描绘了模型在特定迭代中的精确度。 这是一些例子:
这是一个实时分析,与PyTorch相比,TensorFlow擅长,而PyTorch完全缺乏此功能。 您还可以可视化神经网络的流程图,包括音频文件(如果您的数据中存在),这非常棒。
结论
在未来,PyTorch可能会像TensorBoard一样添加可视化功能。 PyTorch因其动态的计算方法和简单性而越来越受欢迎。 建议初学者在继续使用TensorFlow之前在PyTorch上工作,这有助于他们专注于模型而不是花时间构建图形。
我会在这里发布所有与科技、科学有关的有趣文章,欢迎订阅我的号。偶尔也回答有趣的问题,有问题可随时在评论区回复和讨论。
(码字不易,若文章对你帮助可点赞支持~)
面对Tensorflow,为何我选择PyTorch?
先来说说pytorch劣势。自从其被发布以来pytorch更多被用于学术界而不是工业界的实际生产,主要是因为它不够成熟、很多接口不太稳定,加上其全面性也不够,tensorflow目前仍然有很多pytorch不支持的功能,比如快速傅里叶变换,但这一点劣势会随着pytorch的发展而逐渐减小。除此此外,相比于tensorflow的容易各处部署的静态图(这一点远胜于很多框架),以python优先的深度学习框架 pytorch在部署到其他产品会很不方便。
优势先从上手时间开始说,虽然在2015年发布之后tensorflow多方受宠,但是和theano一样,tensorflow使用的是静态计算图,对于新手来说有过多需要新学习的概念,这导致了不管是入门还是搭建,使用tensorflow都比pytorch困难。而在2017年pytorch被团队开源的主要原因之一也是让建立深度学习模型更加简单,这让它发展十分迅猛。在数据加载上,pytorch加载数据的API简单高效,其面向对象的API源自于porch(也是keras的设计起源),比tensorflow难学的API友好很多,使用户可以将重点放在实现自己的想法,而不是被框架本身束缚住。
速度上,pytorch并没有为了灵活性而放弃速度,虽然运行速度和程序员水平密切相关,但pytorch在相同情况下常有可能胜于其他框架的速度。另外,如果追求自定义拓展,pytorch也会是首选,因为虽然二者的构建和绑定有一定的相似点,但是tensorflow在拓展时会需要很多样板代码,但pytorch只用编写接口和实现。
PyTorch和Gluon有什么区别?
pytorch是一个和tensorflow一样的深度学习框架,没有高度封装,适用于科研和工业部署的框架,由facebook出品,随着pytorch新版本的更新,c++的扩展,也许能够与tensorflow争一下地位,对于工业界也逐渐友好,工业部署算法也有些可能。tensorflow是静态图,而pytorch是动态图。
Gluon是亚马逊大神LI MU带领下做的一个前端工具,是一个高度封装的接口。 很多最新论文的算法,都有复现,你只需要去调用相应的function就可以使用相应算法,可以很简单,快捷的使用算法,看算法的展示效果。另外GluonCV是衍生出来的另一来源项目,主要针对于视觉方面,比如人脸识别,车辆检测,物体分类等等。 高度封装,对于非行业的人事非常友好,真正做到,几行代码就可以运行算法。
总体感觉Gluon之于MXNET,有些像keras之于tensorflow.
对Gluon有兴趣的,可以移步到:https://discuss.gluon.ai/t/topic/7429