最近在从TensorFlow转PyTorch,一直有点懵。我知道两者都叫Tensor,但用起来感觉完全不一样。比如在TF里,我习惯了用tf.function或者@tf.function去装饰函数,不然速度就特别慢;到了PyTorch,好像随便写个Python函数就能跑,动态图感觉很灵活。但我不太确定这是不是意味着PyTorch的Tensor底层数据结构跟TF的不一样?还是说只是API设计思路不同?另外,我试过把一个PyTorch的Tensor转成numpy再转回TF的Tensor,总感觉中间有copy,但不知道是不是所有的转换都会触发数据拷贝。有没有大佬能从内存布局、自动求导机制或者设备(GPU/CPU)管理上帮我理一理?谢谢!
楼主
7天前
PyTorch的Tensor和TensorFlow的Tensor到底有啥本质区别?
请 登录 后发表回复
全部回复
共 22 条
2楼
1天前
其实你提到的动态图和静态图的差异,本质上就是两个框架对“计算图”的构建时机不同,Tensor本身的内存布局倒没有想象中那么大的区别。PyTorch的Tensor底层也是连续内存块,跟TF一样有strides信息,只是它把自动求导的梯度信息直接挂在Tensor上,而TF是放在Graph里。至于numpy转换,确实大概率会触发copy,尤其是从GPU tensor转的时候,因为设备内存和CPU内存不连续,这是绕不开的。我当初从TF转过来时最爽的就是不用再琢磨tf.function的输入签名了,但后来发现PyTorch的torch.compile也在往静态图方向靠,感觉两者在互相学习。
3楼
8小时前
本质区别就在动态图和静态图,PyTorch的Tensor操作是即时执行的,TF的tf.function更像优化后的编译模式。