对论文中模型进行编程实现时的注意要求和总结

看论文时,如果论文中有对自己研究方向有帮助或者具有实际用处的模型时,不免通过编程对其进行实现。如果是一个简单的模型,用个caffe、tensorflow之类的框架跑跑就出来的那就无所谓了,但是如果是一个稍微复杂,或者以后会用来做对比实验之类的模型,要是随随便便用个jupyter或者记事本写了出来连个注释都没有,那么当你要用到的时候就该后悔了。现在我就是遇到了这种情况。。。。所以想整理下编程实现模型的经验和总结,为以后能养成一个比较好的习惯打下基础。

1、注释

写代码时加注释这个说起来简单但是做起来难的习惯就不多说了,做个web项目或者app之类的都要加注释,就不用说那种全是计算、求导和公式的模型了,说不定哪天用上了光理解这个模型的时间就够重新写了。之前看了老师写过的一个聚类算法,没有注释,然后就光理解这个算法就用了一个寒假。

2、封装

封装的目的也很明确了,既然能作为面向对象的三大特性之一,那么封装的好处肯定是从古人到现在都有目共睹的。那么说下在对模型实现过程中对封装的体现:

  • 模型内部的模块化。关于这一点主要就是模型内部的一些功能的封装,一些重复调用的部分用一个函数进行封装。好处不用多说了。
  • 模型的封装。对模型整体进行封装主要还是方便调用和以后的使用。对比两个场景,一个是直接写在了一个py文件中了,从上到下执行,另一个通过一个class进行了封装,在另一个文件中可能会使用到这个模型,直接复制粘贴过去当然可以,但是还得对这粘贴的部分进行修改才能调用,如果通过了一个class封装的话,直接import一下然后一个构造函数调用就可以了,二者对比好处不言而喻。

再多说下对模型进行封装的好处,还是举个例子,自己辛辛苦苦写出了个聚类算法,或者是在论文中进行模型浮现的聚类算法,后面正好自己又打算写一个聚类算法的论文,之前写过的代码既没有封装又没有注释的话,岂不是这些工作又要再花上一些时间了。相反,如果封装的很好的话,直接换上数据进行调用就可以了。

3、实验数据处理

在做实验时,肯定会对数据进行读取啊,数据进行训练集、测试集划分啊,还有就是训练、测试次数的设置之类的。如果一个个进行修改也不是很费力,但是如果对实验数据也做一个类似的封装的话,每次只需在main中调用时修改就可以了,就不需要每次在函数内部或者参数上进行修改了。还是举个例子:有三个模型,三组数据,每组数据的训练和测试集长度、名称、训练次数等信息不一样,如果封装一个类似如下,通过这个class进行调用的话,直接修改参数,然后将这个对象作为参数传递到模型中调用就方便多了。

class Data(object):
    def __init__(self, path, name, train_num, train_len, test_len):
        self.path = path
        self.name = name
        self.train_len = train_len
        self.test_len = test_len
        self.train_num = train_num

4、实验结果记录

在做实验时,好不容易跑出了个结果然后结果全打印在了控制台上,一不小心将控制台的内容清空了就傻眼了。

所以说实验结果最好写在一个日志文件中。也可以通过封装一个类,将每次要打印的信息,如每次迭代的结果、准确率、收益之类的写入这个文件中。文件要以append形式写入。


5、代码编写(追加)

写代码实现模型时,一个最最最重要的问题我竟然忽略了,一个谁都明白的道理——不要写错了。在做模型时,一定要写完一部分就测试一下是否存在什么低级的bug,否则都实现好了或者实验结果都出来了再改代码就炸了。


以后总结出新的想法和得到的教训再追加。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值