【随笔】第一次科研积累的一些经验

从2021年6月开始接触科研,到7月开始上手科研,再到10月做出人生中第一篇科研论文,这个过程中积累到非常多宝贵的经验。由于时间关系(最近专业课和竞赛多),多的话就不说了,直接分点记录自己的一些收获(不一定都是正确的,毕竟是科研路上迈出的第一步)


Experiment and Coding

  • 从实验初期开始,就要养成及时记录实验效果、实验参数、实验阶段等等信息,相信起初做的细小的工作,在后期多少都是能用得上。
  • 对于刚接触科研的小白,最先接触的一般都是读论文+跑实验,跑实验首先是侧重于跑别人开源的代码(GitHub),比如我其实花了不少时间把作者的GCN、GAT、GraphSAGE等模型跑起来。跑别人的开源代码,也是一项重要的能力,也是最基础的东西,涉及到配匹配的环境(库和cuda等)并不轻松。
  • 养成DEBUG(调试)的习惯非常重要!这个是我看学长coding时学习到的重要技能,以pycharm为例,不需要把调试点全print来看,而只需要设置好断点,DEBUG到该行,再用calculator工具输入自己想观察的变量,一切真相就呈现在眼前了。唯一存在的问题就是,DEBUG会保存模型里运行的变量值,所以跑程序会慢很多(当然这也不算牺牲,毕竟DEBUG就是为了解决烦心的BUG的)。
  • 最后用matplotlib跑实验结果图的时候,不要忘记设置figure的size以及font的size,否则好不容易跑一堆结果出来才发现放进论文里大小参差不齐。
  • 自己写代码的时候一定要细心,之前有几天我就反复出现低级错误,变量名写错了一步,导致后面效果很差,怎么也发现不了。所以,写代码时注意复查,一遍过很容易惯性思维。
  • 实验效果不好怎么办?以我为例,那段时间里实验效果一直很差很差,想不到原因,那半个月人都快抑郁的感觉了。和师兄一起在那半个月里大概改了10版代码,最终得到了效果很棒的结果。这10版模型代码的工作量都非常大,从数据处理的脚本到最终模型的搭建都大面积修改。那段时间非常赶,几乎是平均2天内会改一版代码,每天晚上12点从实验室出来回宿舍,反复经历期待到绝望的过程。所以说,实验效果不好,不要太焦虑,因为很正常,这个时候应该沉下心仔细思考思考还能有什么方法去改这个代码。
  • 做数据处理的时候别忘记了特征的归一化/标准化,如果标签范围差距太大也需要做归一化/标准化,计算loss和梯度下降时不影响,但是如果要用预测标签和真实标签做运算结果的话,一定要记得把预测值反归一化回去再使用。
  • 非数值特征(类别型特征)的处理方式可以是one-hot编码(get_dummies),但是如果种类太多会导致特征维度过大(可以考虑降维方法)。也可以不用one-hot编码,用简单的int编码即可(和标签编码相同,从0编码到n-1),之前我就直接用的OrdinalEncoder/LabelEncoder处理。
  • 要熟悉GPU的使用,不管是在本地机器跑代码还是上传到GPU服务器上跑代码,你写的代码都应该支持扔进GPU运算,简单来说,代码中需要训练的tensor变量和model,都应该扔进cuda device中。以前我写代码是x = torch.FloatTensor(x), x.to(device),这里的device是cuda: 0这样的。现在更直接的写法是x = torch.cuda.FloatTensor(x)即可。有没有把GPU利用起来,可以通过torch.cuda.is_available()来查看cuda是否可用,以及通过nvidia-smi命令查看gpu占用率。
  • 模型基本定型后,记得把训练出来的模型及其参数都保存下来,一般会采用模型名/数据集+时间戳的方式命名。
  • 当实验效果差的时候,不要掉进一个误区——调一晚上参数就能好起来。实验效果差并不能通过调参改善,调参只能达到小范围的提升,这个时候的正确做法应该是——积极思考方法上的修正(包括实验方法甚至是整个论文idea的思路和方法)。可能对于和我一样的小白来说,改实验方法或论文idea方法的时间成本太高,但是根据师兄的经验以及一些UP主的经历,这样做可能收益会最大(当然也都是建立在来得及投稿的基础上,稳住心态就非常重要了)。
  • 善于学习别人的源码!往往第一次写项目代码时都会跟着自己的习惯去写,拿我举例,以前没有写过代码量较大的项目,刚开始做科研的时候我就开始在main函数里堆代码,本应该是DataLoader.py和Utils.py做的工作,我都堆在main.py中写。冗长!难调试!不规范!怎么改呢?多读源码,多读GitHub上别人开源的机器学习项目代码,学习优秀代码的组织结构。

Paper Writing

  • 因为是刚接触英文写作,所以尽可能参照着相关论文来写,多用别人文章里写得好的词和句式,模仿多就慢慢转化成自己的写作风格了。
  • 论文的绘图一定要美观好看,是论文的点睛之笔。
  • 写作的顺序,大概就是先从methodology开始(是论文的大头),然后experiment推进完善(论文的效果),至于introduction、related work、conclusion这些部分,最后推进起来就会快一些。
  • 写作用latex来写,我看师兄师姐用的比较多的是vscode和overleaf,overleaf最大的好处就是多人协同编辑。
  • 写作之前,要先把论文的framework整理好,比如每个section都单独作为一个tex文件,然后在主文件中input进去。当然这只是一小部分,更多的技巧需要我去慢慢积累。
  • 做好论文的本地备份,比如从overleaf上导出整个latex文件(一般存zip),如果overleaf上文档出错或丢失,能快速上传zip恢复论文。
  • 写参考文献是都有一个label方便我们在正文中进行引用,这里的label尽可能有一个统一的标准,方便我们写引用,也方便我们快速检索参考文献。比如我这篇就用的是【论文title的第一个词+发表年份+第一个作者名】
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.zwX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值