本项目对应 HW2_深度学习与空间智能.pdf 中的任务 1。任务 2 和任务 3 不在本项目范围内。
目标是在 102 Category Flower Dataset 上完成:
- ImageNet 预训练 ResNet-18/34 微调 baseline;
- 不同学习率、epoch 的超参数对比;
- ImageNet 预训练与随机初始化的消融实验;
- 在 ResNet baseline 上加入 SE-block 注意力机制并对比 Accuracy;
- 使用 TensorBoard 记录训练/验证 loss 与 Accuracy 曲线;
- 生成可回传本地、用于最终 PDF 实验报告的结果文件。
本项目默认使用 TensorBoard 记录实验曲线,不依赖 SwanLab 登录。训练过程同时保存 metrics.csv 和 curves.png,便于报告整理与结果复核。
推荐使用的 AutoDL 配置如下:
PyTorch 2.8.0
Python 3.12 / Ubuntu 22.04
CUDA 12.8
RTX 5090 32GB * 1
25 vCPU
90GB RAM
系统盘 30GB,数据盘 150GB
训练建议在 GPU 服务器上完成。本地环境主要用于上传项目、下载结果和撰写报告。AutoDL 的 base 环境已经包含 PyTorch,本项目不会创建新环境,也不会重装 torch/torchvision。
在 AutoDL 服务器上:
cd /root/autodl-tmp/flower102_task1
bash scripts/autodl_setup.sh
bash scripts/server_preflight.sh
bash scripts/check_logger.sh
bash scripts/run_quick_debug.shserver_preflight.sh 会检查 CUDA、Flowers102 数据、预训练权重、模型前向传播,以及数据/输出/torch cache 的磁盘余量;如果路径误放到系统盘导致可用空间过低,会提前停止。
也可以从本地 PowerShell 上传并启动服务器后台训练。默认 logger 为 TensorBoard,不需要 SwanLab 登录:
.\flower102_task1\scripts\start_autodl_background_run.ps1 `
-Server root@SERVER_HOST `
-Port SSH_PORT上传脚本会自动执行 pre_upload_check.ps1,检查关键文件、Linux 脚本 LF 行尾,以及项目内是否误包含缓存、数据或输出目录。
如果服务器上已经有旧版项目,上传脚本会替换源码、脚本和文档,但保留远端 outputs/、data/、日志和断点权重,方便继续训练。
如果通过 -RemoteDir 指定非默认远程目录,脚本会同步使用该目录下的 data 和 flower102_task1/outputs。
一键启动脚本默认会执行 TensorBoard 写入检查;如果首次写入失败,脚本会停止,避免正式训练跑完后缺少曲线记录。
确认 debug 正常后跑全量实验:
bash scripts/run_all_5090.sh
bash scripts/package_results.sh长时间训练建议后台运行,避免 SSH 断开导致进程退出:
bash scripts/run_all_5090_background.sh
bash scripts/check_status.sh如需在 tmux 或 AutoDL 稳定终端中前台一键运行完整流程:
bash scripts/run_full_pipeline_foreground.sh更详细的上传、运行、回传步骤见:
默认全量实验为:
| 实验 | 说明 |
|---|---|
baseline_resnet34_pt_lr3e-4_e30 |
ImageNet 预训练 ResNet-34 baseline |
hparam_resnet34_pt_lr1e-3_e30 |
学习率更大 |
hparam_resnet34_pt_lr1e-4_e30 |
学习率更小 |
hparam_resnet34_pt_lr3e-4_e20 |
epoch 更少 |
ablation_resnet34_random_lr3e-4_e60 |
随机初始化消融 |
attention_se_resnet34_pt_lr3e-4_e30 |
SE-block 注意力模型 |
这些实验覆盖 PDF 中任务 1 的四项基本要求。
python -m flower102_task1.train \
--run-name baseline_resnet34_pt_lr3e-4_e30 \
--model resnet34 \
--pretrained \
--data-dir /root/autodl-tmp/data \
--output-dir /root/autodl-tmp/flower102_task1/outputs \
--epochs 30 \
--batch-size 128 \
--lr 3e-4 \
--backbone-lr 3e-5 \
--optimizer adamw \
--logger tensorboard随机初始化消融:
python -m flower102_task1.train \
--run-name ablation_resnet34_random_lr3e-4_e60 \
--model resnet34 \
--no-pretrained \
--data-dir /root/autodl-tmp/data \
--output-dir /root/autodl-tmp/flower102_task1/outputs \
--epochs 60 \
--batch-size 128 \
--lr 3e-4 \
--backbone-lr 3e-4 \
--optimizer adamw \
--logger tensorboardSE 注意力模型:
python -m flower102_task1.train \
--run-name attention_se_resnet34_pt_lr3e-4_e30 \
--model se_resnet34 \
--pretrained \
--data-dir /root/autodl-tmp/data \
--output-dir /root/autodl-tmp/flower102_task1/outputs \
--epochs 30 \
--batch-size 128 \
--lr 3e-4 \
--backbone-lr 3e-5 \
--optimizer adamw \
--logger tensorboard结果目录默认在:
/root/autodl-tmp/flower102_task1/outputs
每个实验目录会生成:
metrics.csv:每个 epoch 的 train loss、val loss、train acc、val acc;tensorboard/events.out.tfevents.*:TensorBoard 曲线事件文件;curves.png:loss 和 Accuracy 曲线;best.pt:验证集 Accuracy 最优权重;last.pt:最后一轮权重;result.json:test split 上的最终结果;config.json:实验超参数;data_info.json:训练/验证/测试样本数、每轮 batch 数和总 iteration;environment.json:服务器与 CUDA 环境。
汇总文件:
summary.csvsummary_accuracy.pngreport_summary.mdreport_table.md/report_table.csv:可直接放入报告的实验结果表;final_submission_checklist.md:最终 PDF、Github、网盘提交核对清单;report_assets_manifest.csv:报告素材文件清单;upload_weights_manifest.txt:建议上传网盘的权重文件清单;results_for_report.tar.gzlogs/run_all_5090.log:后台运行日志
服务器上打包:
bash scripts/package_results.sh打包前会自动验证 6 个正式实验是否完整。如果只是调试阶段想打包已有结果:
ALLOW_PARTIAL=1 bash scripts/package_results.sh本地 PowerShell 下载:
.\flower102_task1\scripts\pull_results_from_autodl.ps1 `
-Server root@SERVER_HOST `
-Port SSH_PORT `
-LocalDir .\server_results也可以在本地一键让服务器验证、打包,再自动回传:
.\flower102_task1\scripts\complete_autodl_run_and_pull.ps1 `
-Server root@SERVER_HOST `
-Port SSH_PORT `
-LocalDir .\server_results下载后脚本会自动检查 server_results\outputs 是否包含 6 个正式实验的关键文件。也可以单独验收:
.\flower102_task1\scripts\verify_pulled_results.ps1 -LocalOutputs .\server_results\outputs本地安装 TensorBoard 后,可以直接打开回传结果截图:
tensorboard --logdir .\server_results\outputs --port 6006本地需要打包项目源码时:
.\flower102_task1\scripts\package_project_for_upload.ps1它会生成 flower102_task1_project.zip,并排除训练输出、缓存和模型权重。
最终 PDF 报告中必须有:
- 模型结构、数据集和实验结果介绍;
- 训练/测试划分、网络结构、batch size、learning rate、optimizer、iteration/epoch、loss function、评价指标;
- TensorBoard 的 loss 和 Accuracy 曲线截图;
- Github public repo 链接;
- 模型权重网盘下载地址。
代码提交到自己的 public Github repo 后,在报告里填写 repo 链接。训练完成后把 best.pt 或 results_for_report.tar.gz 上传到百度云/Google Drive,并在报告里填写下载地址。
全量实验脚本支持恢复:
- 已经有
result.json的实验会自动跳过; - 未完成但有
last.pt的实验会从断点继续; - 需要强制重跑时可以执行:
python -m flower102_task1.run_experiments --preset full_5090 --rerun-existing