跳到主要内容

数据截至 (上游 commit c187ef3271d5)

阅读笔记 — PyTorch: The Practical Guide (Bert Gollnick, 2026)

原文:text/03-ch01 … 15-ch13,共 13 个正文章。导航章(01 cover 含目录 / 17 index)跳过不引。 作者 Bert Gollnick:senior data scientist,主攻可再生能源;在柏林工大读航空、哈根大学读经济; 教数据科学/机器学习/生成式 AI 课程多年(16-fm-the-author.txt)。 德译英,作者自译;Rheinwerk 2026 第 1 版。代码仓库 github.com/DataScience-Hamburg/PyTorch_Book_Material。Python 3.12.7。 全部 13 章已由本人逐章通读并核对(2026-08-29);ch1-ch8 前棒笔记经核实与原文一致,本版在其基础上清洗+补全。

Preface (02-fm-preface.txt)

  • 章依赖图:Ch1 基础 + Ch2 训练基础是所有章前提;Ch9 (NLP) 特殊——不从头训,用现成 LM。
  • 环境:推荐 uv + Cursor/VS Code;pyproject.toml + uv.lock。
  • 注意:前言说 Ch10 讲 PEFT(parameter-efficient fine-tuning),但正文 Ch10 全文没有 PEFT/LoRA(grep 全书零命中)——前言许诺未兑现,拆解要在边界节写明。

Ch1 Introduction to Deep Learning (03-ch01, 820 行)

  • 术语嵌套:AI ⊃ ML ⊃ DL ⊃ Generative AI (L20-57);经典编程 规则+数据→结果 vs ML 数据+结果→规则 (L25-26, L40-50 图1.2)。
  • 学习类型:监督/无监督/强化/半监督(伪标签) (L64-88)。
  • 任务矩阵:目标变量连续/类别 × 学习方式 → 回归、时序、分类、LM、CV、聚类、降维、推荐;「本书章节结构对应这些任务区」(L113-115)。
  • 训练循环图1.4:X→网络→Y' → 损失函数 vs Y → optimizer 调权重 (L175-209)。推理 = 冻结权重 + 未见过的测试数据 (L211-216)。
  • 历史:1943 McCulloch-Pitts → 1950 Turing → 1958 perceptron → 专家系统 → 两次 AI 寒冬 → 2010s DL(算力+数据+开源框架)→ TF 2015 Google / PyTorch 2017 Facebook → 2020s 生成式,ChatGPT 2022-11 (L249-269)。
  • Perceptron(Rosenblatt 1958):输入×权重→加权和→激活函数→0/1 (L270-295)。
  • 层:input/hidden(conv/recurrent/dense)/output (L299-334)。
  • 激活函数:无激活则整个网络=单一线性模型(L337-345);ReLU max(0,x);Leaky ReLU αx 防 dying neurons(梯度为零不再更新);tanh [-1,1] vanishing gradient;sigmoid [0,1] 二分类输出层;softmax logits→和为 1 的概率分布,多分类输出层 (L355-413)。
  • 损失函数:回归 MSE(平方,大误差权重更大)/MAE/MBE;二分类 BCE(远离真值指数惩罚);多分类 CCE + softmax,惩罚 confident but wrong (L415-471)。
  • 优化器:delta rule;forward pass → backpropagation 从输出层往回逐层算梯度;gradient=误差山里的方向箭头;学习率太大跳过最小值、太小爬不动或卡局部最小;自适应学习率 (L473-543)。
  • 张量:0D 标量/1D 向量/2D 矩阵/3D/ND;shape/dtype/device/requires_grad;与 numpy 互转;关键差别:autograd 追梯度 (L554-656)。
  • 计算图走查:y = w*X + b,真值 w=3 b=2;随机初始化 requires_grad=True;1000 epochs、lr=0.01;循环七步:forward→MSE→backward→no_grad 里更新→梯度清零(否则累积);最终 w≈3.0030 b≈1.9810,loss 0.0001 (L658-802)。

Ch2 Creating Your First PyTorch Model (04-ch02, 1547 行)——全书地基章

数据:Kaggle Social Anxiety Dataset,11000×19,目标 Anxiety Level 1-10。

  • 2.1 数据准备:独立/因变量术语框(L49-60);数值 vs 类别(nominal/ordinal);one-hot(favorite_color Bob/Stuart/Kevin/Gru,19→31 列,drop_first 可省一列,防隐含顺序;缺点:维度膨胀 curse of dimensionality);EDA(sleep vs anxiety 负相关;相关矩阵热图;+1/-1 只相关不因果);X(11000,30) y(11000,1) float32;StandardScaler;只用训练数据统计量,防 data leakage(L325-327)。
  • 2.2 从零手写:torch.matmul(X,w)+b;w zeros(30,1) requires_grad;EPOCHS=100 lr=0.01;七步循环;loss 19.94→1.57;R2=0.65(0=无线性关系;1=完美但红旗或为过拟合;0.75=75% 方差被解释;高 R2≠因果);学习率=蒙眼登山者步长比喻;局部最小 vs 全局最小 (L399-412)。
  • 2.3 模型类+优化器:nn.Module 子类 init 建层 + forward 数据流;hyperparameters 定义框(lr/batch size/epochs)(L609-619);Adam+MSELoss;optimizer.step()/zero_grad();loss 前 40 epoch 陡降后平。
  • 2.4 batches:为什么(内存/并行/中小批量梯度噪声助泛化出局部最小);惯例 2 的幂,32/64 起步;CV 32-512,语音 transformer 8-256;BATCH_SIZE=512 手写切片内循环。
  • 2.5 Dataset(init/len/getitem)+DataLoader(batch/shuffle/后台加载,CPU 数据加载成 GPU 瓶颈);训练循环 for X_batch,y_batch in dataloader;换数据不改训练循环。
  • 2.6 存取:只存权重不存结构(房子=蓝图 model class + 砖 weights);state_dict() OrderedDict;.pth;load_state_dict→;加载前后权重直方图对比。
  • 2.7 数据采样:train/val/test;80/20 或 70/15/15;影响因素(数据量/模型复杂度/时序不可随机/不平衡);cross-validation K folds(5 或 10,计算量大,本书不再用);过拟合=学生背答案比喻;train_test_split(test_size=0.2, random_state=42);scaler.fit_transform(train)+scaler.transform(val);双 dataloader;每 epoch 末 no_grad 算 val loss;两曲线几乎重合是这份数据的特例。

Ch3 Classification Models (05-ch03, 1110 行)

  • 分类类型:binary / multiclass(恰好一类)/ multilabel(可多类,[0,1] 编码树+房)(L24-58)。
  • 混淆矩阵:TP/TN/FP/FN(海啸例:FP=误报,FN=漏报);accuracy=(TP+TN)/全部;precision=TP/预测阳;recall(sensitivity)=TP/实际阳 (L61-107)。
  • 阈值:概率 0.65,阈值 0.5→类1,0.8→类0;10 个点走查(FP FP FP TN TN TN TP TP FN FN → 矩阵 2/2/3/3) (L109-162)。
  • ROC:二战探测潜艇起源;扫所有阈值画 FPR(x)-TPR(y);完美=左上角,随机=对角线;AUC=「随机正例排在随机负例前的概率」,<0.5 不如瞎猜 (L167-207)。
  • 3.4 二分类实战:Intrusion Detection Logs,8846×10;删 Source_IP/Destination_IP(攻击者不会复用 IP);get_dummies 7→17 列;类别不平衡(class 0 远多);Status_Success 强负相关;train_test_split 90/10 stratify=y。
  • 输出层+损失配套:sigmoid+BCELoss vs BCEWithLogitsLoss(内置 sigmoid,推荐,双 sigmoid 不稳);Linear→ReLU→Dropout(0.2)→Linear;Adam weight_decay=1e-4;HIDDEN=4,lr=5e-4,40 epochs;model.eval()+no_grad;THRESHOLD=0.5。
  • 结果:accuracy 96.8% vs DummyClassifier(永远猜多数类)90.2% → 不平衡数据 accuracy 虚高,必须和 dummy 比。
  • 3.5 多分类:目标 Scan_Type(Normal/BotAttack/PortScan);pd.factorize;三段 split;类分布 90.4/5.4/4.1%;三数据集分布须相似;标签要 LongTensor;三块 [Linear→BatchNorm1d→ReLU→Dropout],神经元逐层减半(64→32→16);CrossEntropyLoss(内置 softmax);logits=最后线性层原始输出(-∞~+∞);softmax→概率,argmax→类;accuracy 97.4% vs dummy 90.2%,换说误差 2.6% vs ~10%;BotAttack 常被误判 Normal(FN)。

Ch4 Computer Vision (06-ch04, 2530 行,全书最长)

  • 任务光谱(狗 Kiki 图):图像分类(整图一标签)→目标检测(bounding box)→语义分割(每像素一类)(L14-27)。
  • 图像=张量 (H,W,C);灰度 C=1 像素 0-255,RGB C=3,RGBA C=4 (L42-74)。
  • CNN:层级特征(浅层边缘纹理→深层部件);卷积=3×3 filter 滑窗逐元素乘加→feature map(5×5→3×3 数值例 [[3,-3,-1],[-2,3,-3],[-3,2,3]]);filter 权重是学出来的;多 filter 各认一种特征;pooling 2×2 max/mean 降维+位移不敏感 (L89-179)。
  • ViT:图像切 patches→嵌入向量+positional embedding→transformer encoder;细节在 ch9 (L184-222)。
  • 4.3.1 二分类 muffin-vs-chihuahua:数据增强(旋转/翻转/灰度/ColorJitter/RandomAffine),train 变换复杂、val/test 只 resize+tensor+normalize;ImageFolder 按类分文件夹;32×32 灰度;CNN conv1(1→6) pool conv2(6→16) pool flatten fc1(576→64) fc2(64→1);维度走查 [BS,1,32,32]→[BS,6,30,30]→[BS,6,15,15]→[BS,16,13,13]→[BS,16,6,6]→[BS,576];训练时存 best_model.pth(val loss 最优时);20 epoch 后过拟合;accuracy 79.9% vs dummy 50.2%;classification_report:precision/recall/F1(调和平均)/support/macro avg(不平衡时重要)vs weighted avg。
  • 4.3.2 多分类 fingers(21600 张,6 类):自定义 Dataset 从文件名取标签(int(img_name[-6]));两 conv block+BatchNorm2d+Dropout2d(0.25)/Dropout(0.5);LogSoftmax+NLLLoss vs CrossEntropyLoss(推荐,数值稳定);accuracy 99.94% vs dummy 16.67%(完美平衡);batch norm 框:internal covariate shift「脚下地毯被抽」;dropout 框:团队随机休假比喻,inverted dropout 训练时除以(1-p)推理不缩放。
  • 4.4 目标检测:two-stage(先提议区域再分类,准但慢)vs single-stage YOLO;YOLO 三步:网格每格预测中心落在格内的物体→置信度阈值过滤→nonmax suppression 去重框;标签格式 Pascal VOC(对角两角)/COCO(左上+w/h)/YOLO(中心+w/h 归一化);aerial sheep(HF,3609/350/174);COCO→YOLO 换算;每类至少几百张精标注;预训练后每类几十~100 张可够;ultralytics YOLO('yolov8n.pt')+sheep_yolo.yaml(nc/names/path)+model.train(epochs=10, imgsz=320, batch=16);MLFLOW_TRACKING_URI;评估:box_loss/cls_loss/dfl_loss;IoU=交/并(0.1/0.5/0.9 例);mAP50、mAP50-95;推理 best.pt→results[0].plot()。
  • 4.5 语义分割:输出 (M,N,C) 每像素类;U-Net encoder-decoder(降采样抓上下文→升采样精定位);Label Studio 手工标 mask(画数字画,费时);flood-area-segmentation 290 图+mask,metadata.csv;FloodSegmentationDataset mask>0.5→long;232/58 张但每张 16384 个目标值;AutoModelForSemanticSegmentation nvidia/mit-b0+id2label;HF Trainer+TrainingArguments+collate_fn;评估三联图 原图/真 mask/预测 mask。
  • 4.6 风格迁移:不训权重,冻结 VGG19,直接优化输入图像(generated_image=content_img.clone().requires_grad_);VGG19=16 conv+5 pool+3 fc,24 层只 19 层有参数(pool 无);浅层=内容(conv4_2),多层=风格(conv1_1..conv5_1 权重 1.0/0.8/0.6/0.4/0.2);Gram matrix=特征间相关(哪些特征一起出现),不含空间位置;content_loss=MSE(特征),style_loss=MSE(Gram);STYLE_WEIGHT=2000000 vs CONTENT_WEIGHT=1(量级差异);500 epochs,Adam lr=0.003 优化图像;hamburg.jpg+神奈川冲浪里。

Ch5 Recommendation Systems (07-ch05, 755 行)

  • 三类:content-based(看完泰坦尼克→推相似片)/collaborative(相似用户喜欢的→推给他;user-based vs item-based;用户爆炸时扩展差)/hybrid (L24-69)。
  • 矩阵分解:用户×电影交互矩阵稀疏→拆成 user 特征矩阵×item 特征矩阵(latent factors),乘积近似原矩阵、填空格 (L71-99)。
  • 实战 Steam:steam-200k.csv 无表头(user_id/item_title/purchase/behavior);behavior=游戏时长→自造 rating 1-5(界限 10/20/40/60 小时,作者自承认拍脑袋 arbitrary);分布 1 占 17.4 万,5 只 8 千;pd.factorize;12393 用户×5155 游戏。
  • 模型:nn.Embedding(num_users,32)+nn.Embedding(num_items,32)→cat→Linear(64,1);embedding=离散 ID→稠密向量,相似偏好向量相近;MSELoss+Adam;8 epochs loss 0.62→0.51。
  • 评估:Recall@k(top-k 里命中的相关/全部相关;例:喜欢 ABCDE,推 10 部中 AB→2/5=40%)与 Precision@k(2/10=20%);threshold=4.0,torch.topk;Recall@5 0.022→Recall@50 0.40;Precision@5 0.58%→随 k 降;trade-off:recall 随 k 升、precision 降;给 user 2 推 Football Manager 系列+CS:GO+Fallout 4(他喜欢街霸/FF13/老滚5——书未评论这错位)。

Ch6 Autoencoders (08-ch06, 780 行)

  • 结构:encoder→bottleneck(latent space)→decoder;压缩去噪;MSE 重建损失 (L26-53)。
  • 实战 MNIST(60000 张 28×28 灰度):Normalize 到 [-1,1] 配 tanh 输出;Encoder Conv2d(1→6,k3)→28→26→flatten→Linear(4056→16);Decoder Linear→Unflatten(6,26,26)→ConvTranspose2d(6→1)→tanh;12 epochs;784 像素→16 维=压到 2%;重建 epoch1 糊→epoch12 清晰。
  • VAE:经典 AE 映到潜空间固定点(确定性,delta 函数);VAE 映到高斯分布(μ,σ)→可采样生成新数据;reparameterization trick:z=μ+σ×ε,ε 来自标准正态——采样不可微,把随机性剥出去才能反向传播;损失=recon MSE+KL divergence(惩罚偏离标准正态,保证潜空间连续有序);generate():randn→decoder。

Ch7 Graph Neural Networks (09-ch07, 677 行)

  • 图=节点+边(有向/无向);邻接矩阵(行=源,列=目标,1=有边;无向图对称);节点特征矩阵(A:25岁 Hamburg) (L16-96)。
  • message passing 三步:找邻居(B 的邻居 C/D/A)→聚合函数(均值/求和)收邻居特征→与自身特征合并出新表示;每多一层信息多走一跳 (L99-137)。
  • 用例:node classification(欺诈检测)/link prediction(推荐、知识图谱补全、蛋白质互作)/graph classification(分子毒性) (L140-183)。
  • PyTorch Geometric:Data(x=[5,3], edge_index=[2,7]);5 人兴趣图(Bert/Lea/Elisa/Kiki 集团+Steve);networkx 可视化。
  • Cora 节点分类:2708 论文节点、1433 特征(bag-of-words 0/1)、7 类、10556 边;train 140/val 500/test 1000 mask;dummy 31.9%;GAT(GATConv,注意力权重学邻居重要性,heads=8);ELU(负值指数衰减不死);log_softmax+NLLLoss;200 epochs;test acc 82.1%;train acc 100% val 79.6%(过拟合迹象);t-SNE 降维可视化 embedding 分簇。

Ch8 Time Series Forecasting (10-ch08, 1001 行)

  • 时序特性:顺序相关(autocorrelation)、不许随机 split、趋势+季节性+随机 (L21-36)。
  • 数据建模:滑窗 seq_len=10,[N-seq_len, seq_len, features];多元(温度+风速→电价;作者职业经历:能源价格建模,热浪→光伏高/核电停/空调需求高) (L38-61)。
  • 三架构:LSTM(vanishing gradient→cell state 记忆链+三门 forget/input/output);1D CNN(时间维滑窗卷积,串联层+pooling);transformer(self-attention 一次性读全序列,11月销售↔12月;并行、远程依赖直接连) (L83-175)。
  • 实战 flights(1949-1960,144 月):MinMaxScaler;滑窗 X(134,10,1);最后 12 月做测试(clip_point,不随机);LSTM:nn.LSTM batch_first,取 x[:,-1,:]→fc;RMSE 0.08,MAPE 8.79%;CNN:Conv1d [batch,channels,seq],RMSE 0.09 MAPE 11.49%;Transformer:nn.Linear embedding→TransformerEncoderLayer(d_model=48,nhead=4,d_model 须被 nhead 整除)→fc1 取最后步;RMSE 0.11 MAPE 12.12%。小数据上 LSTM 反而最好
  • PyTorch Forecasting:TimeSeriesDataSet(time_idx/group_ids/max_encoder_length/time_varying_unknown_reals/time_varying_known_categoricals/static_categoricals);TFT(静态+已知动态+未知动态输入,GRN 滤噪,variable selection 可解释);Lightning trainer.fit;结果趋势对但系统性低估总量——TFT 对这么小数据过重;ARIMA 提及为经典对照。

Ch9 Language Models (11-ch09, 1417 行)——用法章+架构深潜

  • 定位:foundation models;不从头训,用现成模型。模型光谱(2025-11 时点):GPT-5/Gemini 2.5 Pro/Claude Sonnet 4.5/Grok 4 闭源;GPT-OSS/Gemma 3/Llama 4/Qwen3/Kimi K2/Mistral 开源或开放权重 (L41-63)。
  • OpenAI:API key→.env(代码与凭证分离);langchain_openai ChatOpenAI(model_name='gpt-4o-mini', temperature=0.5);invoke()→AIMessage;response_metadata 里 token_usage(input/output tokens 分开计费) (L77-196)。
  • Groq:免费跑开源模型;Groq(芯片公司)≠Grok(xAI 模型);llama-3.3-70b-versatile;context window=一次最多处理的 token 数,越大越贵越慢 (L198-308)。
  • 多模态:LMM;base64 编码图片发 API;llama-4-maverick 看图答流程图 (L310-416)。
  • 本地:Ollama(隐私,不出网);ollama pull gemma3:4b(3.3GB);langchain_ollama ChatOllama;270m~27b 参数档;4b 起多模态 (L418-544)。
  • 9.2 参数:temperature 低=聚焦确定、高= creative;冰淇淋店比喻(天冷只卖畅销口味);「Bert likes ___」三词概率分布在 T=0.1/0.5/20 下从尖锐到拉平;top-p(nucleus):累积概率凑够 p 的最小集合(0.9 例 movie+game=80% 停);top-k:固定取前 k 个;最佳实践:创意写作 T0.8-1.0/top-p0.9-1.0/top-k50-100;代码 T0.1-0.3;客服 T0.2-0.4 (L546-677)。
  • 9.3 模型选择:LMArena 双盲对战排行榜(2025-11-09 快照,95% 置信区间同 rank);cutoff date(联网搜索让它越来越不重要);on-premise vs cloud(GDPR);open-source vs open-weight(Llama 只公开权重不公开数据);cost(input 比 output token 便宜);context window(LlaVa 4k vs Kimi K2 250k);latency(time to first token,语音实时场景) (L679-766)。
  • 9.4 消息类型:user/human、system(定角色语气,但会 drift、管不住内容准确性)、assistant (L768-809)。
  • 9.5 prompt template:ChatPromptTemplate.from_messages,[("system",…),("user",…)],{变量}占位,invoke 填值;LangChain Hub 拉别人的 prompt(hardkothari/prompt-maker 把「summer, vacation, beach」+「Shakespeare poem」扩成详细 prompt→十四行诗) (L811-956)。
  • 9.6 chains:prompt | model | StrOutputParser,管道符串联;并行链/router 链提及 (L958-1050)。
  • 9.7 结构化输出:JSON/XML;PydanticOutputParser+BaseModel 定义 schema;partial(format_instructions);低温度 0-0.3;「mars, botanik」→{'title':'The Martian', 'main_character':'Mark Watney', 'director':'Ridley Scott', 'release_year':'2015'} (L1052-1184)。作者自荐《Generative AI with Python》。
  • 9.8 Transformer 深潜:tokenization(subword;「PyTorch」→「Py」「Torch」;token ID 37863/162709;英文 1 token≈3/4 词,德语 1 词≈2.1 token;tokenizer 必须配模型);word embeddings(动物 2D 例:腿数×身高,dog[4,1]/cat[4,0.5]/snake[0,0.5];1536/3072 维人想不出但机器可以;相似概念距离近);positional encoding(「The ball hits the boy」vs「The boy hits the ball」;sin/cos);self-attention(「The man ate the pizza because it smelled delicious」it→pizza;bert-base-uncased output_attentions 可视化);multihead 各头管不同关系 (L1186-1408)。

Ch10 Pretrained Networks and Fine-Tuning (12-ch10, 715 行)

  • transfer learning 定义:预训练模型+小数据集继续训;fine-tuning=特殊形式(训部分或全部层);性能-训练时长图:有 TL 起点高 (L77-117)。
  • 优点:算力省、收敛快、数据需求少(已会边缘/纹理/语法)、便宜到企业用得起 (L99-115)。
  • 三条路线:全模型微调(lr 极小 1e-5,防「遗忘」通用知识);特征提取(冻结 convolutional base,只换分类头;猫分类器→狗分类器,共享「毛、四条腿、两眼一鼻」);渐进解冻(先训头,再逐层向前解冻) (L118-183)。
  • Hugging Face:任务分类→Mask Generation 例;过滤:参数量、license(Apache 2.0 商用)、模型尺寸梯队(sam2-hiera tiny/small/large/huge);model card(性能/实现/论文) (L23-75)。
  • 10.3 CV 实战:DenseNet-121(ImageNet,100 万图 1000 类,dense connections);垃圾六分类(cardboard/glass/metal/paper/plastic/trash,2300-2500 图);冻结全部 requires_grad=False→只换 model.classifier=Linear(1024,6);CrossEntropyLoss 内部已 softmax 故不加;60/20/20;10 epochs;accuracy 76% vs dummy 27%;glass/plastic 易混。
  • 10.4 LM 实战:SLM 概念(蒸馏自 LLM);gemma-3-270m-it(2.7 亿参数,GPT-5 量级 1/1000);spam 数据 8200 train/2700 test,50.5% spam 几乎平衡;GemmaForSequenceClassification+GemmaTokenizer;tokenizer padding max_length truncation 512;set_format torch;**batch 字典 **batch 解包;AdamW;2 epochs(算力重,建议 ≥8GB GPU 或 Colab);accuracy 95.6% vs 多数类 50.5%。
  • 全章无 PEFT/LoRA(前言许诺未兑现)。

Ch11 PyTorch Lightning (13-ch11, 473 行)

  • 定位:不是替代 PyTorch,是其上的抽象层;boilerplate(训练循环/验证循环/checkpoint/硬件)收编。
  • 对比:nn.Module→pl.LightningModule;optimizer.step/zero_grad 消失,只写 configure_optimizers;training_step/validation_step 替代双层循环;trainer.fit() 像 sklearn。
  • LightningDataModule(setup/train_dataloader/val_dataloader);self.log('train_loss', on_step/on_epoch);Trainer(max_epochs, accelerator='auto', devices='auto') 自动 GPU;多 GPU 一个参数。
  • callbacks:ModelCheckpoint(monitor='val_loss', save_top_k=3, mode='min') 只在指标变好时存;load_from_checkpoint 恢复;EarlyStopping(monitor='val_loss', patience=3)——val loss 回升点=过拟合起点,停在 val loss 最小处;示例 10 epoch 上限第 4 epoch 就停。

Ch12 Model Evaluation, Logging, and Monitoring (14-ch12, 741 行)

  • 动机:蒙眼乱试=「violence」;系统化观察>瞎试。三件套分工:TensorBoard=雷达(训练时直看),MLflow=日志本(实验管理复现),WandB=任务控制(云+团队协作)
  • TensorBoard:SummaryWriter(log_dir);event file→web server dashboard;add_scalar/add_image(make_grid 4×4)/add_graph;FashionMNIST(70000 张 28×28 灰度 10 类,比 MNIST 难);nn.Sequential 分 features/classifier;torchmetrics Accuracy update/compute/reset;tensorboard --logdir=runs→localhost:6006;tabs: Time Series/Scalars/Images/Graphs。
  • MLflow:set_tracking_uri("file:./mlruns")+set_experiment;start_run 里 log_params/log_metric(step)/log_artifact;log_model vs register_model(模型注册表多版本,生产用);pyfunc.load_model→predict;mlflow ui --port 8080。
  • WandB:wandb.login/init(project, config)/wandb.log;wandb.save 存文件;Artifact(type="model"/"table")+add_file/add+log_artifact;sweeps:sweep_config method="grid" 参数网格(epochs[5,10]×batch[32,64]×lr[0.001,0.0001])→wandb.sweep+wandb.agent 自动跑全部组合。

Ch13 Deployment (15-ch13, 739 行)

  • 策略:CI/CD(CI=代码进共享库自动测试构建;CD=delivery 手动放行 vs deployment 自动上线);frontend/backend 架构(浏览器↔前端服务器↔后端微服务↔第三方 LLM/数据库;后端不直接对用户);协议:REST API(HTTP GET/POST/PUT/DELETE,JSON,最常用)/gRPC(Google,二进制快)/GraphQL(Meta,按需查询) (L20-82)。
  • 本地:ONNX(Open Neural Network Exchange,跨框架开放格式,PyTorch 训→别的运行时跑);torch.onnx.export(opset_version=12);FastAPI+uvicorn(ASGI);两个端点:"/" 返回状态,"/predict?image_url=…";四步走查:下载图(requests 带浏览器 headers)→预处理(32×32 灰度 /255 →(x-0.5)/0.5→expand_dims×2)→onnxruntime InferenceSession CPU 跑→sigmoid 概率→JSON {label, prob_chihuahua, prob_muffin};Postman 测 API;维基百科吉娃娃图 86% (L84-302)。
  • Heroku:账号+CLI;文件五件 app.py/bin_class_model.onnx/Procfile(web: uvicorn app:app --host 0.0.0.0 --port $PORT)/requirements.txt(钉版本)/runtime.txt(python-3.12.5);Create New App→heroku git:remote→git add/commit/branch -m master main/push heroku main;Resources 停 app、Settings 删 app 控成本 (L304-487)。
  • Azure:subscription(计费单元,可设月度预算)→resource group(区域:延迟/合规/价格);Function App(Flex Consumption 按量计费,512MB,Python 3.12,Germany West Central);host.json(全局配置)/function.json(scriptFile/authLevel anonymous/httpTrigger/route {*route})/init.py(async main+AsgiMiddleware 接 api_app);func start 本地 7071;func azure functionapp publish pytorchmodel→ Invoke URL azurewebsites.net;curl/Postman 测 (L489-721)。

差异化备忘(与库内另两本 PyTorch 书)

  • python-shen-du-xue-xi-pytorch(吴茂贵,2020):中文书,基础+CV/NLP 案例,2020 生态。
  • deep-learning-with-pytorch-training-and(官方 2 版,2026):PyTorch 官方团队,机制深、从张量讲起。
  • 本书:企业实践者视角,工程闭环(训练→评估→监控→部署)独有;LLM 用法章(API/LangChain/Ollama)与部署章(Heroku/Azure)是另两本没有的;示例全部 CPU 可跑(除 ch10 需 8GB GPU)。

走查素材候选(每章一条主走查)

  • ch1: y=3x+2 拟合(1000 epoch,w -0.9095→3.0030,b -0.0187→1.9810,loss 0.2662→0.0001)。
  • ch2: anxiety 数据 11000×19 →(one-hot)→31 列 →(去目标)→X(11000,30) →标准化 →100 epoch loss 19.94→1.57 →R2 0.65。
  • ch3: 10 个点阈值走查 →混淆矩阵 2/2/3/3;96.8% vs dummy 90.2%。
  • ch4: 5×5 图 ×3×3 边缘 filter →3×3 feature map;muffin-chihuahua [BS,1,32,32]→…→[BS,576]→79.9%。
  • ch5: YOLO 三步(网格→阈值→NMS);IoU 0.1/0.5/0.9;风格迁移 500 epoch 优化像素。
  • ch6: user 2(街霸/FF13/老滚5)→embedding→top10 推荐;Recall@k 0.022→0.40。
  • ch7: MNIST 784→16 维→重建;VAE μ,σ→z=μ+σε→生成 16 个数字。
  • ch8: B 节点 message passing(C/D/A 邻居聚合);Cora 82.1% vs dummy 31.9%。
  • ch9: flights 144 月→滑窗(134,10,1)→LSTM 预测 1960 年 12 个月 RMSE 0.08。
  • ch10: 「The man ate the pizza…」it→pizza;「mars, botanik」→The Martian JSON。
  • ch11: DenseNet 冻结→换头→垃圾 76% vs 27%;Gemma 2 epoch→95.6%。
  • ch12: anxiety 模型 Lightning 版,EarlyStopping 第 4 epoch 停;WandB sweep 2×2×2 网格。
  • ch13(拆并): muffin 模型 ONNX→FastAPI /predict→Heroku/Azure,吉娃娃 86%。