论文复现失败时,先留下数据、配置和随机状态
论文复现失败时,先留下数据、配置和随机状态
论文复现对不上时,一句“可能是随机种子”解释不了问题。数据处理、模型配置、初始化、度量实现和运行环境都需要留下可核对的摘要。
1. 先对齐论文和代码的隐含条件
论文复现首先对齐数据处理、模型配置、随机状态和度量实现。公开结果可以作为参照,但不能替代对本地实验条件的逐项核验。
论文中的公开结果是参照,不是本地实验自动应得的答案。缺失条件要明确标注,不能靠猜测补齐。
2. 从最早出现差异的位置排查
协作时应把输入格式、配置字段、产物和复核责任写成接口约定。无法复现的部分要明确标注缺失条件,不将推测写成结论。
按数据预处理、中间张量、损失和度量的顺序对比,只保存必要摘要。这样可以定位首个分叉点,也避免泄露原始数据。
3. 复现记录示例
以下片段保留原有技术结构。运行前请替换为本地的非敏感示例,并根据依赖版本核对接口。
def register_tensor_hook(module: torch.nn.Module, layer_name: str, dump_dict: dict): """注册前向传播 Hook 以拦截中间层 Tensor""" def hook(mod, inp, out): dump_dict[layer_name] = out.detach().cpu() return module.register_forward_hook(hook)4. 交付复现包前检查
- 数据预处理与官方实现的差异是否列出。
- 权重、配置和依赖是否有可核对标识。
- 随机状态与非确定性算子是否记录。
- 无法复现的部分是否注明缺失条件。
总结
复现失败并不可耻,含糊地把偏差归因于“环境不同”才会让下一轮继续从头猜。