2 min read

风控建模:从零散记录到规范复现的实验管理(2)示例

一、标准化目录结构


your_project/
├── work_dirs/                  # 所有实验结果统一存放
│   ├── 20210520_1430_resnet50_lr0.001/  # 子目录命名:时间戳_模型名称_关键改动
│   │   ├── config.yaml         # 实验配置副本(必存)
│   │   ├── log.txt             # 完整运行日志(含训练/测试输出)
│   │   ├── model_best.pth      # 最优模型权重
│   │   ├── results.csv         # 关键指标汇总(如准确率、loss曲线数据)
│   │   ├── code_snapshot/      # 代码副本(可选,复杂实验建议存)
│   │   │   ├── train.py        # 训练脚本快照
│   │   │   └── model.py        # 模型定义快照
│   │   └── figures/            # 可视化结果(如loss曲线、混淆矩阵)
│   └── 20210521_0915_transformer_dropout0.2/  # 新实验目录
└── train.py                    # 主训练脚本(超参数通过argparse/.yaml传入)

二、log.txt 开头固定格式(直接复制到日志文件首行)



==================================================
【实验基本信息】
实验ID:20210520_1430_resnet50_lr0.001
实验目的:验证学习率0.001对ResNet50在CIFAR-10数据集上的分类性能影响
启动命令:python train.py --config configs/resnet50_cifar10.yaml --lr 0.001 --seed 42
启动时间:2021-05-20 14:30:22
环境信息:Python 3.7 + Theano 0.7.0 + CUDA 3.2(GPU:NVIDIA Tesla C1060)
随机种子:42(确保结果可复现)
Git Commit Hash:a7f3bc9(代码版本回溯)
==================================================
【核心超参数】
模型名称:ResNet50
数据集:CIFAR-10(训练集50000张,测试集10000张)
学习率:0.001(优化器:SGD,动量:0.9,权重衰减:1e-4)
批次大小:64
训练轮数:100
关键改动:激活函数替换为Sigmoid(GELU未普及),简化注意力机制模块
==================================================
【训练/测试日志】
(以下接脚本运行输出,如epoch、loss、acc等)
Epoch 1/100: Train Loss=2.301, Val Acc=35.2%
...

三、配套 config.yaml 模板

# ===================== 基础配置(必改)=====================
experiment:
  id: "20210520_1430_resnet50_lr0.001"  # 与实验目录名一致
  purpose: "验证学习率0.001对ResNet50在CIFAR-10的分类性能影响"  # 实验目的
  seed: 42  # 随机种子(确保可复现)
  device: "cuda:0"  # 设备(cpu/cuda:0/cuda:1)
  git_commit: "a7f3bc9"  # Git提交哈希(代码版本)

# ===================== 数据配置 =====================
data:
  dataset_name: "CIFAR-10"  # 数据集名称
  root: "./data/cifar10"  # 数据集存储路径
  train_batch_size: 64  # 训练批次大小
  val_batch_size: 128  # 验证/测试批次大小
  num_workers: 4  # 数据加载线程数
  augment:  # 数据增强配置
    resize: 224  # 图像Resize尺寸
    random_crop: True  # 随机裁剪
    random_flip: True  # 随机水平翻转
    normalize:  # 归一化参数(ImageNet均值/方差)
      mean: [0.485, 0.456, 0.406]
      std: [0.229, 0.224, 0.225]

# ===================== 模型配置 =====================
model:
  name: "ResNet50"  # 模型名称(需与代码中模型定义对应)
  pretrained: True  # 是否使用预训练权重
  num_classes: 10  # 类别数(CIFAR-10为10类)
  custom_config:  # 自定义改动(与log.txt关键改动一致)
    activation: "GELU"  # 激活函数
    add_attention: True  # 是否添加注意力模块

# ===================== 训练配置 =====================
training:
  epochs: 100  # 总训练轮数
  resume: False  # 是否从断点续训
  resume_path: "./work_dirs/20210520_1430_resnet50_lr0.001/model_last.pth"  # 断点路径
  early_stop:  # 早停配置(防止过拟合)
    enable: True
    patience: 10  # 连续10轮验证集指标不提升则停止
    monitor: "val_acc"  # 监控指标(val_acc/val_loss)

# ===================== 优化器配置 =====================
optimizer:
  type: "AdamW"  # 优化器类型(Adam/SGD/AdamW)
  lr: 0.001  # 初始学习率
  weight_decay: 1e-4  # 权重衰减(正则化)
  momentum: 0.9  # SGD专用(AdamW可忽略)

# ===================== 学习率调度器 =====================
lr_scheduler:
  type: "CosineAnnealingLR"  # 调度器类型(StepLR/CosineAnnealingLR)
  T_max: 100  # CosineAnnealing周期(与总epochs一致)
  eta_min: 1e-6  # 最小学习率
  step_size: 30  # StepLR专用(每30轮降权)
  gamma: 0.1  # StepLR专用(学习率衰减系数)

# ===================== 输出配置 =====================
output:
  work_dir: "./work_dirs/20210520_1430_resnet50_lr0.001"  # 实验结果存储路径
  save_freq: 10  # 每10轮保存一次模型权重
  log_freq: 100  # 每100个batch打印一次训练日志
  save_best_only: True  # 只保存验证集最优模型

四、团队共享实验记录表格(Markdown 版,可直接复制到 Git/Notion 共享)

实验ID(必填) 实验目的(必填) 核心配置(必填) 关键结果(必填) 负责人(必填) 启动时间(必填) 状态(必填) 复现情况(必填) 备注(可选)
20210520_1430_resnet50_lr0.001 验证学习率0.001对ResNet50在CIFAR-10的分类性能影响 模型:ResNet50(GELU+注意力);数据集:CIFAR-10;lr=0.001;epochs=100;seed=42 测试准确率:89.7%;训练loss:0.32;最优epoch:85;推理速度:120img/s(A100) xx 2021-05-20 14:30 已完成 可复现 对比lr=0.01(准确率87.2%),低学习率更稳定但训练时间增加20%
20210521_0915_transformer_dropout0.2 验证dropout=0.2对Transformer文本分类的过拟合抑制 模型:BERT-base;数据集:IMDB;dropout=0.2;lr=2e-5;batch_size=32;seed=42 测试准确率:88.3%;val_loss=0.29;过拟合程度:训练/验证acc差3.1%(原dropout=0.1时差5.7%) xx 2021-05-21 09:15 进行中 待验证 今日18:00前完成训练,需补充混淆矩阵分析
20210522_1600_cnn_lstm_fusion 验证CNN+LSTM融合模型对时序数据的预测效果 模型:CNN(特征提取)+LSTM(时序建模);数据集:ECG;lr=0.0005;epochs=50;seed=42 测试F1-score:0.92;召回率:0.91;精确率:0.93 xx 2021-05-22 16:00 未启动 - 依赖数据集ECG-5000,需提前配置TensorFlow环境

五、Excel 版表格字段说明(直接新建Excel,按以下字段建列即可)

列名 数据类型 填写要求
实验ID 文本 严格遵循「时间戳_模型名称_关键改动」格式(如20210520_1430_resnet50_lr0.001)
实验目的 文本 简洁明了(1-2句话,说明“验证什么+预期效果”)
核心配置 文本 只写关键信息(模型+数据集+核心超参数+自定义改动),无需冗余
关键结果 文本 量化指标(准确率/loss/F1等)+ 核心结论,避免模糊表述
负责人 文本
启动时间 日期时间 精确到分钟(如2021-05-20 14:30)
结束时间 日期时间 实验完成后补充
状态 下拉选项 未启动/进行中/已完成/失败(Excel可设置数据验证,限制选择)
复现情况 下拉选项 可复现/不可复现/待验证(避免歧义)
环境信息 文本 简化版(如Python3.7+PyTorch2.1+A100)
Git Commit Hash 文本 代码版本(便于回溯)
备注 文本 问题记录/改进建议/对比结论等