可视化模块

本文介绍了如何使用Python和相关库如PyTorch和Matplotlib,展示网络输入图片和网络层的热力图。首先,展示了如何将图片数据转化为适合网络的格式;然后,通过定义钩子函数捕获网络层的输出,计算并生成了每个输入图片对应的热力图,以理解网络对不同区域的关注程度。
摘要由CSDN通过智能技术生成

可视化送入网络的图片

送入的数据为imgs,其大小为(8,3,256,256),并以2行8列进行展示

import matplotlib.pyplot as plt
import numpy as np

# 假设你的张量名为 tensor,形状为 (8, 3, 256, 256)
# 假设通道顺序为 RGB

# 将张量的数据格式转换为 (8, 256, 256, 3)
tensor = imgs.permute(0, 2, 3, 1)

# 创建一个 2x4 的子图布局,8 张图像
fig, axes = plt.subplots(2, 4, figsize=(12, 6))

for i in range(8):
    # 选择子图
    ax = axes[i // 4, i % 4]

    # 获取第 i 张图像的数据
    image = tensor[i].numpy()

    # 确保图像的像素值在 [0, 1] 范围内
    image = np.clip(image, 0, 1)

    # 绘制图像
    ax.imshow(image)
    ax.set_title(f'Image {i + 1}')
    ax.axis('off')

plt.tight_layout()
plt.show()

可视化网络层图片的热力图

import torch
import matplotlib.pyplot as plt

# 创建一个空的列表来存储该层的输出
activation = []

# 定义一个钩子函数,用于获取该层的输出
def hook_fn(module, input, output):
    activation.append(output)

# 注册钩子到网络的fam4层
model.fam4.register_forward_hook(hook_fn)

# 初始化一个子图,排列方式为2x4
fig, axs = plt.subplots(2, 4, figsize=(16, 8))


# 将输入数据图片传递给网络进行前向传播
output = model(imgs)  

for i in range(8):
    # 获取钩子记录的该层的输出
    layer_output = activation[0]

    # 计算热力图
    heatmap = layer_output.mean(dim=1, keepdim=True)  # 在通道维度上取平均值

    # 可视化热力图
    axs[i // 4, i % 4].imshow(heatmap[i, 0].cpu().detach().numpy(), cmap='viridis')
    axs[i // 4, i % 4].set_title(f'Image {i + 1}')
    axs[i // 4, i % 4].axis('off')

plt.show()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醋酸洋红就是我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值