DAY 35


一、模型结构可视化

理解模型的两大关键:损失函数如何定义任务 ,以及层设计如何决定参数总量。

1. nn.Module 自带方法
  • 打印模型结构 :print(model) 直接输出各层名称与顺序。
  • 查看参数详情 :model.named_parameters() 可遍历所有可训练参数,获取名称、形状(param.shape)。
  • 权重分布分析 :提取 weight 参数并转为 numpy 数组,绘制直方图观察各层权重的均值、标准差、最值等统计量。这些信息可辅助调整学习率、初始化方法或正则化强度。
2. torchsummary 库的 summary
  • 安装:pip install torchsummary
  • 用法:summary(model, input_size=(4,))
  • 必须提供 input_size(不含批量维度),因为 PyTorch 是动态图,需通过虚拟输入前向传播一次来推断各层的输出形状和参数量。
  • input_size 格式取决于模型类型:MLP 用 (特征数,),CNN 用 (通道, 高, 宽),RNN 用 (序列长度, 特征数)。
  • 报告中参数量的计算:如 Linear(4,10) 有 4×10 个权重 + 10 个偏置 = 50 个参数;Linear(10,3) 有 10×3+3=33,总参数量 83。
3. torchinfo 库的 summary
  • 提供比 torchsummary 更详细的摘要,包括每层输入/输出形状、参数量、计算量等,常与 TensorBoard 配合使用。
  • 用法相同:summary(model, input_size=(4,))

二、进度条功能(tqdm)

tqdm 用于在循环中可视化训练进度。

1. 手动更新
python 复制代码
from tqdm import tqdm
with tqdm(total=10, desc="训练进度", unit="epoch") as pbar:
    for i in range(10):
        # 训练代码...
        pbar.update(1)          # 手动前进1步
        pbar.set_postfix({'Loss': f'{loss:.4f}'})  # 显示实时指标
  • desc:左侧描述文字;unit:进度单位(如 epoch、batch)。
  • set_postfix 可在右侧动态显示字典形式的附加信息。
2. 自动更新
python 复制代码
for i in tqdm(range(10), desc="处理任务", unit="个"):
    # 循环体,无需手动update

直接将可迭代对象传入 tqdm(),自动完成进度更新。

在训练代码中的应用:创建总步数为 num_epochs 的进度条,每完成一定轮次后调用 pbar.update(n) 并刷新 postfix 显示损失值,最终确保进度条到达 100%。


三、模型推理(评估)

训练完成后在测试集上评估模型性能。

关键步骤
  1. 评估模式 :model.eval() 固定 Dropout、BatchNorm 等训练特定层,保证输出稳定。

    • 注意:此模式不自动关闭梯度计算,仍需手动处理。
  2. 禁用梯度 :with torch.no_grad(): 避免构建计算图,节省显存并加速推理。

  3. 预测与准确率 :

    python 复制代码
    outputs = model(X_test)
    _, predicted = torch.max(outputs, 1)          # 取每行最大值的索引作为类别
    correct = (predicted == y_test).sum().item()  # 正确个数
    accuracy = correct / y_test.size(0)           # 准确率
    • torch.max(outputs, dim=1) 返回最大值和索引,_ 忽略最大值,仅获取预测类别。
    • 所有操作在 GPU 张量上完成,无需转换到 CPU 或使用 sklearn,以保持高效。
知识串联
  • 训练阶段:定义损失(CrossEntropyLoss)与优化器(SGD),在循环中进行前向、反向和参数更新。
  • 推理阶段:模型参数固定,仅需前向传播,通过 eval() + no_grad() 确保高效、稳定的输出。
相关推荐
databook1 小时前
使用 SciPy 库进行时间序列分析
python·数据分析·scipy
java资料站1 小时前
十一、评估测试
开发语言·人工智能·python
szial2 小时前
网络爬虫与 CDP 实战(二):浏览器能访问,Python 却被拒绝?拆开登录态与 CSRF
爬虫·python·csrf
青少儿编程课堂3 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
怕浪猫3 小时前
LLM 面试必问的 8 个问题,答不上来直接淘汰
人工智能·python·面试
老歌老听老掉牙4 小时前
从三维旋转的深度解析到Python实现:绕任意轴旋转的奥秘
python·三维旋转
打工仔折腾 AI4 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
梦幻精灵_cq5 小时前
sumdir——一个伪python.built-in的“术法”打造
python
weixin_440730506 小时前
函数return、参数、参数组、递归函数、高阶函数等小结
开发语言·python
天赐范式6 小时前
天赐范式第181天:让视图开始切换——PBFT视图切换与从safety到liveness的跨越
python·pbft·数字生命·天赐范式·动态运行时·拜占庭容错