链接: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. c#小软件(SaveClassic)开发手记--(3)基础类(MP3播放类MP3Player)
  2. Android --- Bundle实现数据的读取
  3. webpack打包css文件
  4. python显示数据长度_Python使用s来检测数据的长度
  5. SAP CRM服务订单状态和SAP S/4生产订单状态
  6. 一名“企业定制化人才”的自诉:“我不愿意,但却无可奈何”
  7. oracle能不能改外键属性,CSS_小议Oracle外键约束修改行为(五), Oracle的外键用来限制子表 - phpStudy...
  8. 在UITableView中使用自动布局以获取动态单元格布局和可变的行高
  9. java上课签到如何写_java签到程序怎么设置?学生考勤程序怎么写?
  10. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第3节 综合案例_文件上传_5_综合案例_文件上传案例优化...
  11. Windows Phone开发(37):动画之ColorAnimation 转:http://blog.csdn.net/tcjiaan/article/details/7526026...
  12. 电磁兼容(EMC)标准结构的划分与分类
  13. GoogleEarth二次开发平台指南(4) --- 三维视频融合、视频拼接与摄像头控制
  14. 红米note3耍android8.0,凡人手机进化论 篇六:软件小白入门,红米note3全网通版刷入魔趣体验安卓9.0的快乐...
  15. 介绍计算机硬件的英语作文,电脑各部分英文介绍
  16. python爬虫抓网页的总结
  17. 你认为的CISP这个证书是怎么样的
  18. Google推出免费DNS解析服务器【8.8.8.8】
  19. TruckSim搭仿真车跑偏解决办法
  20. 【Python标准库】base64模块

热门文章

  1. 全国计算机一级考试试题和答案,全国计算机一级考试试题和答案
  2. 软件保护技术测试01
  3. 计算机组装与维修技能鉴定,计算机安装调试维修员(四级)技能鉴定试题单总汇.docx...
  4. Gallery2源码阅读图片编辑
  5. OC基础学习——基本数据类型和复杂数据类型
  6. TOOM品牌公关与舆情管理怎么做,品牌舆情监控工作制度是什么?
  7. 读论文,第一天:TransPose: Real-time 3D Human Translation and Pose Estimation with Six Inertial Sensors
  8. 更猛更持久的广告投放,闲鱼程序员的年终奖全靠它。。。
  9. 联想小新pro14/yoga 14s 2021安装ubuntu/kali/manjaro问题排雷,解决自带键盘、触摸板和显卡驱动问题
  10. 2018NCTF 部分writeup