TensorFlow 2.0 VS PyTorch?

虽然HanLP 2.0采用了TensorFlow 2.0,但我保留在未来版本部分或完全采用PyTorch的可能性。两个DL框架各有好处,特别是在2020这个时间点附近,两个框架都往彼此擅长的领域学习。目前看来,学术界顶会基本是PyTorch占主导,而工业界则是TensorFlow部署起来比较方便稳定。另外,在我个人的经验中,PyTorch的运行效率有时候比tf.keras还高。有时候,Keras默认的超参数比PyTorch要差一些。论API设计的话,Keras还是要优雅一些。不过我甚至会用PyTorch写原型,然后转换成Keras格式部署。关于两者的较量,一个比较全面的比较是The State of Machine Learning Frameworks in 2019

总之,TensorFlow和PyTorch各有利弊。不知道大家平时主要用什么,能否分享一下自己的领域场景(学校还是公司,NLP还是CV之类)?欢迎参与投票和讨论。

  • TensorFlow
  • PyTorch

0 投票者

公司,CV/NLP tensorflow 主要是一套流程完善,如果pytorch有类似tensorflow的 serving model 部署方式,就会考虑转torch,但是我去torch官方上看,暂时他们还不考虑做这块。

接触深度学习的时候,正好tensorflow2.0出来了,但是GitHub上面好多代码都是tensorflow1.x的,这两周改代码改的脑壳疼(来自萌新的吐槽):rofl::rofl:

他们不做的原因我猜是,PyTorch如同它的名字一样,是个Python项目,什么都围绕着Python来。后面搞出来的TorchScript都是迫不得已的拓展,而不是原生的功能。TensorFlow其实是个C++项目,Python只是TensorFlow的前端。Python做前端虽好,计算密集的领域就不行了。

基于tf2.0的全tensorIO个人感觉修改起来难度比较高

你指的是张量运算吗?PyTorch有很多人性化的接口很方便调用,不过99%的接口都可以用tf实现。目前发现唯一无法实现的是as_strided,因为tf不支持strides。不过这个功能很少用,基本是写一些后处理的算法用到。实在要用可以转成numpy也无所谓。

我目前选择tensorflow的原因也不是被目前tf的部署能力绑架,而是看中tensorflow的发展前景。5年10年后,神经网络作为一门玄学的泡沫破裂,研究岗位减少,开发岗位增加。那时候,写实验原型的速度不再是重点,能否将一种具有暴力美感的网络结构(BERT之类)大规模工程化才是决定性因素,而这恰好是Google和tensorflow擅长的。这种征兆已经显现出来了,你可以在GitHub上听到某些研究人员抱怨PyTorch pretrain BERT消耗显存更多

10年后可能python都不再是ml社区的首选。那时候一门类似swift/rust之类的编译语言,同时语法糖比python还甜,没有兼容包袱的新语言可能会成为新时代的新宠儿。这时候tensorflow这种C++项目是非常容易出language binding的,并且tf用户早已具备心理准备:Python只是个前端语言而已。而PyTorch就没有这个优势了,因为它跟Python(包括Python哲学)绑定得太紧了,一旦改成其他语言,老用户会觉得没那味儿了,新用户会觉得别扭。我的预言不一定对,毕竟技术发展很快。也许未来会出现新的技术一举把tf和PyTorch都击败也说不准呢。

作为研究者,我喜欢用PyTorch快速出原型。作为工程师,我喜欢Keras的优雅设计和tensorflow的工程设计。给定HanLP的定位,目前觉得tensorflow还是更合适一些。但我鼓励百家争鸣,也从不排除在HanLP中实现PyTorchComponent的可能性。

同意,pretrian我也是用tensorflow的,一些技巧可以减少显存占用

我好像说了够多tf的好话,其实我也说了很多tf的坏话。如果这个issue tf没有很快解决的话,可能就要上torch了。