Pytorch学习入门(一)--- 从torch7跳坑至pytorch --- Tensor

本文介绍了为何选择PyTorch作为深度学习框架,并详细阐述了从Torch7过渡到PyTorch时Tensor的变化,包括:移除功能更新、Inplace与Out-of-place操作的区别、零索引与命名规范、NumPy与PyTorch Tensor的内存共享以及数据转移到GPU的处理。
摘要由CSDN通过智能技术生成

为什么入坑pytorch

一般来说,入门一新坑,先会被各种众说纷纭所“迷惑”。于是我看了这些。。
1. ICLR2017的论文现在越来越多用pytorch了,而不是tensorflow了。ICLR-17最全盘点:PyTorch超越TensorFlow,三巨头Hinton、Bengio、LeCun论文被拒,GAN泛滥
2. 2017年1月18日Facebook发行的PyTorch相比TensorFlow、MXNet有何优势?
3. 额,竟然课上老师让一个同学讲实例代码,用的就是pytorch。可以的。
4. 其实另一个原因就是,pytorch的很多函数写法几乎和torch是一致的。所以入坑快啊。
另外,Torch7貌似已经不再进行功能性的更新了,现在只是维护了。

这里写图片描述

可以看到这些都是非功能性更新啊,唯独第二个TH implementation of Tensor expansion是一个非官方PR,点进去一看。。
这里写图片描述
再说点其他的,比如pixel2pixel和Cycle-GAN,本来都是torch7写的,然而作者本人也追加了pytorch版本的 pytorch-CycleGAN-and-pix2pix
, 现在 不管怎么说,反正我是准备入坑了。

从torch跳坑至pytorch

关于tensor的五大原则:
I.:.的过度!现在没有所谓的torch.Tensor(3,4):fill(1)了,变成了
torch.Tensor(3,4).fill_(1)

II. Inplace与Out-of-place, 前者加上后缀_,表示内部直接替换,而后者没有该后缀。
比如

a = torch.Tensor(3,4)
#内部替换值,a值已经被替换为2.5,就是相当于torch的 a:fill(2.5)
a.fill_(2.5)   

#a的值没有被替换,相当于 torch的torch.add(a,4.0)
b = a.add(4.0) 

# a的值已经全部替换为6.5,相当于torch的 torch.add(a,a,4.0)
c = a.add_(4.0) 

可以看到,很多类似这样的torch的函数,内部值的替换与否,取决于参数的多少。一般来说,总共n个参数,第一个参数是可省略的,第一个参数就是存储计算后的值的tensor,比如[result] view([result,] tensor, sizes)。而pytorch则将这个功能更加明确化,通过轻微改变函数名(有无后缀_)来判定。
注意:有些函数比如narrow没有in-place版本,就是说没有.narrow_存在。有些函数比如fill_没有out-of-place存在,就是说没有.fill存在。其实很多通过自己稍微想想也差不多也能猜出,比如narrow取出tensor的某一维度的连续in

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值