PyTorch和TensorFlow到底哪个更好?大部分的说法不同,在此本人只说说我的看法。转pytorch 快一年了吧,回答一发。和pytorch 对标的不应该是tensorflow caffe,而是keras 和gluon。
在pytorch 出来之前keras 是我的首选工具,网络定义方便,并且有当时唯一的dataset类,实现一些简单的augment还可以。后来pytorch 出来了,大家才发现dataloader可以玩出这么多的花样,比如weight sampler ,collect fn。梯度可以在这么多种组合中一起反传,对一些需要同步更新backbone 的任务非常友好。以前觉得很难实现的op 比如hard negative mining,ohem(pytorch 的loss可以按照tensor中每个cell 回传梯度),在eager模式下可以很容易实现,对代码的掌控能力更强了。并且由于forward的存在,可以结合if else语句控制tensor的流向。
齐次,Pytorch 本身设计之初就是以py为主,这就要求在cpp和python之间尽可能的向python 靠拢,所以在pytorch中,所有Module 类都含有对一个forward 和backward的方法,哪怕是不懂cffi ,也可以轻松使用cpp cuda拓展的op。毕竟参数都是在module里定义的,运算已经尽可能的屏蔽掉了。
但是目前pytorch 最麻烦的一点就是deployed。虽然支持导出onnx,但是支持的op少的可怜。同事也吐槽过一些内存泄露的问题,并且那个libtorch的完成度实在不敢恭维,想要模型最终跑在trt上还要走好多路啊。