TensorFlow2.0入门到进阶1.5 —— 最通俗易懂的Tensorflow 与 pytourch对比

1、前言

很多人在学习深度学习时,都会对于学习哪个深度学习的框架而烦恼,到底是Tensorflow 还是 pytourch?一个主流的说法就是如果搞学术研究,那么就选择pytourch,如果是搞项目那就选Tensorflow ,但很多人都纠结两者的区别在哪里呢,下面就具体的分析一下,看看到底哪个框架适合你。

2、入门时间

PyTorch本质上是Numpy的替代者,而且支持GPU、带有高级功能,可以用来搭建和训练深度神经网络。如果你熟悉Numpy、Python以及常见的深度学习概念(卷积层、循环层、SGD等),会非常容易上手PyTorch。

而TensorFlow1.0可以看成是一个嵌入Python的编程语言。你写的TensorFlow代码会被Python编译成一张图,然后由TensorFlow执行引擎运行。我见过好多新手,因为这个增加的间接层而困扰。也正是因为同样的原因,TensorFlow有一些额外的概念需要学习,例如会话、图、变量作用域(variable scoping)、占位符等。另外还需要更多的样板代码才能让一个基本的模型运行。

对于TensorFlow2.0,在TensorFlow1.0基础上进一步优化了API,更加方便开发者上手

所以TensorFlow1.0的上手时间,肯定要比PyTorch长,但是如果对于初学者而言,利用TensorFlow2.0中的keras,上手是非常轻松的。

3、机制

在这里插入图片描述
创建和运行计算图可能是两个框架最不同的地方。在PyTorch中,图结构是动态的,这意味着图在运行时构建,即在训练模型时,图结构可以更改。而在TensorFlow1.0中,图结构是静态的,这意味着图先被“编译”然后再运行,TensorFlow2.0采用和PyTorch一样的动态图结构。举一个简单的例子,在PyTorch中你可以用标准的Python语法编写一个for循环结构,此处T可以在每次执行代码时改变。

for _ in range(T):
    h = torch.matmul(W, h) + b

而TensorFlow1.0中,这需要使用“控制流操作”来构建图,例如tf.while_loop。TensorFlow确实提供了dynamic_rnn用于常见结构,但是创建自定义动态计算真的更加困难。

PyTorch中简单的图结构更容易理解,更重要的是,还更容易调试。调试PyTorch代码就像调试Python代码一样。你可以使用pdb并在任何地方设置断点。调试TensorFlow代码可不容易。要么得从会话请求要检查的变量,要么学会使用TensorFlow的调试器(tfdbg)。

所以,这里PyTorch和TensorFlow2.0要优于TensorFlow1.0。

4、全面性

随着PyTorch逐渐成熟,我预计这部分的差距会趋近于零。但目前,TensorFlow还是有一些PyTorch不支持的功能。它们是:

  • 沿维翻转张量(np.flip, np.flipud, np.fliplr)
  • 检查无穷与非数值张量(np.is_nan, np.is_inf)
  • 快速傅里叶变换(np.fft)

这些TensorFlow都支持。另外,TensorFlow的contrib软件包中,有更多PyTorch没有的高级功能和模型。

这一方面TensorFlow优于PyTorch。

5、序列化

两种框架下保存和加载模型都很简单。PyTorch有一个特别简单的API,可以保存模型的所有权重或pickle整个类。

TensorFlow的Saver对象也很易用,而且为检查提供了更多的选项。TensorFlow序列化的主要优点是可以将整个图保存为protocol buffer。包括参数和操作。然而图还能被加载进其他支持的语言(C++、Java)。这对于部署堆栈至关重要。理论上,当你想改动模型源代码但仍希望运行旧模型时非常有用。

这一方面TensorFlow优于PyTorch。

6、部署

对于小规模的服务器端部署(例如一个Flask web server),两个框架都很简单。

对于移动端和嵌入式部署,TensorFlow更好。不只是比PyTorch好,比大多数深度学习框架都要要。

使用TensorFlow,特别是TensorFlow2.0,进一步优化了部署方面的功能。部署在Android或iOS平台时只需要很小的工作量,至少不必用Java或者C++重写模型的推断部分。对于高性能服务器端的部署,还有TensorFlow Serving能用。除了性能之外,TensorFlow Serving一个显著的优点是可以轻松的热插拔模型,而不会使服务失效。

这一方面TensorFlow优于PyTorch。这也是很多开发人员选择TensorFlow的一个重要原因,因为做好的项目最终要部署的实际的场景中。

7、自定义扩展

两个框架都可以构建和绑定用C、C++、CUDA编写的自定义扩展。TensorFlow1.0仍然需要更多的样板代码,尽管这对于支持多类型和设备可能更好。在PyTorch中,你只需为每个CPU和GPU编写一个接口和相应的实现。两个框架中编译扩展也是直接记性,并不需要在pip安装的内容之外下载任何头文件或者源代码。

这一方面PyTorch优于TensorFlow,这也是很多学术研究人员选择PyTorch的一个重要原因。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力改掉拖延症的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值