【小白做科研(五)】复现代码(下)

前言

上次说到了复现模型,欠着训练和评测都没讲,这周把训练评测都搞定了,然后又复现了一篇新的,有一个感触就是深度学习这些模型看着感觉怪吓人,但是代码逻辑不是特别复杂;而且自己写一写这些代码,真的感觉入了门,以及pytorch forum竟然给我发了邮件说把我提升了用户评级(因为我经常看他们博客)hh~

这一篇也主要分享一些看到的好的博客,以及遇到的各种困难, 还有解决的过程。

数据处理

之前搬了微软在TensorFlow平台实现的手写iterator到Pytorch上,心里其实一直有个疙瘩因为没有用pytorch自带的DatasetsDataloader,再加上新复现的模型有一些特别的要求,我想的就索性重构一下原来手写的Iterator,实现过程调用了好几个torchtext的api(因为感觉很帅hh),但是我中间测试了一下发现新写的比原来的慢了5s。。。 具体原因还在探究,心态血崩后觉得以后还是不能盲目崇拜,有时候原始丑陋的代码也是很管用的。

训练

训练过程其实没啥说的,有一个好东西叫做tqdm是python的一个包,可以包装iterator然后动态显示进程。个性化显示数据等等,截张图放下面hh
【小白做科研(五)】复现代码(下)_第1张图片
我这里数据及比较小(毕竟还没传服务器),大家可以自己去试试效果。

测试

要评测模型肯定少不了各种metricsklearn.metrics里面有很多api都很方便,比如roc_auc_score等等,但是输入数据的格式还是要看一下文档的。

我代码里抄了微软写好的好几个metric比如mrrndcg@k,仓库里/utils/utils.py里都有大家可以自己看看。

封装

我现在是把模型训练、评测都封装到外部函数(需要传入模型实例作为参数)里了,我感觉挺方便;但微软是所有模型都继承了一个基类,基类中封装了fiteval函数,但是我可能之后还会复现奇奇怪怪的模型,而且嫌麻烦就没这么搞。

Fixed or Adaptive

要复现的论文里都会给出他们使用的各种超参数,然后有的超参数比较方便调整,有的超参数的改变会涉及到模型结构的变化(比如卷积层个数),这种东西真的很难自适应修改,这种超参数我反正目前是固定的,我觉得问题不大,我也没有对比的需求。

我的代码

再次给出我的仓库,目前实现的两篇([23] Npa Neural news recommendation with personalized attention 和 [29] Fine-grained Interest Matching for Neural News Recommendation)的所有代码都在里面, 喜欢的可以标个星~

最后,欢迎大家交流指正。

你可能感兴趣的:(Research)