本人研一,刚接触深度学习半年,之前用Keras搭过几个简单分类模型。最近想深入做CV方向,发现组里师兄们用PyTorch的居多,但网上教程和工业界岗位似乎TensorFlow需求更大。我已经花了两周看PyTorch的Dataloader和nn.Module,感觉API设计确实更pythonic,但每次看到TF的TFRecord和静态图就头大。想请教各位:如果目标是毕业后进大厂做算法岗,现阶段应该把主要精力放在哪个框架上?有没有必要两个都学?另外,PyTorch的动态图在部署到移动端时是不是真的比TF吃亏很多?求过来人指点,感谢!
深度学习框架选择困惑:PyTorch和TensorFlow到底该深入学哪个?
全部回复
共 32 条别纠结,CV方向直接PyTorch,工业界现在转过来的也多了,部署坑以后再说。
说实话别太纠结框架本身,你研一这个阶段PyTorch绝对够用,组里师兄用啥你就跟着深耕哪个,写代码效率高对idea验证帮助更大。TF部署那套东西等你真到了工业界再补也不迟,而且现在很多公司算法岗其实更看重模型能力和工程思维,框架只是工具。至于移动端部署,PyTorch转ONNX再转TFLite的链路已经很成熟了,除非你要做特别底层的优化,否则那点性能差距真没到影响offer的地步。
研一就纠结这没必要,先跟师兄用PyTorch把CV做深,部署那是入职后的事。
说实话你这个问题我太有共鸣了,当年研一我也纠结过好久。现在回过头看,你师兄们用PyTorch其实已经说明了很多问题——学术圈和CV方向的主流早就迁移过去了,发论文、复现代码、跟SOTA模型,PyTorch的生态优势几乎是碾压级的。你花两周适应它的Dataloader和nn.Module,这个时间不亏,因为这些设计思路以后换任何框架都会用得上。
至于工业界岗位,确实TensorFlow的存量需求还在,但这两年新开的算法岗,尤其是偏研究或模型优化的,PyTorch的比例肉眼可见在涨。你如果目标是毕业进大厂,我觉得先别想着两个都精通,把PyTorch吃透,能独立实现一篇论文的完整训练和推理流程,这比啥都管用。等你有这个底子了,再看TF的静态图或者tf.function,你会发现核心概念都是通的,转换成本没你想的那么高。
关于部署,你担心的移动端吃亏问题,说实话现在边界在模糊。PyTorch有TorchScript和LibTorch,再加上ONNX这个中间表示,很多场景都能绕过去。真正卡脖子的往往是量化、算子融合这些跟框架无关的底层优化。你现阶段纠结这个有点早,先把模型训练明白,部署的事等你真接触项目了再说。
最后提一句,你既然已经感觉到TFRecord和静态图头大,那就别硬逼自己从TF入门了。兴趣和顺手程度对学习效率影响太大了,跟着师兄用PyTorch,有问题随时能问,这比看网上教程快十倍。先深入一个,另一个等用到再补,完全来得及。
跟着师兄走准没错,PyTorch在CV圈都快成标配了,大厂算法岗现在也认这个。部署问题别太焦虑,等真到那一步再说,先把手头模型跑溜了。
研一先把PyTorch吃透,CV方向跟组里走最稳,TF那套等实习需要再补也来得及。
说实话你这个问题我太有感触了,去年我毕业求职时也纠结过一模一样的点。你现在研一时间很充裕,别被“必须二选一”的焦虑绑架了。我的建议是主力PyTorch,TensorFlow可以暂时放一放,但别完全扔。CV方向师兄们用PyTorch不是没道理的,写代码调试的效率高太多了,尤其做科研要频繁改网络结构,动态图那种“改完就跑”的爽感,等你吃过TF静态图的苦就懂了。至于工业界岗位,现在很多大厂内部其实也在做框架迁移,甚至不少团队已经全面转向PyTorch了,你看到的招聘要求更多是历史惯性,真正面试时没人会揪着你用哪个框架不放,重点还是你对模型、数据流和底层原理的理解。关于部署,TorchScript和ONNX现在很成熟了,移动端吃亏的说法已经过时了,真正大规模部署时很多公司也会用TensorRT或者自研推理引擎,框架那层早就被封装掉了。所以我的经验是,把PyTorch学到能熟练改源码、能自己写训练循环的程度,同时抽空看下TF的Keras高层API就行,TFRecord那套等真用到再去查也不迟。你现在两周就能上手Dataloader,说明感觉是对的,别因为外界声音动摇。
PyTorch在学术圈和CV方向确实是主流,你跟着师兄走不会错,而且动态图调代码的效率优势在做研究时太重要了。至于工业界,现在很多大厂内部也在转PyTorch或做兼容层,TF的岗位需求更多是存量系统维护,你没必要为了这个去死磕TFRecord。部署方面,PyTorch现在有torchscript和ONNX,移动端吃亏没那么夸张,真遇到极致性能需求时大家也会用专门的推理引擎而不是硬啃框架。建议你先用PyTorch把CV的项目做扎实,等真正理解了模型训练和推理流程,再去补TF的部署或转换,那时上手快得多。
说实话你先把PyTorch吃透就够了,现在大厂算法岗面试手撕代码基本都是PyTorch,而且组里师兄都用这个,有问题直接问效率最高。TF那套生态确实偏工业部署,但等你真到了需要考虑部署的阶段,再补TF也不迟,而且现在PyTorch的torchscript和onnx导出也成熟很多,移动端吃亏没那么严重。至于两个都学,除非你精力特别旺盛,不然真没必要,先把一个搞明白比啥都强。
PyTorch先把CV吃透吧,部署时再转ONNX或TFLite补TF的坑,两不耽误。
大厂算法岗现在真不太看框架本身了,面试手撕基本都是白板或者PyTorch伪代码,重点在模型理解和调参思路。你师兄们用PyTorch不是没道理的,debug起来太爽了,尤其CV这种需要频繁改结构的领域。TF那套静态图部署优势主要在端侧,但说实话现在很多公司都直接转ONNX再走其他推理引擎了,绕开TF Serving的也不少。建议先把PyTorch吃透,等需要做部署优化时再补TF的推理流程,两个都学容易两头不深。
另外你提到Keras,其实TF2.0之后Keras就是官方高层API了,但底层那堆概念还是绕不过去。我身边做CV的同学最后基本全站PyTorch了,做推荐的倒是有用TF的。你才研一,时间充裕,先跟着组里走,别自己瞎纠结。
说实话你这个问题我太有共鸣了,研一那会儿我也在Keras之后纠结过这个。我自己的体会是,既然你师兄们都在用PyTorch,那你就先别管网上那些教程和岗位统计,跟着组里走是最省力的,因为遇到问题有人能直接问比啥都强。至于工业界岗位,说实话现在很多大厂算法岗面试更看重你模型设计能力和项目深度,框架只是工具,而且你进去之后大概率会换框架的。关于两个都学,我不建议现在并行,除非你精力特别旺盛,不然很容易两头都学不扎实,我当初是PyTorch用了半年后才去补的TF,有了对比反而理解得更快。动态图部署这块,PyTorch现在有torch.jit和ONNX,移动端吃亏主要是历史遗留印象,但你要是真做到部署那一步,很多时候是公司有专门的推理引擎团队帮你搞定,轮不到你手写优化。唯一提醒你的是,TFRecord确实烦,但如果你以后想碰推荐系统或者大规模分布式训练,TF的生态还是绕不开的,所以等PyTorch熟了再回头补也不迟。你现在才两周,别焦虑,框架这东西用着用着就习惯了。
说实话你这个问题我当年也纠结过,但现在回头看,真没必要在这上面耗太多时间。CV方向你跟着师兄用PyTorch绝对没错,学术圈新论文的代码基本都是PyTorch,你复现起来会省很多事。至于工业界岗位,说实话现在很多大厂内部也在从TF往PyTorch迁移,尤其是新项目,而且部署这块PyTorch这两年也追得很紧,TorchScript和LibTorch在移动端已经很能打了,除非你要做特别极致的端侧推理优化,否则差距没你想象的大。
我建议你把PyTorch学扎实,至少做到能不看文档写出完整的训练pipeline,包括分布式那种。TF那边不用专门学,等你需要的时候,比如遇到老项目维护或者特定业务需求,再去看官方教程也来得及,因为深度学习核心思想是通的,框架只是工具。而且你真进了大厂,通常会有专门的推理团队负责转ONNX、TensorRT这些,算法岗更多是写模型和调逻辑,不太需要你从零搭一套TF部署流程。
我现在工作两年了,日常用的还是PyTorch,TF几乎只在面试前翻翻概念。动态图在调试时的优势太大了,尤其你刚入门,报错能直接定位到代码行,比静态图那种抽象的图构建过程友好太多。你唯一要注意的是别只会调包,把数据加载、自定义算子这些底层原理搞懂,这样换框架也就是一周的事。
实话实说,你师兄们用PyTorch大概率是因为科研改代码方便,这玩意儿动态图调试起来确实爽,但工业界部署现在基本都是ONNX中转,TF的TFLite优势也没想象中那么大。建议先死磕PyTorch把CV基础打牢,等要投实习前再花两周补下TF的SavedModel和TF Serving就够用了,两个都精通不现实。另外你才研一,等毕业时可能行业风向又变了,跟着组里主流走肯定不吃亏。
别太纠结部署那点事儿,现在很多大厂算法岗面试根本不细问框架,重点是你对模型原理和项目深度的理解。我当年也是先学TF被静态图折磨得不行,后来切到PyTorch直接真香,现在工作里该用还得用TF,但上手成本低很多。你先把PyTorch玩明白,TF的坑等真遇到了再填完全来得及。
别纠结,CV方向无脑PyTorch,大厂算法岗早就不把TF当硬门槛了,部署的事交给工程团队就行。
CV方向无脑PyTorch,学术圈主流就是风向标,大厂算法岗更看重论文复现能力。部署那点劣势等真遇到再说,到时候转ONNX啥都能解决。
说实话你才研一,现在纠结这个有点早,但既然问了我就说点实际的。CV方向闭眼选PyTorch,组里师兄都用这个,你跟着走能少踩很多坑,而且现在大厂算法岗面试手撕代码基本也都是PyTorch。TF那套TFRecord和静态图确实劝退,但你别急,等你把PyTorch玩熟了,回头再看TF2.x的动态图模式会发现很多东西是相通的,到时候再补完全来得及。至于部署,现在ONNX和TensorRT基本把中间层抹平了,PyTorch转移动端没你想的那么吃亏,除非你专门做端侧推理优化,否则这个担忧有点多余。
PyTorch的生态在CV领域已经快成绝对主流了,你跟着师兄走基本不会踩坑,尤其是TorchVision和mmdetection这些库,改起来比TF顺手太多。至于工业界岗位,说实话现在很多大厂内部也在从TF往PyTorch迁移,尤其是新项目,你去看JD上写TF的不少,但实际面试手撕代码时基本都是用PyTorch写。两个都学的话,建议先把PyTorch吃透,TF只需要了解怎么用Keras搭个推理流程就够应付面试了,因为TFRecord那套学习成本高且收益低,现在很多公司都用LMDB或直接读图了。动态图部署到移动端确实吃亏,但那是部署工程师的活,算法岗主要产出模型,转换和优化有专门工具链,比如ONNX和TensorRT,你只要保证模型结构别太花哨就行。等你把PyTorch的炼丹流程跑顺了,再回头看TF,会发现那些概念其实都是相通的,只不过表达方式别扭。唯一要提醒的是,别陷入框架之争,多花时间在数据增强、模型设计这些真正决定效果的事情上,框架只是个工具。
别纠结,先跟着师兄用PyTorch把CV做深,部署的事等真用到再补不迟。
说实话你师兄们用啥你就跟着用啥,别犹豫,组里能帮你debug的人比网上教程值钱多了。PyTorch的生态在CV领域已经碾压TF了,你去看今年CVPR的代码基本都是PyTorch写的,工业界岗位写TF的多是因为存量项目,新项目很多也在往PyTorch转。动态图和静态图的差距主要在部署,但现在有ONNX和TorchScript兜底,真到移动端都是转成TensorRT或者Core ML,没人让你直接跑Python模型。至于两个都学,先把一个用透,另一个等面试前突击下API就行,你才研一,时间别浪费在纠结框架上。