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

用deepseek学大模型04-模型可视化与数据可视化

deepseek.com: pytorch可视化工具 生成神经网络图

在 PyTorch 中,可视化神经网络结构的常用工具和方法有以下几种,以下将详细介绍它们的用法:


1. TensorBoard (PyTorch 官方集成)

PyTorch 通过 torch.utils.tensorboard 支持 TensorBoard,可以直接可视化模型结构。

步骤:
  1. 安装 TensorBoard

    pip install tensorboard
    
  2. 代码示例

    import torch
    from torch.utils.tensorboard import SummaryWriter
    from torchvision.models import resnet18
    
    # 定义模型
    model = resnet18()
    # 创建 SummaryWriter 对象
    writer = SummaryWriter("runs/experiment1")
    # 生成随机输入数据(需与模型输入形状匹配)
    dummy_input = torch.randn(1, 3, 224, 224)
    # 将模型结构写入 TensorBoard
    writer.add_graph(model, dummy_input)
    writer.close()
    
  3. 启动 TensorBoard

    tensorboard --logdir=runs
    

    在浏览器中打开 http://localhost:6006,在 GRAPHS 标签页查看模型结构。


2. torchviz (生成计算图)

torchviz 基于 Graphviz,生成模型的计算图(前向传播路径)。

步骤:
  1. 安装依赖

    pip install torchviz graphviz
    
  2. 代码示例

    import torch
    from torchviz import make_dot
    from torchvision.models import resnet18
    
    model = resnet18()
    dummy_input = torch.randn(1, 3, 224, 224)
    output = model(dummy_input)
    # 生成计算图
    dot = make_dot(output, params=dict(model.named_parameters()))
    # 保存为图片(格式可为 PDF 或 PNG)
    dot.render("resnet18", format="png")
    

3. HiddenLayer (轻量级可视化)

hiddenlayer 是一个轻量级工具,适合快速生成模型结构图。

步骤:
  1. 安装

    pip install hiddenlayer
    
  2. 代码示例

    import torch
    import hiddenlayer as hl
    from torchvision.models import resnet18
    
    model = resnet18()
    dummy_input = torch.randn(1, 3, 224, 224)
    # 构建可视化图表
    hl.build_graph(model, dummy_input).save("resnet18.png")
    

4. Netron (模型结构查看器)

Netron 是一个独立的可视化工具,支持 PyTorch 模型文件(.pt.pth)或 ONNX 格式。

步骤:
  1. 导出模型为 ONNX

    import torch
    from torchvision.models import resnet18
    
    model = resnet18()
    dummy_input = torch.randn(1, 3, 224, 224)
    torch.onnx.export(model, dummy_input, "resnet18.onnx")
    
  2. 使用 Netron 打开
    访问 Netron Web 版 或下载桌面端,上传 .onnx 文件即可查看交互式模型结构。


5. PyTorch 内置打印

通过 print(model) 快速查看模型层级(适合简单结构):

import torch.nn as nn

class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.layers = nn.Sequential(
            nn.Linear(10, 20),
            nn.ReLU(),
            nn.Linear(20, 1)
        )
    
    def forward(self, x):
        return self.layers(x)

model = MyModel()
print(model)

工具对比

工具优点缺点
TensorBoard集成训练监控,交互式可视化需要启动服务,略复杂
torchviz显示计算细节,适合调试依赖 Graphviz,图可能较复杂
HiddenLayer轻量级,快速生成功能相对简单
Netron无需代码,支持多格式依赖导出模型文件

根据需求选择工具:调试计算流程用 torchviz,训练集成用 TensorBoard,快速分享用 Netron

在 PyTorch 中,可视化训练集、测试集、预测结果和训练过程可以通过多种工具实现。以下是常用的工具和方法,按场景分类:


1. 可视化数据集(训练集/测试集)

工具:Matplotlib/Seaborn

直接使用 Python 绘图库可视化输入数据或特征分布。

import matplotlib.pyplot as plt
import torchvision

# 示例:可视化 CIFAR10 训练集
dataset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True)
classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

# 显示前 9 张图片
fig, axes = plt.subplots(3, 3, figsize=(10, 10))
for i, ax in enumerate(axes.flat):
    img, label = dataset[i]
    ax.imshow(img)
    ax.set_title(f"Label: {classes[label]}")
    ax.axis('off')
plt.show()

2. 可视化训练过程

工具 1:TensorBoard(PyTorch 集成)

监控训练损失、准确率等指标,支持动态更新。

from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter("runs/experiment1")

for epoch in range(num_epochs):
    # 训练代码...
    train_loss = ...
    val_accuracy = ...
    
    # 记录标量数据
    writer.add_scalar('Loss/train', train_loss, epoch)
    writer.add_scalar('Accuracy/val', val_accuracy, epoch)

    # 记录模型权重分布
    for name, param in model.named_parameters():
        writer.add_histogram(name, param, epoch)

# 启动 TensorBoard
# tensorboard --logdir=runs
工具 2:Weights & Biases(第三方协作工具)

云端记录实验,支持超参数跟踪和团队协作。

import wandb

# 初始化
wandb.init(project="my-project")

# 记录指标
wandb.log({"train_loss": train_loss, "val_acc": val_accuracy})

# 记录预测结果(图像示例)
wandb.log({"predictions": [wandb.Image(img, caption=f"Pred:{pred}, True:{true}")]})

3. 可视化预测结果

方法 1:Matplotlib 直接绘制
# 示例:分类结果可视化
import numpy as np

model.eval()
with torch.no_grad():
    inputs, labels = next(iter(test_loader))
    outputs = model(inputs)
    preds = torch.argmax(outputs, dim=1)

# 显示预测结果
fig, axes = plt.subplots(4, 4, figsize=(12, 12))
for i, ax in enumerate(axes.flat):
    ax.imshow(inputs[i].permute(1, 2, 0))  # 调整通道顺序
    ax.set_title(f"Pred: {classes[preds[i]]}\nTrue: {classes[labels[i]]}")
    ax.axis('off')
plt.tight_layout()
plt.show()
方法 2:混淆矩阵(分类任务)
from sklearn.metrics import confusion_matrix
import seaborn as sns

# 计算混淆矩阵
cm = confusion_matrix(true_labels, pred_labels)
plt.figure(figsize=(10, 8))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=classes, yticklabels=classes)
plt.xlabel("Predicted")
plt.ylabel("True")
plt.show()

4. 高级可视化工具

工具 1:Plotly(交互式可视化)

绘制动态训练曲线:

import plotly.express as px

# 假设 logs 是包含训练历史的字典
fig = px.line(logs, x='epoch', y=['train_loss', 'val_loss'], 
              title="Training and Validation Loss")
fig.show()
工具 2:Gradio(快速构建交互式 Demo)

部署模型预测交互界面:

import gradio as gr

def classify_image(img):
    img = preprocess(img)  # 预处理
    pred = model(img)      # 推理
    return classes[torch.argmax(pred)]

gr.Interface(fn=classify_image, inputs="image", outputs="label").launch()

5. 训练过程可视化(高级)

工具:PyTorch Lightning

自动集成 TensorBoard 和 WandB,简化日志记录:

import pytorch_lightning as pl

class MyModel(pl.LightningModule):
    def training_step(self, batch, batch_idx):
        x, y = batch
        y_hat = self(x)
        loss = F.cross_entropy(y_hat, y)
        self.log("train_loss", loss)  # 自动记录到日志
        return loss

# 训练时指定 logger
trainer = pl.Trainer(
    logger=pl.loggers.TensorBoardLogger("logs/"),
    # 或使用 WandB
    # logger=pl.loggers.WandbLogger(project="my-project")
)
trainer.fit(model)

工具对比

工具/方法适用场景优点缺点
TensorBoard训练指标跟踪、模型结构可视化官方集成,功能全面需本地启动服务
WandB团队协作、云端实验管理实时同步、超参数跟踪需要注册账号
Matplotlib静态数据可视化灵活、无需额外依赖交互性弱
Plotly交互式动态图表支持网页嵌入、动态更新学习曲线稍陡峭
Gradio快速部署预测 Demo零代码交互界面功能相对简单

关键场景总结

  1. 训练过程监控:优先选择 TensorBoard 或 WandB。
  2. 数据集预览:Matplotlib/Seaborn 快速绘制。
  3. 预测结果分析:混淆矩阵(分类)、BBox 标注(检测)、Matplotlib 对比图(回归)。
  4. 协作与报告:WandB 或 TensorBoard.dev(云端共享)。

可根据需求组合使用工具,例如:TensorBoard + Matplotlib(本地开发)或 WandB + Gradio(团队协作 + 演示)。

相关文章:

  • Java ArrayList(单列集合)
  • Edge浏览器翻译|自动翻译设置
  • 网页模板免费HTML源码 HTML网页设计模板
  • DeepSeek 深度解析:引领 SEO 与数据分析新时代的智能工具
  • Oracle VirtualBox虚拟机软件中安装ubuntu(不理想版本)
  • 前端知识速记:BFC与IFC
  • STM32 RTC 实时时钟说明
  • 蓝桥杯单片机大模板(西风)
  • Java 大视界 -- 边缘计算与 Java 大数据协同发展的前景与挑战(85)
  • linux-带宽性能压测-全解iperfwgetspeedtest-cli
  • 【第9章:计算机视觉实战—9.4 计算机视觉在其他领域的应用探索】
  • 2021年下半年软件设计师下午试卷题型和考点总结(附真题及答案解析)
  • AI大模型的技术突破与传媒行业变革
  • 语音识别(实时语音转录)——funasr的详细部署和使用教程(包括实时语音转录)
  • Unity CommandBuffer绘制粒子系统网格显示
  • 【漫话机器学习系列】094.交叉熵(Cross-Entropy)
  • 【LeetCode】15.三数之和
  • Java 实现简单动态字符串
  • 机器学习--逻辑回归模型
  • MyBatis映射文件常用元素详解与示例
  • 中国空间站多项太空实验已取得成果,未来将陆续开展千余项研究
  • 辽宁省委书记郝鹏、省长王新伟赶到辽阳火灾事故现场指导善后处置工作
  • 王毅会见泰国外长玛里:坚决有力打击电诈等跨境犯罪
  • 黄晓丹:用“诗心”找到生存的意义
  • 吉林省公安厅出入境管理总队政委明志全已任省安保集团总经理
  • 《沙尘暴》:用贴近生活的影像和表演拍摄悬疑剧