scikit-learn, tensorflow, pytorch真的只需要查下API,不需要学吗?

链接:https://www.zhihu.com/question/403870382/answer/1316762694

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

经常看到一些人说: "scikit-learn, tensorflow, pytorch等库要用到的时候查一下API即可, 不需要学的."

比如:现在tensorflow和mxnet很火,是否还有必要学习scikit-learn等框架?

就说scikit-learn, 我学了好久, 感觉还没有完全学会, 大佬们真的只要用到的时候, 临时查一下API, 就会用了?

人和人的差距有这么大吗?

作者:甲鱼
https://www.zhihu.com/question/403870382/answer/1328865627

逃避阅读源码,会让自己的技术水平永远卡在一个瓶颈中没法动弹。

我原来也是抗拒阅读源码,觉得api就足够了,还要看什么源码?源码已经给更厉害的人看了,我肯定没有改进空间的。

抱着这样的想法,我遇到了一个问题,就是pytorch的dataparallel模块,一个数据并行,采用多个显卡计算的模块,我用起来速度永远比没用还慢。用通俗的话来说,就是4块显卡跑起来比1块还慢。

我想着肯定是自己的代码问题,网络也许适合Dataparallel,也许自己传输数据的时候不规范。

结果经高人指点,发现Dataparallel这个模块就是有问题的。它是将所有计算结果的loss梯度反穿到一个卡(cuda:0)上。这种算法肯定是有问题的,几G的数据传输,loss计算都在一个显卡内完成。这不是有病嘛?

我刚开始心情很操蛋,为啥这么厉害的库,能够犯如此愚蠢的错误?后来我慢慢也就接受了,别说pytorch,就算linux内核,它都是人写的。只要是人写的,就会有错误,有问题,就有兼顾不到的地方。

而如果你不会阅读源码,你就很难在这些具体困难上发现问题的核心。更不要谈解决问题了。你的技术永远被一层瓶颈制约,上不去一层。


作者:锟斤拷
https://www.zhihu.com/question/403870382/answer/1312190418

“写作文根本不用学汉字,遇到不会写的字查字典就可以了啊”

但是你写作文的时候首先得知道,我要用哪个字,自己这个字用在这里的效果会怎么样,这些都是你平时积累的。新华字典只能告诉你这个字怎么写,他不能告诉你怎么写文章。

同理,API文档只能告诉你每一个API怎么用,但是你遇到的问题应该用哪个API,以及用了这个API之后的效果,有什么好处和不足,是靠自己积累的。

说那些话的人,他们已经有了这个积累了,他们确实只需要查查文档就可以,但是如果初学者信了他们的鬼话。

作者:东方硕
https://www.zhihu.com/question/403870382/answer/1341029628

API?怎么查?

我举个例子,pytorch里面,你的model要to(device),然后再从中获取parameters作为参数送入Optimizer的构造函数里面,这部分的文档会跟你说这个顺序是很重要的云云。

但这只是单卡,到多卡的时候,如果你要按文档推荐的用torch.distributed,你会发现没法先model.to(device)再parameters()了,因为假设每个进程独占一个GPU,则每个worker子进程的device不一样,必须开了进程以后再决定。那这时候就不能初始化好了Optimizer再开进程了。怎么办,改设计、到每个worker进程里面再初始化Optimizer?其实也不是不行,毕竟DistributedSampler也要rank才能初始化,这个时候DataLoader也就只能在worker内部初始化了。

但是,如果你真地仔细研究一下,你会发现,model.to并不会改变参数的py对象,但是会改变parameter/tensor.data的device!因此在主进程初始化好了Optimizer再传给worker一点问题都没有,在子进程里model随便to(device)一下,opt会跟着变的!这样程序写起来耦合低,用起来方便多了。(仅torch1.1调试过,刚翻了1.5的文档,目前还是这么个设置,说以后会变但是没说什么时候变)

但重点是,这个现象,是module._apply决定的,你仅仅看model.to的文档根本发现不了,反而会被误导(两处文档自相矛盾我也是醉)

当然,如果你只是跑一下现成代码的话,一般也就用用DataParallel,顶多用用DistributedDataParallel,确实也用不着这种细微末节的奇技淫巧。不过真要自己造轮子,对你用的工具不够熟悉是做不来的。

作者:南瓜派三蔬
https://www.zhihu.com/question/403870382/answer/1306728046

当然不是,初学者容易这么认为。

对于sklearn:你得了解很多参数的含义和作用,所以需要研究这些api的算法;

tensorflow和pytorch:你得需要了解深度学习模型的结构(当然也包括背后的原理),然后用这些工具来实现这些结构。这里的api其实是一大串api,就像积木一样。

任重道远哩,而且还有包中包,比例tensorflow中的tf_agents是做强化学习的,tf_fl是与联合学习有关的。

作者:HCAB
https://www.zhihu.com/question/403870382/answer/1332653183

诚然去硬记API那些函数和参数是没有多大意义的,但至少对于sklearn或者pytorch这种包而言,通读一遍User Guide还是必要的,这不但能给你提供较为全面却不至于琐碎的主干信息,而且哪怕等到之后再次需要查阅API的时候,理解也会比没有读过UG的更加深刻。

另外,任何代码都还是人写的,虽然此类大型的包都有核心的开发小组,但是人数并不多,主要贡献代码的可能就是那么十几位,犯错几乎是不可避免的,否则也不会有那么多issues。因此对于官方设计的那些接口而言,可以经常思考如果是自己写会怎么设计(提供多少方法/怎么实现/参数能给到用户多少自由度/默认值怎么设),为什么要提供/组织这些模块,再与实际源码的实现进行对比,甚至PR进行改进,在这样的反复思考且阅读的条件下,能力应该是会得到快速提升的(可能一开始比较痛苦),而不是只停留在查完API就束之高阁的阶段。

作者:喵圈转圈喵
https://www.zhihu.com/question/403870382/answer/1317640943

个人观点,要看你个人对机器学习实际掌握的情况。

如果已经对算法理论的各个方面掌握的很好了,那么scikit-learn, tensorflow, pytorch这些就成了实现你设计的算法的工具,这个时候,大多是不需要去刻意学习的,临时查一下一般就可以了。

如果是一个新人小白,那么这个时候scikit-learn, tensorflow, pytorch的意义就不仅仅是算法应用的工具,还可以在学习机器学习的过程中更好的理解算法的细节

算法模型在理论讲解和推导的时候,都是使用的抽象化的公式、原理这些去讲解的。看数学公式推导是非常枯燥的事情,并且很多时候,就算是理解了数学推导,实际用的时候也是一知半解,问题就是在于不知道这东西咋实现的。这个时候,了解实际的细节就显得很重要,最简单粗暴的方式,看代码,自己实际去跑一跑。而且,很多时候发现,即使是像pytorch,TensorFlow这种已经基本成为深度学习底层模型工具的库,跑出来的结果也会和预期有很大的不同,非常有助于理解算法的。更不用说sk-learn了。

举个例子,ECCV2018的一篇paper,《deep clustering for unsupervised learning of visual features》将深度网络和无监督结合到了一起。

基本原理是通过聚类产生伪标签,然后再计算基于伪标签的损失值,然后更新网络参数。

那这里的问题就来了,网络参数更新的具体操作是啥,一个epoch下的多个mini_batch在更新网络参数的时候,Classification模块的参数要不要更新,是随着mini_batch更新,还是对一个epoch训练好之后再考虑将loss回传到Convert模块里进行参数更新?

这个时候最有效的方式就是去看源码(pytorch)

作者:飘入东湖的鱼
https://www.zhihu.com/question/403870382/answer/1319479778

在你查API之前,你需要知道这个API是存在的。就好比你查一个汉字,你得知道这个汉字是存在的。因此你需要知道它有那些API,以及这些的API的功能是什么,至于具体怎么用,可以不用管,用的时候查询就行。

至于你说的学习scikit-learn很久了,感觉还没有完全学会,大佬们真的只要用到的时候, 临时查一下API, 就会用了?    没学会,我猜测主要原因是你没有机器学习基础知识,完全是从零开始,而大佬们知道不同模型的输入输出,知道模型的作用,只需要查查API,看看超参就能用了。

焦虑是正常的,沉淀一段时间,你也能成为你口中的大佬。

作者:lailaidada
https://www.zhihu.com/question/403870382/answer/1318444590

sklearn基本上是,只要你确实对算法和模型已经充分熟悉,大概了解它们实现了哪些模型,实现到了什么层面,需要用什么查查就行

tf的话细节多一点,毕竟是更灵活的框架,需要实践经验,会有一些坑。而且tf1和tf2思路不太一样,但找几个最佳实践实现一遍就懂了

sklearn真的非常好,文档清晰,实现优雅,调用方便,容易理解,很多模型库都会仿照做一套类似的api。它内容很多,很难一下子都掌握的,但你只要明白它的主要模块怎么组织的,多的那部分无非是各种模型,需要用的时候查查看就行

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文(无广告)。

扫描二维码添加小编↓

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值