先记录这一次实验要回答什么
一份有用的实验记录,首先需要一个可以被结果推翻的问题。例如,比较两种方法时,先说明比较的是误差、运行时间还是内存占用,以及什么结果才算支持当前判断。一次改变太多因素,通常会让结果难以解释。
开始运行前写下基线、预期和停止条件,再记录实际发生了什么。事先的判断与事后的解释应当分开保存,避免只留下符合预期的故事。
把输入和环境当作结果的一部分
记录代码版本、实际启动命令、完整参数和依赖版本;需要时补充操作系统、硬件与数值精度。输入数据要说明来源、版本、预处理和划分方法。不能公开的数据,可以记录获取条件及脱敏后的结构说明,而不是为了复现泄露访问凭据或个人信息。
仅写“使用默认参数”往往不够,因为默认值会随版本变化。对于随机过程,记录随机种子和重复次数有助于排查差异,但固定种子并不自动保证跨设备、跨版本完全一致。有些并行计算还会引入额外的不确定性。
用简单目录连接配置与结果
给每次运行一个唯一标识,让参数、原始输出和阅读用摘要能互相对应。不要用新的结果覆盖旧文件;若修正统计脚本,应记录修正原因,并指出哪些结果需要重算。目录的复杂程度可以逐步增加,关键是能回答某张图究竟来自哪次运行。
experiment/
README.md # 问题、基线、评价规则
configs/run-001.json
runs/run-001/
environment.txt # 版本与环境
command.txt # 实际命令,不含密钥
metrics.csv # 原始指标
notes.md # 现象、异常与下一步
analysis/ # 汇总与作图脚本汇总时保留差异与失败
有随机性的实验,应根据任务成本选择合理的重复方案,报告单次结果或汇总量的含义,并说明波动是怎样计算的。不要只保留最好的一次,也不要把调参时反复观察过的数据当作完全独立的最终验证。
失败记录也有价值:输入是否缺失、计算是否中断、参数是否无效?将运行失败与方法表现不佳分开,才能避免错误归因。一个可以解释的失败,比没有上下文的成功截图更容易帮助下一次决策。
最后做一次最小重跑
从一个干净目录开始,照着说明获取允许使用的输入、安装环境并运行最小例子,检查能否产生预期格式的输出。若无法逐位复现,就说明允许的误差、统计比较方式和已知差异。复现的标准应写在前面,而不是等结果不一致之后临时改变。