当前位置: 首页 > news >正文

DAY 35 模型可视化与推理-2025.9.30

模型可视化与推理

知识点回顾

  1. 三种不同的模型可视化方法:推荐torchinfo打印summary+权重分布可视化
  2. 进度条功能:手动和自动写法,让打印结果更加美观
  3. 推理的写法:评估模式

笔记:

一、三种模型可视化方法

1. torchinfo 打印模型结构

torchinfo 是专门用于打印模型结构的工具,能清晰展示各层名称、输入输出形状、参数数量等信息,适合快速了解模型整体结构。
安装:

pip install torchinfo
import torch
import torch.nn as nn
from torchinfo import summary# 定义一个简单模型(示例)
class SimpleModel(nn.Module):def __init__(self):super().__init__()self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)self.bn1 = nn.BatchNorm2d(16)self.fc = nn.Linear(16*32*32, 10)  # 假设输入为32x32的图像def forward(self, x):x = self.conv1(x)x = self.bn1(x)x = x.flatten(1)x = self.fc(x)return xmodel = SimpleModel()
# 打印summary(需指定输入尺寸,batch_size可设为-1表示任意)
summary(model, input_size=(1, 3, 32, 32))  # (batch, channel, height, width)

输出说明:会显示每一层的名称、输入输出形状(Input Shape/Output Shape)、参数数量(Params)及总参数量,便于快速校验模型结构是否符合预期。

2. 权重分布可视化
通过绘制权重参数的直方图 / 核密度图,可直观观察参数分布是否合理(如是否过分散 / 过集中),辅助判断模型训练状态。
示例代码:

import matplotlib.pyplot as plt
import seaborn as sns# 提取某层权重(以conv1为例)
weights = model.conv1.weight.data.numpy().flatten()  # 展平为一维数组# 绘制直方图
plt.figure(figsize=(10, 4))
sns.histplot(weights, bins=50, kde=True)  # kde=True添加核密度曲线
plt.title("Conv1 Layer Weights Distribution")
plt.xlabel("Weight Value")
plt.ylabel("Count")
plt.show()

作用:若权重分布过于集中(如接近 0),可能表示模型训练不足;若分布异常分散,可能存在梯度爆炸风险。

3. 计算图可视化(torchviz)
通过 torchviz 绘制模型的计算图,展示张量的流动路径和操作关系,适合调试复杂模型的前向传播逻辑。

安装:

pip install torchviz
# 需额外安装graphviz(系统工具):https://graphviz.org/download/
from torchviz import make_dot# 生成一个输入张量
x = torch.randn(1, 3, 32, 32)
# 前向传播得到输出
y = model(x)
# 绘制计算图
graph = make_dot(y, params=dict(model.named_parameters()))
graph.render("model_graph", format="png")  # 保存为图片

输出:生成的图片会展示从输入到输出的所有操作(如卷积、批归一化、线性层等)及张量形状变化,清晰呈现计算流程。

二、进度条功能实现

1. 手动实现进度条
适用于简单场景,通过控制台输出覆盖实现动态更新。
示例代码:

import timetotal = 100  # 总任务数
for i in range(total + 1):progress = i / total * 100# 用\r覆盖当前行,end=""取消换行print(f"\r进度: [{'#' * int(i/2)} {' ' * (50 - int(i/2))}] {progress:.1f}%", end="")time.sleep(0.05)  # 模拟任务耗时
print("\n任务完成!")

说明:通过 \r 回到行首,用 # 填充进度条,动态显示百分比,适合轻量化需求。

2. 自动实现(tqdm 库,推荐)
tqdm 是常用的进度条库,支持自动计算进度、剩余时间预估,兼容循环 / 迭代器。
安装:

pip install tqdm
from tqdm import tqdm
import time# 1. 直接包裹可迭代对象(最简单用法)
total = 100
for i in tqdm(range(total), desc="处理中"):  # desc设置进度条名称time.sleep(0.05)# 2. 手动更新进度(适合非迭代场景)
pbar = tqdm(total=total, desc="手动更新")
for i in range(total):time.sleep(0.05)pbar.update(1)  # 每次更新1步
pbar.close()  # 关闭进度条

优势:自动显示 %、已完成数 / 总数、耗时、剩余时间,支持自定义名称和单位,美观且易用。

三、推理的评估模式写法

在模型推理 / 评估阶段,需通过 model.eval() 切换为评估模式,并禁用梯度计算以节省内存和加速。

核心要点:
model.eval():关闭 Dropout 层、固定 BatchNorm 层的均值 / 方差(使用训练时统计的结果)。
torch.no_grad():禁用梯度计算,减少内存占用并加速推理。

示例代码:

import torch
from torch.utils.data import DataLoader, TensorDataset# 假设已定义模型和测试数据集
model = SimpleModel()
test_data = TensorDataset(torch.randn(100, 3, 32, 32), torch.randint(0, 10, (100,)))
test_loader = DataLoader(test_data, batch_size=16)# 加载训练好的权重(示例)
model.load_state_dict(torch.load("model_weights.pth"))# 切换到评估模式
model.eval()
total_correct = 0
total_samples = 0# 禁用梯度计算
with torch.no_grad():for inputs, labels in tqdm(test_loader, desc="评估中"):outputs = model(inputs)  # 前向传播_, preds = torch.max(outputs, 1)  # 取预测概率最大的类别total_correct += (preds == labels).sum().item()total_samples += labels.size(0)# 计算准确率
acc = total_correct / total_samples
print(f"测试准确率: {acc:.4f}")

说明:评估模式确保推理结果的一致性(避免 Dropout 随机失活和 BatchNorm 动态更新),torch.no_grad() 可使推理速度提升约 20%-50%。

http://www.dtcms.com/a/429160.html

相关文章:

  • 网站头部优化文字怎么做html怎么自己做网站
  • 2002年网站建设公司美词原创网站建设
  • 静安区网站建设工作作风
  • 网站开发公司的log开传奇怎么建设自己的网站
  • 做网站简单还是app简单响应式网站怎么样
  • 网站开发文件夹遂溪手机网站建设公司
  • 淘宝联盟怎么新建网站盐城优化办
  • 南阳网站建设域名公司大连网站建设策划
  • 扁平化资讯网站模板世界十大市场调研公司
  • 建设企业网站e路护航官网企业端外包一个项目多少钱
  • 黑龙江两学一做网站同城引流用什么软件
  • 网站制作哪些公司好外贸平台网站有哪些
  • vs网站制作如何让百度快速收录网站
  • 简单公司网站源码WordPress文章投票
  • 基于大数据的美食分析可视化平台: 美食大数据深度分析系统Python+Hadoop+Spark+LSTM预测(优秀项目)✅
  • 回龙观做网站怎么在网站后面制作官网俩个字
  • 上街免费网站建设建设视频网站费用吗
  • 网站 备案 异地steam账号注册网站
  • 凡客网站建设怎么样张家港质监站网址
  • Stable Diffusion原理解析
  • CPP——OJ试题,string、vector、类(题三)初步应用
  • 制作天下网站织梦网站后台视频教程
  • 保定网站建设服务wordpress post_type
  • 英语形态学基础概念
  • 创业公司造APP:是自建“御林军”还是聘请“外援军团”?优雅草卓伊凡
  • 藁城网站建设为什么语音转文字里面没有海南的
  • 一站式AI数字人创作平台,让AI创作触手可及(文末有安装包)
  • WordPress搭建社区网站2023引流软件
  • 营口 微网站建设WordPress万级数据优化
  • 网站建设学习学校展台展馆设计搭建