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

Python打卡训练营学习记录Day46

作业:

  1. 今日代码较多,理解逻辑即可
  2. 对比不同卷积层特征图可视化的结果(可选)

一、CNN特征图可视化实现

import torch
import matplotlib.pyplot as pltdef visualize_feature_maps(model, input_tensor):# 注册钩子获取中间层输出features = []def hook(module, input, output):features.append(output.detach().cpu())# 选择不同卷积层观察target_layers = [model.layer1[0].conv1,model.layer2[0].conv1,model.layer3[0].conv1]handles = []for layer in target_layers:handles.append(layer.register_forward_hook(hook))# 前向传播with torch.no_grad():_ = model(input_tensor.unsqueeze(0))# 移除钩子for handle in handles:handle.remove()# 可视化不同层特征图fig, axes = plt.subplots(len(target_layers), 5, figsize=(20, 10))for i, feat in enumerate(features):for j in range(5):  # 显示前5个通道axes[i,j].imshow(feat[0, j].numpy(), cmap='viridis')axes[i,j].axis('off')plt.show()

二、通道注意力模块示例

class ChannelAttention(nn.Module):def __init__(self, in_channels, reduction=16):super().__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.max_pool = nn.AdaptiveMaxPool2d(1)self.fc = nn.Sequential(nn.Linear(in_channels, in_channels // reduction),nn.ReLU(),nn.Linear(in_channels // reduction, in_channels),nn.Sigmoid())def forward(self, x):# ... existing code ...return x * attention_weights  # 应用注意力权重

三、热力图生成方法

def generate_heatmap(model, input_img):# 前向传播获取梯度model.eval()input_img.requires_grad = Trueoutput = model(input_img)pred_class = output.argmax(dim=1).item()# 反向传播计算梯度model.zero_grad()output[0, pred_class].backward()# 获取最后一个卷积层的梯度gradients = model.layer4[1].conv2.weight.gradpooled_gradients = torch.mean(gradients, dim=[0,2,3])# 生成热力图activations = model.layer4[1].conv2.activations.detach()for i in range(activations.shape[1]):activations[:,i,:,:] *= pooled_gradients[i]heatmap = torch.mean(activations, dim=1).squeeze()return heatmap

@浙大疏锦行

http://www.xdnf.cn/news/907903.html

相关文章:

  • Arch-hyprland常用配置
  • 【Algo】常见组合类数列
  • 在centos7.9重置qcow2 root密码-qcow2忘记密码
  • 《0/1背包》题集
  • 【大厂机试题解法笔记】最差产品奖
  • 大模型编程助手-windsurf
  • 云服务器厂商机房是什么
  • CMOS图像传感器系列--(二)HDR之DAG技术
  • 跟我学c++中级篇——理解类型推导和C++不同版本的支持
  • 旅行商问题(TSP)的 C++ 动态规划解法教学攻略
  • python --导出数据库表结构(pymysql)
  • React从基础入门到高级实战:React 实战项目 - 项目四:企业级仪表盘
  • Profinet 协议 IO-Link 主站网关(三格电子)
  • DDD架构实战 领域层 事件驱动
  • Hive窗口函数RANGE BETWEEN详解:用法、场景与案例(附真实业务案例)
  • spring重试机制
  • 三菱PLC与西门子PLC如何实现485通讯?
  • 关于锁策略的简单介绍
  • echarts柱状图实现动态展示时报错
  • 电子电气架构 --- 什么是功能架构?
  • QT自定义资源管理器
  • 并查集专题
  • 在 Windows 系统上运行 Docker 容器中的 Ubuntu 镜像并显示 GUI
  • 解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
  • Flutter:下拉框选择
  • Langchain4j 整合向量数据库(10)
  • 黑龙江云前沿服务器租用:便捷高效的灵活之选​
  • 【原神 × 二叉树】角色天赋树、任务分支和圣遗物强化路径的算法秘密!
  • 【Java后端基础 005】ThreadLocal-线程数据共享和安全
  • C++ 设计模式 《小明的奶茶加料风波》