1. Matplotlib:基础数据可视化
Matplotlib是Python最基础的绘图库,适合绘制损失曲线、精度曲线、参数分布等基本图形。
pip install matplotlibplt.plot展示训练与验证指标的变化趋势,帮助判断模型是否过拟合。import matplotlib.pyplot as plt
epochs = range(1, num_epochs + 1)
plt.plot(epochs, train_losses, 'bo-', label='Training Loss')
plt.plot(epochs, val_losses, 'r*-', label='Validation Loss')
plt.title('Training and Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
plt.hist查看模型各层参数的分布情况,判断参数是否合理(如权重是否集中在0附近)。for name, param in model.named_parameters():
plt.hist(param.detach().numpy().flatten(), bins=50)
plt.title(f'Parameter Distribution: {name}')
plt.show()
2. TensorBoard:训练过程动态可视化
TensorBoard是PyTorch官方推荐的可视化工具,支持标量(损失、精度)、直方图(参数分布)、图像(输入/输出)、计算图等多种数据的动态展示。
pip install tensorboardSummaryWriter记录数据,指定日志保存路径(如runs/experiment-1)。from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter('runs/experiment-1') # 创建writer对象
for epoch in range(num_epochs):
# 训练代码...
train_loss = compute_loss(model, train_loader)
val_accuracy = compute_accuracy(model, val_loader)
# 记录标量数据(全局步数为epoch)
writer.add_scalar('Loss/train', train_loss, epoch)
writer.add_scalar('Accuracy/val', val_accuracy, epoch)
writer.close() # 关闭writer,确保数据写入磁盘
tensorboard --logdir=runs,然后在浏览器打开localhost:6006,即可看到**Scalars(损失/精度曲线)、Histograms(参数分布)、Graphs(计算图)**等面板。3. Seaborn:高级统计可视化
Seaborn基于Matplotlib构建,提供更美观、更高级的统计图形(如热力图、分布直方图),适合分析数据的相关性或分布特征。
pip install seaborn pandasseaborn.heatmap展示多个指标的相关性(如损失与精度的关系)。import seaborn as sns
import pandas as pd
data = pd.DataFrame({'Loss': train_losses, 'Accuracy': train_accuracies})
sns.heatmap(data.corr(), annot=True, cmap='coolwarm', fmt=".2f")
plt.title('Loss vs Accuracy Correlation')
plt.show()
sns.histplot展示指标的分布情况,比Matplotlib更简洁。sns.histplot(train_losses, kde=True, bins=30, color='blue')
plt.title('Training Loss Distribution')
plt.xlabel('Loss')
plt.ylabel('Frequency')
plt.show()
4. Torchviz:模型计算图可视化
Torchviz用于生成PyTorch模型的计算图,帮助理解模型的前向传播过程(如数据流动、层间依赖关系)。
pip install torchvizimport torch
from torchviz import make_dot
# 假设已定义模型model和输入张量input_tensor
input_tensor = torch.randn(1, 3, 224, 224) # 示例输入(根据模型输入尺寸调整)
output = model(input_tensor) # 前向传播
# 生成计算图(params包含模型所有可学习参数)
dot = make_dot(output, params=dict(model.named_parameters()))
dot.render("model_structure", format="png") # 保存为PNG文件
执行后,当前目录会生成model_structure.png,展示模型的层结构、数据流向、参数信息。5. Netron:模型结构可视化
Netron是一款跨平台的深度学习模型可视化工具,支持PyTorch(.pt/.pth)、TensorFlow(.pb)等多种模型格式,无需编写代码即可查看模型结构。
pip install netronnetron model.pt --port 8080(model.pt为你的模型文件路径,--port可指定端口,默认8080)。localhost:8080,即可直观查看模型的层结构、参数数量、输入/输出形状等信息(支持缩放、拖动、点击层查看详情)。6. Visdom:实时数据可视化
Visdom是Facebook开源的实时可视化工具,适合监控训练过程中的实时指标(如每步损失、动态图像),但需要手动启动服务器。
pip install visdompython -m visdom.server,默认访问localhost:8097。visdom.Visdom()连接服务器,使用vis.line绘制实时曲线。import visdom
import torch
vis = visdom.Visdom() # 连接服务器
# 初始化线条(win为窗口名称,opts为样式选项)
win = vis.line(X=torch.tensor([0]), Y=torch.tensor([0]),
opts=dict(title='Training Loss', xlabel='Step', ylabel='Loss'))
for step in range(100):
# 模拟训练损失(替换为实际损失)
loss = torch.rand(1) * 0.1
# 更新线条(update='append'表示追加数据)
vis.line(X=torch.tensor([step]), Y=loss, win=win, update='append')