三种实现模型可视化的方式(print, torchinfo, tensorboard)

本文介绍了三种用于模型可视化的工具,从基础的print输出,到Torchinfo提供的详细模型结构和参数信息,再到Tensorboard的动态图形展示,特别是通过Tensorboard展示AlexNet模型的示例,提供了丰富的视觉化选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下自己使用的三种模型可视化的方式,从简单到难

Print

最简单的是print,就不用多说了。

Torchinfo

from torchinfo import summary
import torch
model = (...)
summary(model, (1,3,128,128))

即可按照像文档路径一样的方式输出结构,并且有每一层的shape和参数量,比print的信息更多。
在这里插入图片描述
但相对而言还是比较简单。

Tensorboard

该方法是个人觉得最好用的并且很动态
需要提前下好tensorboard和tensorboardX

import torch
from torchvision.models import AlexNet
 
from tensorboardX import SummaryWriter
 
 
x=torch.rand(1,3,256,512)
model=AlexNet()
 
with SummaryWriter(comment='AlexNet') as w:
    w.add_graph(model, x) 

运行该方法后会在同级路径下生成一个runs文件夹,其中就有每次的文件
在这里插入图片描述
再开一个终端,进入runs之后,输入指令tensorboard --logdir=XXX --port 8080 这里XXX就是runs下方某一个文件夹的名称。--port 指定端口。个人建议指定一个不常用的端口,因为有时常用端口会被其他程序占用,不一定能显示,遇到过类似的坑。运行了命令之后点开对应的链接,一般是localhost:port 或者127.0.0.1:port ,浏览器打开即可。
在这里插入图片描述
他这个图是动态的,点击你想看的模块可以放大,比如打开Alexnet,只要有模块就可以一直方法,很方便。
在这里插入图片描述

在这里插入图片描述
相信这三种方法已经够你们使用了!

### PyTorch .pth 文件的可视化 对于 `.pth` 文件中的模型权重进行可视化的操作,可以分为几个方面来考虑。一方面是对模型架构及其各层参数量等信息的展示;另一方面则是针对特定层(比如卷积层)内部特征图或其他形式的数据分布情况进行图形化表示。 #### 使用 `torchinfo` 库查看模型结构详情 为了更好地理解整个神经网络的设计以及每一步计算过程中张量的变化情况,推荐先利用第三方库 `torchinfo` 对加载后的模型进行全面解析并打印出来: ```python from torchinfo import summary import torch from model import Model # 假设这是自定义的一个类名 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = Model().to(device) model.load_state_dict(torch.load('net.pth', map_location=device)) model.eval() dummy_input = torch.randn(1, 1, 30, 30).to(device) summary(model, input_size=(1, 1, 30, 30), col_names=["input_size", "output_size", "num_params"], depth=5)[^2] ``` 这段代码会输出详细的表格描述了各个子模块的信息,包括但不限于输入/输出形状、参数数量等。 #### 特征图可视化 如果目标是在于观察某些中间层产生的激活值,则可以通过如下方式获取指定位置上的数据,并将其转换成易于绘图的形式: ```python import matplotlib.pyplot as plt import numpy as np def plot_feature_maps(feature_map_tensor): """绘制给定tensor对应的feature maps""" feature_map_array = feature_map_tensor.detach().cpu().numpy()[0] num_channels = feature_map_array.shape[0] fig, axes = plt.subplots(nrows=int(np.sqrt(num_channels)), ncols=int(np.sqrt(num_channels))) for i in range(min(len(axes.flat), num_channels)): ax = axes.flatten()[i] im = ax.imshow(feature_map_array[i], cmap='viridis') ax.axis('off') plt.tight_layout() plt.show() with torch.no_grad(): outputs = model(dummy_input) for name, module in model.named_children(): if isinstance(module, torch.nn.Conv2d): output = module(dummy_input) print(f"Visualizing {name} layer's feature maps.") plot_feature_maps(output) break # 如果只需要看第一个conv层的话 ``` 上述脚本选择了第一个遇到的二维卷积层作为例子进行了特征映射的提取与显示。当然也可以调整逻辑遍历更多类型的组件或是全部符合条件的对象。 #### TensorBoard 集成 除了直接生成静态图片外,还可以借助 TensorFlow 提供的强大工具——TensorBoard 来动态跟踪实验进展状况。这不仅限于简单的图像渲染,还包括损失函数曲线变化趋势等多种维度的表现形式。 ```python from torch.utils.tensorboard import SummaryWriter writer = SummaryWriter(log_dir='./logs') writer.add_graph(model, dummy_input) writer.close() ``` 执行以上命令之后,在终端里启动 tensorboard (`tensorboard --logdir=./logs`) 并访问浏览器页面即可获得交互式的探索体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值