第一章 安装篇 —— 当代赛博开光仪式
- 永远在
conda install pytorch和pip3 install torch之间量子纠缠 - 选CUDA版本比高考填志愿还刺激
- 选11.7怕老显卡驾崩
- 选12.1怕老代码起义
- 最终在
import torch报错时顿悟:
"原来我的显卡是黄仁勋派来的卧底"
第二章 张量操作 —— 乐高大师速成班
- 掌握
view()的108种用法后- 能把猫图片变成狗图片的纬度
- 但永远算不准
[batch, channel, H, W]的顺序
- 广播机制潜规则:
- 左边补1是温柔体贴
- 右边补1是谋杀显存
- 当你试图用
einops装逼时- 同事看你的眼神像在看跳大神的
第三章 自动求导 —— 数学老师的复仇
- 前向传播时:
"我就是深度学习带诗人" - 反向传播报错时:
"原来sigmoid接sigmoid会导致梯度变女巫汤" - 梯度消失/爆炸解决方案:
- 改初始化 → 换激活函数 → 加BatchNorm
- 最终都会回归
loss.backward(retain_graph=True)玄学
第四章 nn.Module —— 套娃艺术家
- 继承
nn.Module三大哲学问题:- 这个参数要不要注册?
forward里写逻辑还是写注释?- 为什么我的模型跑到eval模式就智障?
- 当你终于搞懂
state_dict()
发现保存的checkpoint比前任聊天记录还难解析
第五章 DataLoader —— 专业背锅侠
- 自定义Dataset的宿命:
- 花3小时写数据增强
- 花3天查为什么
__getitem__返回了None
- 多线程加载的精髓:
num_workers=8→ 内存爆炸num_workers=0→ 训练速度像树懒
第六章 训练循环 —— 当代电子修行
for epoch in range(1000): # 赛博诵经108遍
optimizer.zero_grad() # 清空业力
loss.backward() # 承受因果报应
optimizer.step() # 功德+1
# 每隔50epoch向佛祖(tensorboard)汇报进度
第七章 模型部署 —— 照妖镜现形记
- 导出ONNX时发现:
- 自定义层是妖孽
- 动态尺寸是心魔
- 试图用TorchScript开光
结果模型在C++端表演"仙人跳"(能加载不能推理)
终极奥义 —— 程序员防秃指南
- 遇到
CUDA out of memory时:- 调小batch_size → 炼丹变熬汤
- 换16精度 → 数值稳定性比爱情还脆弱
- 最终解决方案:
把代码推给实习生并说:"这个模型对硬件有灵性要求"