PyTotrch 默认使用动态计算图,用法类似于numpy,可以直接看到tensor的具体信息,故在使用时非常灵活,方便调试。相比之下,TensorFlow就没有那么灵活了。TensorFlow采用的是静态计算图,它的想法是让你把模型的每一个细节都设计打包好,然后它在把数据和模型一股脑拿去运算,不允许你中途查看tensor信息。
举个不太恰当的例子,TensorFlow 就是个快递员,你先把需要寄的东西打包好,然后给快递员寄到指定地点,中途你要是发现漏寄了什么东西已经没法让快递员回来了,也无法得到快递有没有被压扁啥的。PyTorch则不一样,PyTorch 你就是快递员,你就是货车司机,中途要是发现包裹里漏寄了什么东西或者包裹损坏了可以立马掉转车头,回去处理。
两种框架各有优缺点,性能差异不大,用哪个看个人喜好,没有谁更优越一说。
TensorFlow 较为成熟,工业上用的较多,且因为是静态图,设计好了后便不能改动,开始运算,减少了计算机和磁盘之间的交互,效率较高;但也带来了灵活性差的问题,想看中间某个tensor的shape还得写个print在跑一下sess(借助pycharm可以查看变量信息),如果计算图中间出了什么bug想要修改非常麻烦,这也是我放弃TensorFlow 转向 PyTorch 的主要原因。
PyTorch 主要在学术界用得多,但我相信随着学术界的人才慢慢毕业进入工业界,会带来不一样的景象。相比TensorFlow,PyTorch 灵活得多,用法与numpy类似,查看变量信息、debug方便,用好了深度学习像呼吸一样自然。至于动态图和静态图,笔者粗略地认为,动态图的数据交互是会多一点,但是动态图修改好没bug了,跑起来不也和静态图一样了吗?
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删