为什么入坑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