【Python】【Torch】神经网络中各层输出的特征图可视化详解和示例
本文对神经网络各层特征图可视化的过程进行运行示例,方便大家使用,有助于更好的理解深度学习的过程,尤其是每层的结果。
神经网络各层特征图可视化的好处和特点如下:
可视化过程可以了解网络对图像像素的权重分布,可以了解网络对图像特征的提取过程,还可以剔除对特征表达无关紧要的像素,缩短网络训练时间,减少模型复杂度。
可以将复杂多维数据以图像形式呈现,帮助科研人员更好的理解数据特征,同时可以建立定量化的图像与病理切片的对应关系,为后续病理研究提供可视化依据。
本示例以一幅图象经过一层卷积输出为例进行。在自己运行时可以多加几层卷积和调整相应的输出通道等操作。
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
import math
from torchvision import transforms
# 定义一个卷积层
conv_layer = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=2, padding=1)# 输入图像(随机生成)
image = Image.open("../11111.jpg")
#input_image = torch.randn(1, 3, 224, 224)
transform = transforms.Compose([transforms.ToTensor()
])# 对图像应用转换操作
input_image= transform(image)
input_image = input_image.unsqueeze(0)# 通过卷积层获取特征图
feature_map = conv_layer(input_image)batch, channels, height, width = feature_map.shape
blocks = torch.chunk(feature_map[0].cpu(), channels, dim=0)
n = min(32, channels) # number of plots
fig, ax = plt.subplots(math.ceil(n / 8), 8, tight_layout=True) # 8 rows x n/8 cols
ax = ax.ravel()
plt.subplots_adjust(wspace=0.05, hspace=0.05)
for i in range(n):ax[i].imshow(blocks[i].squeeze().detach().numpy()) # cmap='gray'ax[i].axis('off')
plt.savefig('./tezhengtu.jpg', dpi=300, bbox_inches='tight')
plt.show()
plt.close()
代码解释:
步骤1 定义一个卷积层(Convolutional Layer):conv_layer,该卷积层有3个输入通道,64个输出通道, kernel size为3x3,步长为2,填充为1。
步骤2输入图像:这里使用了一个真实的图像文件路径"…/11111.jpg"作为输入图像。你可以替换为你自己的图像文件路径。
步骤3定义一个图像转换操作(transform)序列,用于将输入图像转换为PyTorch需要的张量格式。这里仅包含一个操作:转换为张量(ToTensor)。
步骤4对输入图像应用转换操作:通过transform(image)将图像转换为PyTorch张量,然后通过unsqueeze(0)增加一个额外的维度(batch维度),使得输入图像的形状变为(1, 3, H, W)。
步骤5通过卷积层获取特征图:将输入图像传递给卷积层conv_layer,得到特征图feature_map。
步骤6将特征图转换为numpy数组:为了可视化,需要将特征图从PyTorch张量转换为numpy数组。这里使用了detach().numpy()方法来实现转换。
步骤7获取特征图的一些属性:使用shape属性获取特征图的batch大小、通道数、高度和宽度。
步骤8分块显示特征图:为了在图像中显示特征图,需要将特征图分块处理。这里使用torch.chunk方法将特征图按照通道数分割成若干块,每一块代表一个通道的输出。然后使用Matplotlib库中的subplot功能将分块后的图像显示在画布上。具体地,这段代码将分块后的图像显示在一个8x8的画布上,每个小图的尺寸为256x256像素(因为最后一块图像可能不足8个通道,所以使用了最少的小图数量)。最后使用savefig方法保存图像到文件,并关闭Matplotlib的画布。
输入的图像为:
经过一层卷积之后的特征图为:
相关文章:

【Python】【Torch】神经网络中各层输出的特征图可视化详解和示例
本文对神经网络各层特征图可视化的过程进行运行示例,方便大家使用,有助于更好的理解深度学习的过程,尤其是每层的结果。 神经网络各层特征图可视化的好处和特点如下: 可视化过程可以了解网络对图像像素的权重分布,可…...

接口测试学习路线
接口测试分为两种: 测试外部接口:系统和外部系统之间的接口 如:电商网站:支付宝支付 测试内部接口:系统内部的模块之间的联调,或者子系统之间的数据交互 测试重点:测试接口参数传递的正确性&…...

蓝桥杯官网算法赛(蓝桥小课堂)
问题描述 蓝桥小课堂开课啦! 海伦公式(Herons formula),也称为海伦-秦九韶公式,是用于计算三角形面积的一种公式,它可以通过三条边的长度来确定三角形的面积,而无需知道三角形的高度。 海伦公…...

求集合的笛卡尔乘积
求集合的笛卡尔乘积 一:【实验目的】二:【实验内容】三:【实验原理】四:代码实现: 一:【实验目的】 通过编实现给定集合A和B的笛卡尔积CAA,DAB,EBA,FAAB,GA(A*B). 二:【实验内容】…...

Linux系统常用指令大全(图文详解)
目录 前言 一、UNIX的登录与退出 1、登录 (1)执行格式: (2)步骤 2、退出 二、UNIX命令格式 三、常用命令 1、目录操作 (1)显示目录文件 ls (2)建新目录 …...
基于PLC触摸屏控制的伺服电机绕线机
摘 要 绕线机是专供连续绕制多圈电位器绕阻的专用机床设备。本文介绍了采用 PLC作为主控制机器,触摸屏作为操作界面,步进电机、伺服电机驱动的绕线机系统。描述 了触摸屏的原理、分类和触摸屏人机界面的控制方式,完成了触摸屏人机界面设计。…...
1.8 C语言之参数传递
1.8 C语言之参数传递 一、参数传递 一、参数传递 在C语言中,所有的参数传递都是值传递,也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中。这与其他语言的引用传递有所不同。在C语言中,被…...

【Linux】进程间通信——system V共享内存、共享内存的概念、共享内存函数、system V消息队列、信号量
文章目录 进程间通信1.system V共享内存1.1共享内存原理1.2共享内存数据结构1.3共享内存函数 2.system V消息队列2.1消息队列原理 3.system V信号量3.1信号量原理3.2进程互斥 4.共享内存的使用示例 进程间通信 1.system V共享内存 1.1共享内存原理 共享内存区是最快的IPC形式…...

【黑马甄选离线数仓day05_核销主题域开发】
1. 指标分类 通过沟通调研,把需求进行分析、抽象和总结,整理成指标列表。指标有原子指标、派生指标、 衍生指标三种类型。 原子指标基于某一业务过程的度量值,是业务定义中不可再拆解的指标,原子指标的核心功能就是对指标…...

使用gin 代理 web网页
问web项目的代理,业界常用的方案是nginx做代理,这个是网上最多资料的。 因为我需要做自己的流量转发,也就是所有访问都要经过我的一个流量分发微服务,这和nginx作用冲突了。如果再加个nginx来做第一层方向代理和网页的静态资源代…...

计算器的模拟实现
计算器的模拟实现 一、实验题目:计算器二:实验目的:三:实验内容与实现1:【实验内容】2:【实验实现】1.计算器界面的实现,如下图所示:2:各项功能的实现,如下图…...
CentOS7搭建smb服务器
安装smb sudo yum install samba samba-client samba-common配置smb vim /etc/samba/smb.conf [shared] path /path/to/shared/folder writable yes browsable yes guest ok yes valid users yourname添加smb用户 sudo useradd youname sudo smbpasswd -a youname然后会…...

openEuler 22.03 LTS x86_64 cephadm 部署ceph 16.2.14 未完成 笔记
环境 准备三台虚拟机 10.47.76.94 node-1 10.47.76.95 node-2 10.47.76.96 node-3 下载cephadm [rootnode-1 ~]# yum install cephadm Last metadata expiration check: 0:11:31 ago on Tue 21 Nov 2023 10:00:20 AM CST. Dependencies resolved. Package …...

Java计算时间差,距结束还有几天几小时几分钟
文章目录 1、写法2、备份3、LocalDate、LocalDateTime、Date、String互转 1、写法 //静态方法,传入年月日时分秒 LocalDateTime startTime LocalDateTime.of(2023, 11, 22, 15, 09, 59); LocalDateTime endTime LocalDateTime.of(2023, 11, 30, 0, 0, 0); //计算…...

【云原生 Prometheus篇】Prometheus的动态服务发现机制与认证配置
目录 一、Prometheus服务发现的方式1.1 基于文件的服务发现1.2 基于consul的服务发现1.3 基于 Kubernetes API 的服务发现1.3.1 简介1.3.2 基于Kurbernetes发现机制的部分配置参数 二、实例一:部署基于文件的服务发现2.1 创建用于服务发现的文件2.2 修改Prometheus的…...

ref详解(C#)
本质上来说 ref 的就是把 C/C 指针的那一套又拿回来了,而且还封装成一套自己的玩法。 我想设计者的初心把 ref 的功能限制得死死的,可能也考虑到 C# 是一门面向业务开发的语言,讲究的是做项目快狠准,性能反而不是第一要素&#x…...

运维高级-day01
shell回顾 1、快速生成版权控制信息,具体的内容自己替换 [root scripts]# cat ~/.vimrc autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" func SetTitle() if expand("%:e") sh call setline(1,"#!/bin/bash")…...

含分布式电源的配电网可靠性评估matlab程序
微❤关注“电气仔推送”获得资料(专享优惠) 参考文献: 基于仿射最小路法的含分布式电源配电网可靠性分析——熊小萍 主要内容: 通过概率模型和时序模型分别进行建模,实现基于概率模型最小路法的含分布式电源配电网…...
k8s docker总结特殊点
k8s docker总结特殊点 前言一、docker 的驱动。1、cgroup:(Control Groups)2、日志驱动(log driver)3、存储驱动4、网络驱动: 二、k8s中网络插件(常用calico,次flannel)**Flannel:**…...

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第四套区块链应用后端开发
第四套区块链应用后端开发 环境 : ubuntu20 fisco : 2.8.0 springboot 2.1.1 fisco-java-sdk: 2.7.2 maven 3.8.8 前言 这套后端样题,只涉及调用fisco的系统接口,不涉及此食品溯源项目的业务接口,所以我就直接生成一个springboot项目进行完成此题目。 请提前准备好一…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...