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')