Tensorflow作为长盛不衰的深度学习框架,一直广泛受到工业、科研学术界的欢迎,而近期推出Tensorflow2.0更是将Tensorflow的热度填了一把火。但作为深度学习的另外两位巨头(Keras和pytorch)似乎也在逐渐的撼动Tensorflow的领主地位。这里主要介绍Tensorflow和pytorch的王者之争。
1.Tensorflow简介
作为Tensorflow1.x的升级款,Tensorflow2.0主要降低了使用时的高门槛。正如Google Brain的工程师Martin Wicke所说,①Tensorflow2.0增强了动态图机制功能Eager execution,使得Tensorflow的编写难度降低②支持更多的平台、语言。③兼容Tensorflow1.x。
2.Pytorch简介
而来自于Facebook的pytorch是最新的深度学习框架之一,于 2017 年在 GitHub 上开源。PyTorch更于简洁、易于使用、支持动态计算图而且内存使用很高效,因此越来越受欢迎。
从近年来的pytorch使用热度来看,逐渐升高。
近期PyTorch由原来的1.0版本更新到了PyTorch1.2版本,顺便像常用的工具也更新到了torchvision0.4,torchaudio0.3 和 torchtext0.4版本。每项工具都进行了新的优化与改进,兼容性更强,使用起来也更加便捷。pytorch1.0,pytorch1.2主要在①改进了生产应用方面,增加了性能更加完善的TorchScript环境,使得构建模型更容易。②增加了对ONNX Opset的支持。③增加nn.Transformer模块,同时增加了的API。
其大致运算流程为:
④围绕PyTorch域的库(如 torchvision、torchtext 和 torchaudio)增加了对常用数据集、模型和转换器的便捷访问,可用于快速创建最先进的基线模型等。
3.两者异同点
相同点
首先两者的主要应用范围构建神经网络,而用于解决手写数字识别、识别汽车注册车牌、目标检测、图像语义分割等简单的分类问题。目前两者在该领域均具有较好的表现。
差异
硬件加速方面
目前两者均可使用英伟达显卡的GPU加速功能,但它们的加速方式却不同。Tensorflow使用的自己内置的GPU加速,而Pytorch需要配合使用CUDA软件(c++后端)来达到加速效果。
执行代码方式
这里需要提到张量的概念,如下图所示。PyTorch和TensorFlow的主要差异是它们执行代码的方式,他们都是基于基础数据类型张量(tensor)而工作。
TensorFlow 框架运行代码时,计算图是以静态方式定义的。计算图是一种将计算描述成有向图的抽象方式。图是一种由节点(顶点)和边构成的数据结构,是由有向的边成对连接的顶点的集合。与外部世界的所有通信都是通过 tf.Sessionobject 和 tf.Placeholder 执行,它们是在运行时会被外部数据替换的张量。
如下图所示:
将这种运行代码变成静态方式生成计算图,则如下图所示。
而Pytorch则会以动态的方式运行代码,计算时会按照计算需求和动态构建Autograd。计算图会随着执行过程而改变和执行节点。
另外pytorch代码与python语言结合的更为紧密,因为pytorch是python化的框架语言,使用者会感觉更加本地化,难度略微降低。
可视化方面可视化
可视化能帮助开发者跟踪训练过程以及实现更方便的调试。在计算过程的可视化方面,TensorFlow的TensorBoard较比pytorch的Visdom略有优势。
tensorlfow的TensorBoard
pytorch的Visdom
生产部署方面
在生产部署上面,tensorflow更胜一筹。对比新生儿pytorch,tensorflow使用了一种rest client API的框架。若要使用pytorch,则还需结合使用Flask 或 Django 作为后端服务器。
总结
tensorflow作为较成熟的深度学习框架,内置各种API可以更好的实现可视化、生产部署,且具有良好的社区系统。最重要的是工业界应用更广,但编写难度较高。而pytorch的学术界应用前景更广,且代码编写难度略低于tensorflow。若您是新上手深度学习,可以直接从pytorch入手,若您有较多的经验,可以直接从tensorflow上手。
本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!