program: train.py # 注意:Hyperband 必须配合 random 使用,而不是 bayes # 因为 Hyperband 依靠随机采样来覆盖搜索空间,然后靠剪枝来提高效率 method: random project: "cifar10_chanllenge" name: "20251210-Hyperband-AdamW-LrSearch" description: > 本次实验目的是为了验证 ResNet18 在 CIFAR-10 上 使用 AdamW 配合强正则化 (Weight Decay > 0.01) 的效果。 使用了全显存加载优化。 run_cap: 100 command: - ${env} - ${interpreter} - ${program} - ${args} metric: name: test_epoch_acc goal: maximize # 🔥 核心:Hyperband 提前终止策略 early_terminate: type: hyperband # 最小迭代次数:跑满 10 个 Epoch 后才开始评估是否要杀掉 # 避免模型还没热身就被误杀 min_iter: 10 # 淘汰比例:每次淘汰 2/3 的落后分子,保留 1/3 进入下一轮 eta: 3 parameters: project_name: value: "cifar10_hyperband_search" # --- 训练轮数 --- train: parameters: epochs: # 这里设置最大轮数。Hyperband 会自动在中间截断 # 设为 150,保证“幸存者”能跑完全程,收敛到极致 value: 150 # --- 数据参数 --- data: parameters: batch_size: # 搜索区间:涵盖了 SGD 喜欢的小 Batch 和 AdamW 喜欢的大 Batch values: [256, 512, 1024] # --- 模型参数 --- model: parameters: type: value: "ResNet18" num_classes: value: 10 dropout_rate: # ResNet 自带 BN,通常不需要大 Dropout,搜一个小范围 distribution: uniform min: 0.0 max: 0.2 # --- 优化器 (搜索重点) --- optimizer: parameters: name: # 同时尝试 SGD (传统SOTA王者) 和 AdamW (现代万金油) values: ['sgd', 'adamw'] lr: # 学习率跨度要大!因为 SGD 需要 ~0.1,而 AdamW 需要 ~0.001 # log_uniform_values 会在对数尺度上均匀采样,保证两头都能搜到 distribution: log_uniform_values min: 0.0001 max: 0.2 weight_decay: # 正则化力度的搜索 distribution: log_uniform_values min: 1e-4 # 0.0001 (适合 SGD) max: 1e-1 # 0.1 (适合 AdamW)