📘 项目复盘文档
📅 日期:2025年4月7日
🧑💻 项目方向:图像分类 + 传统机器学习模型融合实践
🔧 工具栈:PyTorch, torchvision, sklearn, Jupyter Lab
✅ 今日完成工作
1. 构建图像分类项目的目录结构
采用模块化、工程化的目录设计:
my_project/├── notebooks/│ ├── 01_data_exploration.ipynb│ ├── 02_model_training.ipynb│ └── 03_evaluation.ipynb├── src/│ ├── __init__.py│ ├── data/│ │ └── load_data.py│ ├── features/│ │ └── build_features.py│ ├── models/│ │ └── train_model.py│ └── utils/│ └── helpers.py├── data/│ ├── raw/│ ├── processed/├── outputs/│ ├── figures/│ ├── models/├── requirements.txt└── README.md
该结构具备良好的扩展性和可维护性,体现了工程思维。
2. 使用 torchvision 构建图像增强流程
- 应用数据增强策略(如 RandomHorizontalFlip, ColorJitter 等)
- 区分训练集和验证集变换(确保评估一致性)
- 准备符合模型输入规范的 Dataloader
3. 实现特征提取流程并用于传统模型
- 利用预训练 ResNet50(去掉最后分类层)作为特征提取器
- 针对 Sklearn 模型(KNN, SVM, RF)进行特征提取
- 编写模块化
extract_features_resnet()
函数 - 成功生成特征矩阵
X_train_feat
,X_val_feat
及对应标签
4. 初步理解工程抽象逻辑
- 明确了 CNN/ResNet模型是端到端学习特征+分类,无需手动提取
- 而传统模型(Sklearn)不接受图像输入,需先用深度模型提取向量特征
💡 技术理解与思考
内容 | 理解情况 |
---|---|
__init__.py | 理解其用于包识别与模块导入管理的作用 |
特征提取本质 | 明确了“图像 → feature vector → sklearn模型”的流程 |
模型适配 | 区分了端到端模型 vs 非端到端模型的输入要求 |
数据增强策略 | 意识到评估阶段应保持输入一致性,避免增强干扰评估 |
项目结构意义 | 理解“模块分离”带来的可维护性与扩展性 |
🧭 指导与建议
📌 下一阶段建议:
路线 | 具体建议 |
---|---|
自动化实验配置 | 学习 Hydra / Argparse 管理训练参数 |
实验可视化 | 尝试集成 wandb 或 MLflow 做日志记录与比较 |
训练逻辑抽象 | 考虑引入 PyTorch Lightning 管理训练循环 |
模型部署尝试 | 将最佳模型用 FastAPI + Docker 打包为 REST 接口 |
特征分析深化 | 用 t-SNE 可视化提取特征,探索模型决策边界 |
数据版本管理 | 引入 DVC 实现训练数据与模型的可复现性管理 |
📌 可以考虑:
- 整理现有代码为一个标准化模板(如 cookiecutter)
- 增加 CLI 接口或配置系统
- 加入 wandb 日志跟踪模块
- 设计评估报告输出脚本(自动汇总 acc, loss, confusion matrix)
🧠 总结:
推进了实验,开始掌握了“工程抽象”和“架构感知”,已从模型调参者成长为项目搭建者。