链接: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」,每日朋友圈更新一篇高质量博文(无广告)。

扫描二维码添加小编↓

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

  1. 2020,PyTorch真的赶上TensorFlow了吗?

    机器之心报道 参与:张倩.杜伟 几天前,OpenAI 通过官方博客宣布了「全面转向 PyTorch」的消息,计划将自家平台的所有框架统一为 PyPyTorch.这一消息再次引发了社区关于两个框架优劣的 ...

  2. 【scikit-learn】如何用Python和SciKit Learn 0.18实现神经网络

    本教程的代码和数据来自于 Springboard 的博客教程.本文的作者为 Jose Portilla,他是网络教育平台 Udemy 一门数据科学类课程的讲师. GitHub 链接:https://g ...

  3. Scikit Learn: 在python中机器学习

    Warning 警告:有些没能理解的句子,我以自己的理解意译. 翻译自:Scikit Learn:Machine Learning in Python 作者: Fabian Pedregosa, Ga ...

  4. [转载]Scikit Learn: 在python中机器学习

    原址:http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据集大小的示例:数码 ...

  5. 机器学习与Scikit Learn学习库

    摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...

  6. 12大深度学习开源框架(caffe,tensorflow,pytorch,mxnet等)汇总详解

    这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...

  7. Hinton NIPS2017 手写识别实现 TensorFlow \ Pytorch \ Keras

    10月26日,深度学习元老Hinton的NIPS2017 Capsule论文<Dynamic Routing Between Capsules>终于在arxiv上发表.今天相关关于这篇论文 ...

  8. python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别

    之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...

  9. scikit - learn 做文本分类

    文章来源: https://my.oschina.net/u/175377/blog/84420 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的句子,我以自 ...

最新文章

  1. 2022-2028年中国PET薄膜行业市场深度分析及未来趋势预测报告
  2. (asp.net)百度浏览器Cookie的神奇bug
  3. Android Studio安装踩坑
  4. php mvc 路由,PHP手写MVC (五)—— 路由
  5. git向远程推送代码提示fatal: Authentication failed
  6. 入门mysql执行计划
  7. 剑指offer 数字在排序数组中出现的次数
  8. 通过xib创建控制器
  9. 亮风台AR眼镜震撼发布 HiAR 产品全面升级
  10. 阿里的技术绝境与飞天之路
  11. 欧拉项目(python练习)problem 45
  12. luogu P2440 木材加工
  13. 推荐15个清爽简约风格的 HTML5 网站作品
  14. Lottie Android 动画制作与使用
  15. 基于Grafana的Web监控报警
  16. SpringBoot整合xxjobl
  17. 用C++实现中国象棋
  18. AndroidStudio多渠道打包
  19. WaitForSingleObject -- setevent 讲解与编程示例
  20. Python+Django+Mysql实现在线电影推荐系统 基于用户、项目的协同过滤推荐在线电影系统 代码实现 源代码下载

热门文章

  1. 摇摇开门:管理,需要思维的大转变
  2. 数字城市中模型的建立
  3. (附源码)springboot高校二手教材管理平台 毕业设计 231057
  4. u盘装的linux怎么运行不了怎么办,大白菜u盘安装linux小米模式怎么打开不了怎么回...
  5. 旅行大数据 -- 全球24个时区国家在同一天的生活
  6. Linux命令--mysqld_safe和mysqld区别
  7. 闪光灯slave是什么意思_摄影中闪光灯有什么作用?要怎样用?
  8. BWT(Burrows-Wheelter Transform)算法
  9. 帮助文档 html 模板,html模板
  10. 【亲测有效】预防WannaCry病毒只需要一招