链接:https://www.zhihu.com/question/348376942/answer/1917476012
编辑:深度学习与计算机视觉
声明:仅做学术分享,侵删
本人7月份才接触现在的课题,看了将近40多篇相关英文文献了吧,有了几个idea,开组会,老板们也通过了,接下来就是实现idea,可是自己之前没有接触神经网络方面的,现在要改实验代码,觉得好难啊,是一块硬石头。快泄气。。但是没有退路,必须得做。因为没有正反馈,所以总是很打击自己…… 自我怀疑,我都自闭了。。但是,同时也告诉自己,别人也是从不会到会,从无到有。广大的知友们,有没有什么好的建议,让我可以少走点坑,顺利一点…………
看看下面小伙伴有什么建议吧?
作者:知乎用户
https://www.zhihu.com/question/348376942/answer/1824059239
老老实实练习编程,读别人复现论文的代码,然后自己照着写——没别的办法。唯一称得上建议的就是All in pytorch——现在它的易用性已经很不错了,开源代码生态也很丰富,动态图机制也非常有利于自己在Python交互环境里做实验,基本上你认真学多动手练还是很容易上手的。
现在这个年代入行的人,比起几年前那批已经幸福多了——身为一个智商低不会用TF的废物,我对pytorch只有感恩。毕竟,起码现在我们基本上不用再跟群魔乱舞叠床架屋的TF1.x打交道了,更不用说更加古早的刀耕火种年代的产物们了。
作者:孙嘉龙
https://www.zhihu.com/question/348376942/answer/847043056
正如yulong wang所说,有pytorch和tensorflow已经很好用了,如果组里之前的遗留代码不是基于这些的,可以考虑重写,但重写也不比你看懂它们简单。
现在DL里idea是最廉价的,其实大家能想到的都差不多,这是充分竞争的。
某些领域数据集卡住了一大批人。
原型实现卡住了一些人,但pytorch之流已经很好用了。
硬件资源卡住了一批人,工程性能又卡住了一大批人。
然后才是能够比较好的反复尝试idea的状态,但其实真正的怀疑人生才从这开始。
结论是:工程困难请自己下功夫突破,如果突破不了可能这个方向不适合你。
作者:叶小飞
https://www.zhihu.com/question/348376942/answer/1923857788
题主和我反着,我一直比较困扰提出很novel的idea, 但我实现idea的速度是很快的,从头搭一个一般复杂的pipeline并调通基本都能控制在一周之内。题主按我这四步走,一定很快就能上道!
一开始对深度学习不熟时,切勿自己蒙着头写代码。既然题主已经看了四十多篇论文,并且有了自己的idea, 那么肯定知道自己要做的方向有哪些前人写下的不错的论文, 从这些论文中挑选出一到两篇作为你的baseline,作为你的代码开端。一般一个好的baseline有两个特点:
1)它一定有开源代码,而且有较完整的文档(readme)。如果它的github星蛮多的更好,说明很多人用过,质量没问题。2)它发表的时间是近两到三年的。深度学习的发展速度实在过快,时间久远又没人维护的,它用的代码框架什么的可能会过时,比如我之前做colorization, 有几篇不错的都是用的caffe, 比较难拿来直接用。3)它里面的公式整体较为清晰,这样方便你对照着代码来看公式,当你明白了如何把理论的公式转化为代码时,你基本就上道了。
当你找到了不错的baseline论文后,就要深入阅读、使用它的代码了。在你基础较差时,提高代码能力最好的方法绝对不是头铁地去楞写,而是阅读别人写的优质代码。阅读代码也是有诀窍的,一般分为这么几步:
按照github的文档配置好你的环境。几年前配置环境其实是个蛮痛苦的事,那时候我还用caffe,简直就是噩梦,但现在配置环境变得特别傻瓜式,pytorch/tf都特别好配置。
配置好环境后,按它readme的步骤下载相应的数据,运行相应的脚本,让它的训练先能流畅地跑通。优质的开源代码基本都能跑通,如果在中间报了错,一般都是library版本不符。但如果是涉及到算法内部的问题,就要走到下一步了。
当你把开源代码跑起来或者遇到算法里的bug之后,用一个好的ide(例如pycharm)进入debug模式。在这个模式下的最大好处,就是你可以拿着实际的数据一步一步看代码,哪一步看不懂就对照论文的流程加谷歌一下API的使用方法,很多你干看看不懂的代码结合着tensor shape或者处理过后的数据的shape/value就能看懂。在这一步一步debug运行代码的过程里,其实你对深度学习完整的pipeline怎么写基本就有了一个比较好的认识。如果时间允许,建议把你找到的几篇baseline都这样跑一遍,并且写个笔记记录下大概流程。
我一般喜欢根据自己特定的任务从头搭建整个pipeline(包括数据I/O, 预处理,模型搭建,loss定义、训练与验证、测试等等),但鉴于题主刚接触深度学习代码,可以从第二步中挑选一个不错的baseline作为你的基础代码,站在它的肩膀上进行修修剪剪。一般你要做的方向虽然可以用baseline的算法,但数据集往往不同,所以在别人的基础上搭建自己的pipeline最重要的是修改数据读取和预处理部分。在这一步先不要把自己的模型加进去,用baseline的模型能跑通你自己的数据即可。
经过了上面三步之后,你已经对深度学习训练预测的流程有了一个比较清晰的认识,这个时候可以开始把你自己的idea加入pipeline. 一般来说你的idea无非是提出了更好的模型,或者更好的训练机制。模型或者loss你在网上一般都能找到整体架构较为类似的代码,比如你要做轻量级图像分割,那大概率可以借鉴Unet,网上一搜一大堆,按照他们的格式仿写即可。这里有个小诀窍,你搭建自己的模型搭好后可以先不放入自己的pipeline里真枪实战的训练,先生成几个随机的tensor扔进去做inference, 看看能不能跑通,输出的shape是否正确。
最后一点点建议,新手想快速入门首选pytorch, tf1.x对新手挺不友好的,而用tf2的研究人员比较少,容易找不到现成的代码。
作者:Yulong
https://www.zhihu.com/question/348376942/answer/846994671
之前没接触过,看了40篇,就想了好几个idea。抱歉,大跃进时代已经过去了,魔改网络连接就能发论文时代已经过去了。你这几个idea,应该是即没深度,也不靠谱。因为所阅读量太少,之前积累太少。你只看到了成功报告的结果,而没看见背后有多少失败的下场。
有idea实现不出来,工程能力跟不上。我据此认定你是转行来的吧。那基本上你缺的至少是python语言熟练运用,bash基本操作,结果分析可视化技巧,数据读取存储。如果你的idea再带上什么魔改op操作,c++/cuda那更别说了。默认你之前会点数据结构matlab,但这些趟一遍下来,至少一年半载入门起步。
想要什么捷径,几乎没有。其实应该感到幸运,因为9102年了,我们有pytorch,tensorflow。网上大把大把的tutorial code repo。不会写你还不会抄嘛
遥想当年,cuda-convnet,theano不堪回首。
batchnorm还没有发明,resnet仍在襁褓。
lstm手写反向传播,让你怀疑自己有没有大脑。
imagenet单卡训一遍,十天半月少不了。
caffe的BGR输入,偷偷把你pretrain结果废掉。
我觉得应该有人找Alex唠一唠
是什么支撑他度过黎明前的黑暗
又是什么让他事了拂身去,把功与名深藏
作者:腹黑小太阳
https://www.zhihu.com/question/348376942/answer/852491317
有idea?哈哈哈哈哈哈,有idea就能成那就容易了。
真正的工作状态是这样的:
1、有了个新idea
2、赶紧编码验证一下
3、诶怎么不work?
4、检查下是不是哪里写错了
5、算了换下一个idea
还有这样的:
1、终于找到一个work的idea,哈哈哈哈哈我太特么机智了
2、总结一下写个论文初稿
3、换个数据集跑一下,补充下实验
4、不work了。。。
5、检查下哪里有bug
6、尝试找出部分work的范围和原因
7、算了怀疑人生
恕我直言,有“就差个程序员”这种思想的,根本就是连门都没入,所谓的idea你入门以后再来看估计自己都会觉得幼稚得可笑
作者:远处群山
https://www.zhihu.com/question/348376942/answer/840883415
代码这道坎好像没什么捷径,老师啊同学啊也没法很具体的帮你。
以前我刚开始做科研的时候,也对代码抱有很强的恐惧心理。
一个比较好的办法是,先找到一份完整的深度学习代码,仔细看明白别人是怎么写的,每一处的原理是什么。把一套代码彻底弄明白,自己大概就知道怎么写了。
个人建议,不要在别人的代码上改,还是要自己构建一套,因为别人的代码往往有很多别人独有的东西,你要花很多精力才能改成你想要的,这样效率不高。
代码这种东西,你接触的越深,就越不会畏惧,因为它是纯讲理的。。。
你从7月到现在,满打满算三个月时间,没出结果是正常的,才三个月而已。
作者:ZhidongYang
https://www.zhihu.com/question/348376942/answer/849951410
谢邀,Biomedical Image 博士刚入学。
讲道理现在Deep Learning和学习思想已经渗透到了很多领域。这个东西没有途径,就是看论文,看代码,代码+论文对照着读,按照你的idea改代码,跑实验,调参数,改idea。就这样子。3月份的一个B类workshop已经深深体会到了coding的重要性,我的coding能力也一般,所以现在也在有意识地去多用Python写作业以及复现文章。
多看多做,提高效率,别无他法。
还有,模式识别和机器学习的经典算法如概率图模型,隐马尔可夫,Energy Function以及控制论的一些基本理论和算法我觉得还是要融会贯通的吧。万一深度学习有一天不火了不work了,传统方法还是永远很solid的吧。毕竟这种数学推导很扎实的理论还是有其中的“道”存在的,暴力方法不会永远work的,但是“道”永远不会变。
如果问我什么是融会贯通:
手推公式,编程,分析,理解。一样都不可以少。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓