4.0 KiB
4.0 KiB
CosFace超参数网格搜索使用指南
概述
已完成CosFace超参数网格搜索功能的实施,用于优化scale (s)和margin (m)两个核心超参数。
修改文件清单
1. requirements.txt
- ✅ 添加依赖:
pandas>=2.0.0和seaborn>=0.12.0
2. train/train_cosface_embedding.py
- ✅
TaskConfig添加test_dir字段 - ✅
TASKS字典中所有任务添加测试集路径
3. train/grid_search_cosface.py (新建)
- ✅ 完整的网格搜索脚本 (~350行)
搜索空间配置
当前为dish任务配置的搜索空间:
GRID_PARAMS = {
'dish': {
's': [56.0, 60.0, 64.0, 68.0], # 4个scale值
'm': [0.32, 0.35, 0.38, 0.40], # 4个margin值
}
}
总配置数: 4 × 4 = 16组实验
使用方法
1. 安装依赖
pip install pandas>=2.0.0 seaborn>=0.12.0
2. 运行网格搜索
# 完整搜索(16组配置)
python train/grid_search_cosface.py --task dish
# 测试运行(限制配置数)
python train/grid_search_cosface.py --task dish --max_configs 2
# 自定义参数
python train/grid_search_cosface.py --task dish --epochs 100 --patience 10 --min_epochs 25
3. 参数说明
--task: 任务名称 (dish/whole_ingredient/processed_ingredient)--max_configs: 限制最大配置数(用于测试,可选)--epochs: 每个配置的最大训练轮数(默认100)--patience: 早停容忍轮数(默认10)--min_epochs: 最小训练轮数(默认25)
输出文件
运行后会在model/DishClassification/grid_search_YYYYMMDD_HHMMSS/目录下生成:
grid_search_results.csv- 所有配置的详细结果表格heatmap.png- 参数热力图(测试集准确率)summary.txt- 搜索总结报告(含最佳配置)model_s{s}_m{m}.pth- 每个配置的模型权重grid_search.log- 完整训练日志
评估指标
- 主要指标: 测试集准确率 (
test_acc) - 用于选择最佳配置 - 辅助指标: 验证集准确率、训练轮数、训练时间
应用最佳配置
网格搜索完成后:
- 查看
summary.txt找到最佳配置 - 手动更新
train/train_cosface_embedding.py中的TASKS字典:
'dish': TaskConfig(
# ... 其他配置保持不变 ...
cosface_s=64.0, # 更新为最佳s值
cosface_m=0.38, # 更新为最佳m值
)
- 后续训练将自动使用最佳配置
预计耗时
基于以下假设:
- 每个配置平均训练25-40个epoch(早停机制)
- 每个epoch约1-2分钟
- 单个配置: ~30-60分钟
- 16组配置总耗时: ~8-16小时
建议: 使用GPU运行,可在夜间或周末执行完整搜索。
注意事项
- 数据集要求: 确保
dataset/DishClassification/test/目录存在且有数据 - GPU推荐: 网格搜索计算量大,强烈建议使用GPU
- 磁盘空间: 每个配置约占用500MB,16组需8GB空间
- 中断恢复: 当前版本不支持断点续训,建议一次性完成
高级用法
修改搜索空间
编辑train/grid_search_cosface.py中的GRID_PARAMS字典:
GRID_PARAMS = {
'dish': {
's': [60.0, 64.0, 68.0, 72.0], # 自定义scale范围
'm': [0.30, 0.35, 0.40, 0.45], # 自定义margin范围
}
}
调整早停策略
通过命令行参数调整:
python train/grid_search_cosface.py --task dish --patience 15 --min_epochs 30
故障排除
问题1: ModuleNotFoundError: No module named 'pandas'
- 解决:
pip install pandas seaborn
问题2: 测试集目录不存在
- 解决: 确认
dataset/DishClassification/test/路径正确且有数据
问题3: CUDA out of memory
- 解决: 减小
batch_size或在CPU上运行(速度较慢)
示例结果解读
summary.txt示例:
最佳配置:
s (scale) = 64.0
m (margin) = 0.38
测试集准确率 = 98.50%
验证集准确率 = 100.00%
训练轮数 = 32
训练时间 = 45.3 分钟
这表示s=64.0, m=0.38是最优组合,在测试集上达到98.50%准确率。