复赛比初赛难得多:不再是选择题,而是真刀真枪的数据、模型与排名。小强这半年练的不只是算法,还有「竞赛工程学」——调参、融合、云端 GPU、论文复现,最后用一个自主选题的 AI 项目完成第二阶段的毕业答辩。
真题实战 + 竞赛工程能力(调参、模型融合、云端 GPU、论文复现),最终完成自主选题的 AI 毕业项目并答辩。
用故事和生活类比打开这学期的大门,先「知其所以然」再学语法。
复赛比初赛难得多:不再是选择题,而是真刀真枪的数据、模型与排名。小强这半年练的不只是算法,还有「竞赛工程学」——调参、融合、云端 GPU、论文复现,最后用一个自主选题的 AI 项目完成第二阶段的毕业答辩。
食材(数据)一样,火候(超参数)不同,味道天差地别。
训练配置三个臭皮匠投票,顶个诸葛亮(还要比皮匠强)。
集成上分不用买设备,按小时付费练大模型。
算力租用看懂招式(方法)只是第一步,能比划出来(复现)才算学会。
科研入门NOAI复赛备战与阶段毕业 —— 共 12 课时,全部知识点一网打尽。
# 复赛 vs 初赛:初赛考概念,复赛考真做项目
# 典型赛题结构:
rubric = {
"题目": "给定 5000 张带标签的图片,训练分类模型",
"评分": "测试集准确率 60% + 方案报告 25% + 答辩 15%",
"陷阱": "类别不平衡(有的类只有 20 张图)",
"策略": "数据增强 + 加权损失 + 先跑通 baseline",
}
for k, v in rubric.items():
print(f"{k}:{v}")
print("铁律:先交一个能跑的笨办法,再花时间优化")题目:给定 5000 张带标签的图片,训练分类模型
评分:测试集准确率 60% + 方案报告 25% + 答辩 15%
陷阱:类别不平衡(有的类只有 20 张图)
策略:数据增强 + 加权损失 + 先跑通 baseline
铁律:先交一个能跑的笨办法,再花时间优化# 图像赛题四板斧:
# ① EDA:看数据长什么样、类别分布
# ② baseline:迁移学习(resnet18 预训练权重起步)
# ③ 增强:随机裁剪/翻转/颜色抖动(免费扩充数据)
# ④ 训练技巧:早停 + 学习率衰减 + 保存最优权重
import torchvision.models as models
m = models.resnet18(weights="IMAGENET1K_V1") # 迁移学习
m.fc = __import__("torch").nn.Linear(512, 10) # 换成 10 类输出
print("预训练网络 + 新分类头 = 强力起点")预训练网络 + 新分类头 = 强力起点
(5000 张小数据集上,迁移学习往往吊打从零训练)# 文本赛题三板斧:清洗 → 表示 → 模型
# ① 清洗:去停用词、去 HTML、统一大小写
# ② 表示:TF-IDF(快)或预训练词向量(准)
# ③ 模型:朴素贝叶斯起步 → LSTM/BERT 冲分
from sklearn.feature_extraction.text import TfidfVectorizer
docs = ["这部电影 精彩", "剧情 拖沓 无聊"]
vec = TfidfVectorizer(token_pattern=r"(?u)\b\w+\b")
X = vec.fit_transform(docs)
print("词表:", vec.get_feature_names_out())
print("TF-IDF 矩阵形状:", X.shape)词表: ['剧情' '无聊' '这部电影' '拖沓' '精彩']
TF-IDF 矩阵形状: (2, 5)from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
# 网格搜索 + 交叉验证 = 科学的穷举
param_grid = {"n_estimators": [50, 100, 200],
"max_depth": [None, 5, 10]}
# gs = GridSearchCV(RandomForestClassifier(),
# param_grid, cv=5, scoring="f1_macro")
# gs.fit(X, y); print(gs.best_params_)
print("网格搜索:3×3=9 组 × 5 折 = 45 次训练")
print("经验:学习率/树深/正则 > 其他一切参数")网格搜索:3×3=9 组 × 5 折 = 45 次训练
经验:学习率/树深/正则 > 其他一切参数# 融合三板斧:
# ① 投票法:三个模型举手表决
# ② 平均法:概率取平均(回归最常用)
# ③ Stacking:再来一个模型学「怎么结合它们」
import numpy as np
p1 = np.array([0.8, 0.2]) # CNN 的判断
p2 = np.array([0.6, 0.4]) # SVM 的判断
p3 = np.array([0.9, 0.1]) # 树模型的判断
avg = (p1 + p2 + p3) / 3
print("平均融合概率:", np.round(avg, 2), "→ 预测类别", avg.argmax())
print("前提:模型要「和而不同」,全一样融合无增益")平均融合概率: [0.77 0.23] → 预测类别 0
前提:模型要「和而不同」,全一样融合无增益# Google Colab / Kaggle Notebook 免费送 GPU
# 用法三步:
# ① 运行时 → 更改运行时类型 → T4 GPU
# ② 代码里 device = "cuda"
# ③ 数据放 Google Drive,挂载进笔记本
import torch
print("GPU 可用:", torch.cuda.is_available())
print("设备名:", torch.cuda.get_device_name(0)
if torch.cuda.is_available() else "CPU only")
print("省时对比:CPU 训 2 小时 ≈ GPU 训 8 分钟")
print("注意:免费档 12 小时会断连,重要 checkpoint 存 Drive")GPU 可用: True
设备名: Tesla T4
省时对比:CPU 训 2 小时 ≈ GPU 训 8 分钟
注意:免费档 12 小时会断连,重要 checkpoint 存 Drive# 三招提速(效果从小到大):
# ① 向量化:能不写 for 循环就不写
import numpy as np, time
a = np.random.rand(10_000_000)
t = time.perf_counter(); s = a * 2 + 1
print("向量化 1000 万运算:%.0f 毫秒" % ((time.perf_counter()-t)*1000))
# ② 混合精度:fp16 存中间结果,显存减半速度翻倍
# with torch.autocast("cuda"): out = model(x)
# ③ 数据加载 num_workers + pin_memory,GPU 不挨饿
print("②混合精度 ③多进程读数据 → 整体再快 2~3 倍")向量化 1000 万运算:12 毫秒
②混合精度 ③多进程读数据 → 整体再快 2~3 倍# 一篇论文的正确打开方式(三遍法):
passes = [
("第一遍·5分钟", "标题/摘要/图表 → 判断值不值得读"),
("第二遍·30分钟", "弄懂方法主线,跳过所有证明细节"),
("第三遍·2小时", "脑内复现:每个公式自己推一遍"),
]
for p, how in passes:
print(f"{p}:{how}")
print("论文骨架 = 摘要 / 引言 / 方法 / 实验 / 结论")
print("先读图!图表是论文的「预告片」")第一遍·5分钟:标题/摘要/图表 → 判断值不值得读
第二遍·30分钟:弄懂方法主线,跳过所有证明细节
第三遍·2小时:脑内复现:每个公式自己推一遍
论文骨架 = 摘要 / 引言 / 方法 / 实验 / 结论
先读图!图表是论文的「预告片」# 复赛规格的 4 课时毕设节奏:
milestones = [
("选题", "真实小痛点 > 假大空题目"),
("数据", "先看有多少数据,再定模型野心"),
("迭代", "baseline → 单一变量改进 → 记录实验表"),
("答辩", "讲清:问题 / 数据 / 方法 / 结果 / 局限"),
]
for m, tip in milestones:
print(f"{m}:{tip}")
print("答辩金句:『我的方法 A 比基线提升 6.2%,'
'但在 XX 场景仍有局限,未来可以……』")选题:真实小痛点 > 假大空题目
数据:先看有多少数据,再定模型野心
迭代:baseline → 单一变量改进 → 记录实验表
答辩:讲清:问题 / 数据 / 方法 / 结果 / 局限
答辩金句:『我的方法 A 比基线提升 6.2%,但在 XX 场景仍有局限,未来可以……』每个知识点都要落到能跑、能玩、能演示的作品上。
期末项目是整学期知识点的综合检验场:完整项目流程、答辩。学生将独立完成需求拆解 → 功能实现 → 调试打磨 → 上台演示的完整闭环。
| 课次 | 主题 | 趣味项目 | 知识点 |
|---|---|---|---|
| 1 | NOAI复赛精讲1 | 赛题解析 | 比赛流程、评分标准 |
| 2 | NOAI复赛精讲2 | 计算机视觉赛题 | CV赛题实战 |
| 3 | NOAI复赛精讲3 | NLP赛题 | NLP赛题实战 |
| 4 | 竞赛技巧 | 调参大作战 | 超参数优化、交叉验证 |
| 5 | 模型融合 | 团队上分技巧 | 集成方法、投票 |
| 6 | 云端训练 | 使用GPU云平台 | Colab、Kaggle使用 |
| 7 | 代码效率优化 | 让训练更快 | 混合精度、分布式训练概念 |
| 8 | 论文阅读入门 | 读一篇经典论文 | 学术论文结构、复现 |
| 9-12 | 毕业项目开发 | 自主选题AI项目 | 完整项目流程、答辩 |
把一学期的知识点串成体系,看清来路与去向。
◀ 上一章:五年级 上学期 · CV与NLP双方向
下一章 ▶:六年级 上学期 · 大模型原理与Prompt工程
真题实战 + 竞赛工程能力(调参、模型融合、云端 GPU、论文复现),最终完成自主选题的 AI 毕业项目并答辩。
结业时你将带走:2 个 AI 项目(CV+NLP)+ 云端 GPU 训练经验 + NOAI 复赛实力。
避开高频易错点,再用速查表把语法焊进肌肉记忆。
改一下跑一下
# 到底哪个改动有效?实验记录表:
改动/验证分/日期对着榜单调参数
# 榜单虚高,盲测翻车只看验证集
测试集只考一次训练3小时,断网清零先挂载云盘
关键节点 save 检查点github 下载 → 运行
# 论文看都没看先读方法章节
再对照代码逐步理解| 功能 | 写法 | 一句话理解 |
|---|---|---|
| 网格搜索 | GridSearchCV(model, 参数表) | 自动试遍所有组合 |
| 交叉验证 | cross_val_score(model, X, y, cv=5) | 5 折防运气 |
| 模型融合 | VotingClassifier([...]) | 多模型投票 |
| 云端训练 | Colab → 代码 + Drive 数据 | 免费 GPU 白嫖 |
| 混合精度 | with autocast(): | 省显存提速 |
| 读论文 | 摘要→图表→方法→结论 | 四步快读法 |
| 检查点 | torch.save(net.state_dict()) | 断点续训保命符 |
| 实验记录 | 日期/改动/验证分/备注 | 调参的航海日志 |
按 A / B / C 三档难度自主选择:保底完成 A 组,学有余力挑战 B、C 组。