本人研一,刚接触深度学习半年,之前用Keras搭过几个简单分类模型。最近想深入做CV方向,发现组里师兄们用PyTorch的居多,但网上教程和工业界岗位似乎TensorFlow需求更大。我已经花了两周看PyTorch的Dataloader和nn.Module,感觉API设计确实更pythonic,但每次看到TF的TFRecord和静态图就头大。想请教各位:如果目标是毕业后进大厂做算法岗,现阶段应该把主要精力放在哪个框架上?有没有必要两个都学?另外,PyTorch的动态图在部署到移动端时是不是真的比TF吃亏很多?求过来人指点,感谢!
深度学习框架选择困惑:PyTorch和TensorFlow到底该深入学哪个?
全部回复
共 32 条说实话你这个问题我当年也纠结过,最后发现纠结本身就是浪费时间。CV方向跟着师兄们用PyTorch绝对没错,组里生态才是你发论文的第一生产力,等真到找工作的时候,面试官更看重你项目里对模型的理解和调优能力,而不是你用了哪个框架。至于工业界岗位,这两年招聘JD里写TensorFlow的确实多,但实际进去你会发现很多团队也在转PyTorch,尤其是新项目,老系统维护才用TF那套。动态图部署到移动端这事,现在PyTorch有torchscript和量化工具,加上NCNN、MNN这些推理引擎都兼容,吃亏程度真没你想的那么夸张,除非是做端侧超低延迟的场景,那才需要专门去碰TF Lite或TFLite的优化。我的建议是主攻PyTorch,把Dataloader、nn.Module这些吃透,然后抽空看一遍TF的Keras高层API就行,TFRecord和静态图真没必要死磕,等你需要大规模分布式训练或者部署时再回头补完全来得及。另外你才研一,算法岗的核心竞争力永远是数学和论文复现能力,框架只是工具,别让工具选择消耗你太多意志力。
别纠结,研一直接PyTorch,工作后TF那套上手很快,动态图调试效率高太多。
CV方向PyTorch就是事实标准,部署问题等真用到再补torchscript也不迟。
说实话你这个问题我去年也纠结过,最后选了PyTorch,现在回头看完全不后悔。CV方向学术圈基本被PyTorch占领了,组里师兄用啥你就跟着用,能省下大量踩坑时间,而且torchvision那套预训练模型直接拿来finetune不要太爽。关于工业界需求,现在大厂算法岗面试其实更看重你对模型原理和调参的理解,框架只是工具,很多公司内部甚至有自己的训练框架,进去都得重新学。至于TFRecord和静态图,除非你要做特别底层的优化或者上生产级分布式训练,否则真没必要现在死磕,PyTorch的torch.compile和ONNX导出已经把部署差距缩小很多了。移动端部署确实TF的lite生态更成熟,但那是部署工程师的活,算法岗更多是出模型,实际转换交给工程团队就行。我的建议是先专心把PyTorch吃透,动态图调试效率高,特别适合你这种刚入门的状态,等你把模型结构、训练技巧都摸熟了,再花一两周过一遍TensorFlow的keras高层API,应付面试足够。两个都深入学短期不现实,而且容易混,不如一个精通一个了解。
说实话你师兄们用啥你就跟着用啥准没错,组里能帮你debug的人比网上教程重要多了。大厂算法岗面试现在很少死磕框架API,更看重你对模型和训练的理解,PyTorch学透了转TF也就一两周的事。移动端部署现在TF也不占绝对优势了,PyTorch有torchscript和自家executorch,真到工业界很多公司也是先验证再转onnx,没你想的那么吃亏。先把一个用熟,另一个用到的时候查文档就行,别两头学容易混。
选PyTorch,CV方向跟组里保持一致最重要,部署那点差距等你真做落地再补也不迟。
PyTorch先学透吧,CV圈基本是它了,部署的事进公司再补torchscript也不迟。
说实话你这个问题我当年也纠结过,最后两个都碰了才找到答案。现在做CV的话PyTorch基本是学术圈默认选项,组里师兄用啥你就跟着用啥,至少能少踩很多坑,而且读论文复现代码也方便——现在顶会开源代码十有八九是PyTorch。但你提到工业界岗位需求大,这个确实存在,不过这两年TensorFlow在部署侧的绝对优势也在被PyTorch慢慢追,尤其PyTorch这边有TorchScript和LibTorch,移动端落地虽然比TF繁琐一点,但绝对没到“吃亏很多”的地步,关键看你具体做什么产品。我的建议是主学PyTorch,把它吃透,动态图调试起来是真的爽,写代码思路也顺。TF那边不用系统学,但建议你抽空搞懂它的 Serving 和 Lite 流程,因为很多老牌大厂内部基建还是TF,面试时能聊上几句就是加分项。至于两个都学?别贪多,研一先把一个搞精,另一个等你有实际项目需求了再补,不然容易两头都不扎实。
说实话你师兄们的选择已经说明问题了,现在CV方向新论文基本都带PyTorch代码,复现起来省太多事。TF的静态图折腾半天,等你调通别人都跑完实验了。至于大厂算法岗,面试更看重你对模型和原理的理解,框架只是工具,真进去了很多团队也在转PyTorch。移动端部署确实TF有优势,但一般算法岗不背这个锅,那是推理引擎团队的事。先专心把PyTorch吃透,等你能熟练写自定义层和训练循环,再花两周摸下TF的Keras接口就够用了。
PyTorch现在在CV领域基本是事实标准了,你跟着师兄走完全没问题,大厂算法岗面试也更多聊动态图思路。TF那些部署优势等你真接触到移动端项目再补也不迟,而且现在ONNX转换很成熟,PyTorch模型转TFLite也没那么痛苦。我建议你先把PyTorch吃透,等需要投特定岗位时再看JD要求突击TF,两个同时学容易两边都半吊子。
说实话你师兄们用啥你就跟着用啥准没错,大厂算法岗核心是发论文和做实验,PyTorch生态里最新论文代码基本都有,这点TF真比不上。部署那步基本是工程团队的事,而且现在ONNX转起来也方便,动态图吃亏真没想象中那么大。我建议先把手头CV项目用PyTorch完整跑通一个,等真遇到需要上线的需求再补TF不迟。
大厂算法岗现在基本PyTorch是主流,TF部署那套等真用到再补也不迟,别两头抓耽误出成果。
学CV就死磕PyTorch吧,等你上手了就会发现TF那套静态图真没必要硬啃,部署问题组里总有搞工程的同事能扛。
说实话你组里师兄都用PyTorch这事就已经说明很多问题了,跟着他们走能少踩不少坑。TF那套数据流水线确实反人类,但部署这块TorchScript现在也没那么拉胯,真要上生产还有ONNX顶着。建议你先用PyTorch把检测分割这些经典模型跑熟,等有精力了再看TF的Serving部分,纯为了面试去啃静态图性价比太低了。