最近跟着教程学深度学习,发现社区里两派吵得不可开交。我照着《动手学深度学习》用PyTorch写了个简单的CNN分类MNIST,感觉API挺直观的,但导师说工业界部署很多还是TensorFlow的SavedModel生态成熟。
PyTorch和TensorFlow到底选哪个?快被搞疯了
全部回复
共 25 条入门选PyTorch没毛病,动手学深度学习那套代码够你吃透原理了,部署的事等真到工业界再说也不迟。
说实话你现在这个阶段根本不用纠结部署的事,先把模型跑通、把论文复现了比啥都强。PyTorch的调试体验确实舒服,尤其跟着d2l走,代码和思路能对上号。TensorFlow那套Graph模式光理解静态图就得耗掉半管血。
我实习时见过工业界用PyTorch做上线前实验、再用ONNX转成TensorRT的流程,反而直接端到端用TF的没想象中多。你导师说的SavedModel生态成熟没错,但那是给已经定型的服务用的。你如果还在学CNN基础,选PyTorch至少能让你少骂几句街。等真遇到部署瓶颈了,再补TF也不迟,毕竟概念都是通的。
说实话我跟你情况差不多,当时也是纠结了好久。最后我先用PyTorch把整个项目跑通了,因为上手快真的能帮你快速验证想法,尤其读《动手学深度学习》的时候,代码跟书里完全对得上,那种顺畅感特别重要。但后来实习接触了工业项目,发现TF Serving和TensorRT那套部署链路确实成熟,尤其线上要求低延迟的时候,PyTorch转ONNX再转TF有时会踩些奇奇怪怪的坑。我的建议是别在选型上耗太久,先跟着教程用PyTorch把模型写明白,理解清楚反向传播和网络结构这些核心概念,等到真要上线了再学部署也不晚。不过有一点我有点疑惑,就是现在PyTorch的torchserve也在快速迭代,不知道你们实际生产环境里有没有人用它替代TF Serving?另外如果你导师那边有明确的技术栈要求,那还是听导师的,毕竟毕业和发论文的优先级更高。工具这东西说到底就是个习惯问题,等你在一个框架里写熟了,看另一个的文档也就一两天的事。
我当初也纠结过这个问题,后来发现真的没必要二选一。你跟着《动手学深度学习》走PyTorch完全没问题,那本书的代码风格就是PyTorch的,学起来最顺,而且现在PyTorch在学术界基本是统治地位,发论文、跑实验都绕不开它。至于导师说的工业部署,确实TensorFlow的SavedModel在早几年是更稳,但这两年PyTorch这边TorchScript和ONNX导出也跟上来了,很多大厂内部其实已经在用PyTorch做生产了。我自己的经历是,先把PyTorch学扎实,等真遇到部署需求,再花一两天熟悉TensorFlow Serving或者TorchServe,转换成本没想象中高。另外你去看招聘JD,现在要求PyTorch的岗位数量已经反超TensorFlow了,尤其国内。所以我的建议是,别把时间耗在选型上,先把手头模型跑通,等你的模型真的需要上线那天,自然就知道该用什么工具了。
跟风选型确实容易纠结,但你现在用PyTorch写MNIST觉得顺手,这本身就是个重要信号。我去年做毕设也是先试了TF,被各种版本兼容问题折磨到怀疑人生,换了PyTorch后调试效率直接翻倍。至于部署,现在PyTorch的TorchServe和ONNX导出其实已经追得很近了,很多公司新项目也在用。你导师说的SavedModel生态强是事实,但那更多是存量系统的惯性,等你真到部署那一步,说不定PyTorch又进化了。建议先把手头教程学扎实,别让框架选择消耗太多精力。