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() 确保高效、稳定的输出。
相关推荐
外收内放6 小时前
面向对象高级(实战案例)
开发语言·python·学习
专业程序开发源7 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
FPGA小迷弟7 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
卷无止境7 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
fanruitian7 小时前
python else用法
开发语言·python
Thinker QAQ8 小时前
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用
java·python·go·并发编程·shared memory·message passing
用户8356290780518 小时前
如何使用 Python 对 Excel 数据进行分组和分级显示
后端·python
vx_Biye_Design8 小时前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express
学Linux的语莫10 小时前
python中类的常见写法
开发语言·python·状态模式
垆边人似月.10 小时前
Python中如何使用get函数实现频次查询
服务器·前端·python