👏🏼 Some tips about how to manage your experiments!👏🏼

无论是打比赛还是写论文,我们都需要做大量的实验。有人说深度调参是“玄学”,为了有效探索这门玄学,需要对模型的结构、参数、结果做全面详尽的记录,对实验结果、模型参数进行合理保存。这里,分享一些我以及我的师兄教给我的在训练网络并科学管理实验方面的一些心得体会。✍🏼

数据集

我们在实验过程中对数据集会遇到两种情况 👉🏻 一是实验需要尝试多个不同的数据集;二是对同一数据集作了不同的预处理操作从而产生了多个“不同”的数据集。为了避免后期总结或者做对比实验的时候找不到对应的数据集,需要我们对数据集进行记录,可以根据数据集的各项特征进⾏区分。这时我们就可以写一个readme_dateset.txt来记录对应特征的数据集文件夹。

datasets readme

实验记录

实验记录,一方面有助于自己了解模型在当前数据集、epoch、参数等条件下的性能,另一方面分析本条实验记录的结果可以帮助我们确定下一步的优化方向,最后在自己写report或者paper的时候,有丰富的图文数据支持。这里我们使用Excel表格来记录我们的实验。

基本实验记录

针对单一实验,有很多实验的基本属性,比如序号id,数据集,网络,存储位置,参数,log文件,状态,结果分析等。 我们的列表的Head的整体框架基本上可以确定下来了,例如:

| status | date | id | net | dataset | params | save_folder | analysis | | ——– | —- | – | —— | ——– | —— | ————- | ——– | | training | 0901 | a1 | u-net | trainset | … | ./Results/a1 |300x400优于200x300 |

参数及其它

我们可以针对自己的需要,先确定一些可能需要修改、做对比实验的参数或者条件,比如不同预处理的数据集,图片的size等,之后可以添加更多的参数,对于已确定的参数可以放到靠后一点的列。同一实验,我们要对比某一参数的表现,最为直接的度量衡就是Loss Function,因此也要将其记录下来。有时,我们可能需要对网络的架构进行调整,这就不是参数了,需要我们用文字或者图片描述。

文件管理

做文字记录的同时,需要对我们相关实验的数据进行整理保存。
训练完网络,产生了很多实验相关的output,我们的report取材都是来源于这些数据。这里注意两点: - 单一实验保存:我们需要保存的文件可能有训练时产生的很多的checkpoint文件,网络权重,网络参数,日志,样例输出,对应的脚本等。根据自己的需求来保存。例如:

Single Exp

  • 多个实验保存:注意命名的易读性、可辨别性以及规范性即可。

Exps

Demo

最后附一张我做Deeplabv3+的实验记录1

My Deeplabv3+ Exp

Tricks

有几条用的上的tricks,包括: * 使用tmux;
* 将需要调整的参数都写进命令行参数中,然后编写shell脚本
* 输出并保存log
详情 👉🏻 Lazy Tricks🙈

  1. 这时我第一次做实验的记录,有什么建议大家可以给我留言!欢迎👏