PyTorch到底好用在哪里?头条

ctolib 发布于3月前 阅读121次
0 条评论

PyTorch到底好在哪,其实我也只是有个朦胧的感觉,总觉的用的舒服自在,用其它框架的时候总是觉得这里或者那里别扭。第一次用PyTorch几乎是无痛上手,而且随着使用的增加,更是越来越喜欢:

PyTorch不仅仅是定义网络结构简单,而且还很直观灵活。静态图的网络定义都是声明式的,而动态图可以随意的调用函数(if,for,list什么的随便用),两者的差距不是一点点。网络的定义在任何框架中都应该是属于最基础最简单的一个内容,即使是接口繁多的tensorflow,通过不断的查文档,新手也能把模型搭起来或者是看懂别人的模型。这个PyTorch也不例外,它的优势在于模型定义十分直观易懂,很容易看懂看别人写的代码。可以看看pytorch/vision 里面的几个经典的网络定义,我觉得很难找到比它更简洁易懂的模型定义了。

网络模型定义只是很基础的一部分,更重要的是模型的使用。比如在使用预训练模型finetue时,我们需要修改预训练模型某些层,新增某些层,删除某些层,新增的层希望给他较高的学习率,之前预训练的层希望学习率设为0。scene-baseline 是我前几天为AI challenger 场景分类写的baseline,可以参考一下,只用了几行代码就实现了预训练模型finetune(新增某些层,删除某些层,修改某些层),以及为不同层设置不同学习率 scene-baseline-optimizer

再比如在尽可能不修改原来模型源代码的情况下,获取预训练好模型的某些层的输出(Fast Neural Style需要用到),或者是使用多个预训练好的子模型,分别初始化一个复杂模型的某一部分,因为子模型的结构都是相似的,所以可以让这些子模型共享某些层的参数(知乎看山杯我就用了这个策略。表述的可能很复杂,其实在模型的构建只用了几行

谈太多框架的使用,可能比较枯燥,只有你自己用了才知道,PyTorch真的是越用越顺手。

 

下面说几点其它的看法,没有什么条理,不论证举例,只说想法,只是个人看法,不必太认真

1.PyTorch比TF更符合Unix/Python哲学

Unix哲学:做一件事,并把它做好。(真的要在做实验的时候考虑如何把模型部署到手机,利用TPU加速?)

Unix哲学:KISS(keep it simple, stupid)。github上TF有接近100万行代码,PyTorch只有它的十分之一多一点。TensorFlow创造了 图、会话、命名空间、PlaceHolder 等一大堆全新的概念,简直就是一门新的语言。TensorFlow是Make It Complicated ,TensorFlow+Keras是Make It Complicated And Hide It。而Keras的Hide it又违反了Python的哲学(扁平胜于嵌套 ),丧失了灵活性。而PyTorch就是tensor-autograd-nn 三级封装~ 简洁易懂

Python之禅:尽量找一种,最好是唯一一种直观易懂的实现方案(猜猜TF中RNN有多少种实现,猜猜除了Keras、Sonnet、TFLearn、TensorLayer、Slim、PrettyLayer之外tensorflow还有多少个第三方API )。PyTorch的不同人写的代码都差不多,很容易看懂。

需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。