自己不是纯代码为主,而主要研究算法,因此自己以前全部代码都是停留在能用的阶段,但自从git clone SRPytorch 这一工程后,觉得需要提升自己代码可读性,也便于自己算法的对比。现大体归纳为以下几点:
1、适当的目录
之前很不好的习惯是全部代码放在一处,甚至放在一个文件中。受SRPytorch的启发,按模型构建、模型保存、附加类库等分类,构建适当的目录,如下图
这样工程下只放一个main.py文件即可。
2、充分利用args或者EasyDict
之前习惯在代码上直接做修改做实验,这不利于对比或记录。通过args可以交互式修改参数,便于对比。也可以通过EasyDict,二者本质一样。用args可以参见 https://github.com/thstkdgus35/EDSR-PyTorch/blob/master/src/option.py
用EasyDict可以参考如下
一般会选择将其放在上述Lib文件夹下。
3、适当代码复用
一般情况下,模型不一致,但其训练验证过程基本一致。如果针对每个模型都撰写训练测试代码,无疑是冗余的。在SRPytorch里,每个模型文件夹下有单独的model.py和solver.py。模型定义文件model.py是唯一的,但solver.py文件的训练、测试等代码可复用。如我们可以在Lib文件夹下定义common.py,将各个模型solver.py中相同的部分定义基类如下
这样在每个solver.py文件下,我们可以直接继承自NormalTrainer类。
4、关于数据读取
Pytorch数据读取比较方便,之前习惯于针对数据的特定类,见之前博文
后来发现,如果对于不同数据集,需要重复定义,比较繁琐。因此,将其简化为两步,第一步构建数据集相关类,用于读取全部数据
第二步创建共享数据加载模块
当然本代码不适用于数据量庞大超过内存限度的情况。
后续继续更新。。。。