深度学习科研中,代码能力跟不上怎么办?
深度学习科研中,代码能力跟不上怎么办?


从复现代码入手最靠谱
如果你完全不知道从哪开始,我建议你先从复现别人的代码开始。GitHub上找个star多的项目,比如MMDetection或者Detectron2,下载下来跑一遍。不要只是把代码跑通就完事了,要逐个模块去看。
我的方法是先看主函数train.py,理清整个训练流程。然后进到dataloader看数据怎么加载的,再看model看网络怎么搭的,最后看loss和optimizer。每个模块看完就在旁边写注释,用自己的话解释这段代码在干什么。这样下来,整个项目的代码结构你就清楚了。
复现的时候试着改点东西,比如把学习率调大调小,换个优化器,换个backbone。改完之后跑一遍,看看结果有什么变化。
把paper里的公式翻译成代码
做科研经常要实现paper里的算法,很多同学看公式头疼。我的经验是先把公式拆解开,一步步翻译成代码。比如你要实现一个注意力机制,公式是Q、K、V三个矩阵相乘,那就先写三个线性层生成Q K V,再写矩阵乘法和softmax。
关键是要对应起来,公式里的每个符号在代码里是什么变量,维度是多少,都要搞清楚。我一般会在代码上面写注释,标明这段代码对应公式的哪一行。这样既能帮自己理清思路,以后看代码也方便。
写代码要模块化
很多同学写代码就是一股脑全写在一起,几百行的函数看着就头大。我的习惯是把代码拆成小函数,每个函数只做一件事。比如数据预处理单独写一个函数,模型forward单独写一个,loss计算单独写一个。
这样做有两个好处,一是逻辑清晰,出bug容易定位。二是方便复用,下次做类似的项目直接把函数拷过来改改就能用。我现在做项目都会积累一个自己的代码库,常用的模块都在里面,新项目直接调用,效率高很多。
变量命名也很重要,别用x、y、z这种没意义的名字。看到batch_size、learning_rate这种变量名,一眼就知道是干啥的。
遇到bug别慌张
代码写多了肯定会遇到各种bug。我的经验是先看报错信息,大部分错误都会告诉你哪一行出问题了。然后打印中间变量的shape和值,看看是不是跟预期一致。
如果实在找不到问题,就用二分法注释代码,一段段排查。或者把出问题的部分单独拿出来写个小demo测试。实在不行就去issue区搜搜,看别人有没有遇到类似的问题。
#深度学习 #复现 #算法改进 #科研小白#实验#代码#调参#debug#python#发文
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。