首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈pytorch与torch的关系

前言

Pytorch发布已经有一段时间了,我们在使用中也发现了其独特的动态图设计,让我们可以高效地进行神经网络的构造、实现我们的想法。那么Pytorch是怎么来的,追根溯源,pytorch可以说是torch的python版,然后增加了很多新的特性,那么pytorch和torch的具体区别是什么,这篇文章大致对两者进行一下简要分析,有一个宏观的了解。

torch-nn-vs-pytorch-nn

上面的对比图来源于官网,官方认为,这两者最大的区别就是Pytorch重新设计了model模型和intermediate中间变量的关系,在Pytorch中所有计算的中间变量都存在于计算图中,所有的model都可以共享中间变量。而在torch中的中间变量则在每一个模块中,想要调用其他模块的参数就必须首先复制这个模块然后再调用。

当然,Python有很多特性是lua语言不具备的,Python的debug功能比lua强大很多,所以效率也就提升了。

Pytorch与Torch

接下来让我们稍微稍微具体谈一下两者的区别(ps:torch是火炬的意思)。

我们都知道Pytorch采用python语言接口来实现编程,而torch是采用lua语言,Lua是一个什么样的语言,可以这样说,Lua相当于一个小型加强版的C,支持类和面向对象,运行效率极高,与C语言结合“特别默契”,也就是说在Lua中使用C语言非常容易也很舒服。

因此,torch是采用C语言作为底层,然后lua语言为接口的深度学习库。而Pytorch呢,Pytorch其实也是主要采用C语言为接口(相关文章),另外除了C语言那还有C++了,因为Pytorch吸收结合了caffe2,进行了很多代码合并,现在Pytorch的底层虽然大部分还是C语言,但是接口什么的也逐渐向C++过渡。

目前来看,两者的底层库的C语言部分区别还是不大,尽管Pytorch使用了C++接口,但是由于代码的兼容性,使用torch拓展的底层代码在Pytorch中照样可以编译使用。

Pytorch-backend

编写模型方面的区别

我们来简单说一下pytorch和torch在编写模型上一些简单的区别,pytorch在编写模型的时候最大的特点就是利用autograd技术来实现自动求导,也就是不需要我们再去麻烦地写一些反向的计算函数,这点上继承了torch。

举个例子:

pytorch中,我们通过继承设计一个层,然后定义我们平常使用的成员函数:和,这两个函数相比我们都很熟悉,另外是一个hook函数,通常在需要读取中间参数的时候使用:

而在torch中是这样设计的,我们利用lua语言的特定来设计class,和和上面对应的和功能相同。其实torch也是有函数实现,但是由于torch的局限性,不建议直接修改,我们需要修改函数来实现forward操作:

我们通过对比Pytorch和Torch自顶层的设计大概分析了一下两者的区别,其实两者的很多功能函数的操作方式和命名都是类似的:

pytorch:

Pytorch-resize

torch:

Torch-resize

依赖库区别

Pytorch借助于Python强大的第三方库,已经存在的库可以直接使用,利用我们的图像读取直接使用Python自带的PIL图像库或者python-opencv都可以,其他各种想要实现的功能都可以利用python强大的第三方库实现:

https://oldpan.me/archives/pytorch-transforms-opencv-scikit-image

https://oldpan.me/archives/pytorch-tensor-image-transform

而在torch中同样有很多Lua语言下开发的很多包:

Lua-torch

torch可以很方便地拓展cuda和c代码实现更加丰富的自定义层和算法操作。

而pytorch的可以看这里:https://oldpan.me/archives/pytorch-combine-c-and-cuda

后记

暂且说这么多,Pytorch和Torch都很优秀,现在仍然有很多优秀的项目是使用torch来编写,Pytorch和torch的思想都值得我们去借鉴,闲暇之余,我们也可以看看Torch的代码,体验一下其优秀的构架和设计。

Torch-WIki:https://github.com/torch/torch7/wiki/Cheatsheet

关注Oldpan博客,同步更新博客最新消息,持续酝酿深度学习质量文。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180607G243IV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券