| 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) |