卷积网络热图显示

【卷积神经网络可视化】之热度图可视化_visualizing heatmaps of class activation in an ima-CSDN博客

首先安装好对应的安装包,做这个的目的是为了可视化网络模型,查看每一个卷积之后得出的效果,可以通过改变网络模块来改进网络结构。这段代码只是计算最后一层的卷积输出热图。并没有计算每一层的梯度热图。

之后复制上面的代码,开始报错

raise RuntimeError("tf.gradients is not supported when eager execution " RuntimeError: tf.gradients is not supported when eager execution is enabled. Use tf.GradientTape instead.

搜了一下,

tf.gradients is not supported when eager execution is enabled. Use tf.GradientTape instead.-CSDN博客

放在前面。原图片

生成之后的图片

下面对代码进行解析

#导入模型和权重
model = VGG16(weights='imagenet')

这个模型是从keras里面导过来的。这段代码表示从keras的应用模块导入在imagenet数据集上训练好的模型与权重文件,这里训练好的模型有xception,vgg16,vgg19等。

from keras.applications.vgg16 import VGG16

应用 Applications - Keras 中文文档 (keras-zh.readthedocs.io)

我们转到keras中文文档中

ImageNet是一个大型可视化数据库,主要用于视觉对象识别软件的研究,ImageNet包含超过1400万的图像URL,这些URL被手动注释以指示图片中的对象。

并且还有很多模型可以使用

模型准确率

# 查看模型结构
model.summary()

这段代码效果

这里可以看到输入的大小,中间的层的输出大小以及参数。

图像入门 - 【布客】OpenCV 4.0.0 中文翻译 (apachecn.org)

cv.imread("E:/IRTC/ceshi/img.png")

返回的是一个numpy数组。形状会是 (height, width, 3)

# 模型预测
preds = model.predict(x)

返回

结果是预测的 Numpy 数组(或数组列表)

预测结果的形状取决于模型架构和输入数据的形状。例如,如果你的模型是一个用于分类的神经网络,并且你有一个包含 10 个类别的 softmax 输出层,那么对于每个输入样本,predict 方法将返回一个包含 10 个元素的一维数组,表示该样本属于每个类别的概率

模型预测输入可以是一个numpy数组。

# 将结果解码为元组列表 (class, description, probability)
# (一个列表代表批次中的一个样本)
print('Predicted:', decode_predictions(preds, top=3)[0])
# Predicted: [(u'n02504013', u'Indian_elephant', 0.82658225),(u'n01871265', u'tusker', 0.1122357),

top=3的意思是打印出前三个准确率高的结果,低的就别打印出来了。[0]表示返回该批次中第一个图像的预测结果),而这里批次没有,只有一张图片。所以就[0],如果你写出[1],那么还会报错,list index out of range.

# 打印索引
print(np.argmax(preds[0]))

返回沿轴的最大值的索引。也就是返回预测的最大值对应的索引值。

最后的代码如下:我怕原up主删掉嘿嘿

# 这是预测向量中的“非洲象”条目
african_elephant_output = model.output[:, np.argmax(preds[0])]

这行代码是将对应的最大的索引的输出赋值给elephant_output ,output指定输出特定层数的张量,

# 获得VGG-16中的最后一个卷积层
last_conv_layer = model.get_layer('block4_conv3')

在文档中可以看到返回的是一个实例

chat说的很好,就是获取这一层的所有属性以及方法。试一下访问这些属性。不会用

# 求“非洲象”类相对于“block5_conv3”输出特征映射的梯度
grads = K.gradients(african_elephant_output, last_conv_layer.output)[0]

 

from keras.applications.vgg16 import VGG16
from keras.applications.vgg16 import decode_predictions
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from keras import backend as K
import tensorflow as tf
tf.compat.v1.disable_eager_execution()

# 导入VGG-16模型和权重
model = VGG16(weights='imagenet')
# 查看模型结构
model.summary()
# model.get_config()
# 导入图片
src = cv.imread("E:/IRTC/ceshi/img.png")
# 改变图片尺寸适应网络结构
img = cv.resize(src, (224, 224))
# 添加一个维度
x = np.expand_dims(img, 0)

# 模型预测
preds = model.predict(x)
# 打印出top3预测
print('Predicted:', decode_predictions(preds, top=3)[0])
# 打印索引
print(np.argmax(preds[0]))

# 这是预测向量中的“非洲象”条目
african_elephant_output = model.output[:, np.argmax(preds[0])]
# 获得VGG-16中的最后一个卷积层
last_conv_layer = model.get_layer('block4_conv3')
# 求“非洲象”类相对于“block5_conv3”输出特征映射的梯度
grads = K.gradients(african_elephant_output, last_conv_layer.output)[0]
# 改层是一个形状向量(512,),其中每个条目是特定feature map通道上梯度的平均强度
pooled_grads = K.mean(grads, axis=(0, 1, 2))

# 给定一个样本图像,获取输出
iterate = K.function([model.input], [pooled_grads, last_conv_layer.output[0]])
# 这些是这两个量的值,作为Numpy数组,给出了两个大象的样本图像
pooled_grads_value, conv_layer_output_value = iterate([x])

# 将feature map数组中的每个通道乘以关于elephant类的“这个通道有多重要”
for i in range(512):
    conv_layer_output_value[:, :, i] *= pooled_grads_value[i]
# 得到的特征图的通道平均是我们的类激活热图
heatmap = np.mean(conv_layer_output_value, axis=-1)
# 归一化处理
heatmap = np.maximum(heatmap, 0)
heatmap /= np.max(heatmap)
# 数组绘制成图像
plt.matshow(heatmap)
plt.show()

# 调整热图的大小,使其与原始图像大小相同
heatmap = cv.resize(heatmap, (src.shape[1], src.shape[0]))
# 将热图转换为RGB
heatmap = np.uint8(255 * heatmap)
# 转化为伪彩色图像
heatmap = cv.applyColorMap(heatmap, cv.COLORMAP_JET)
# 进行叠加
superimposed_img = heatmap * 0.5 + src
# 将预测结果添加
cv.putText(superimposed_img, decode_predictions(preds)[0][0][1],(50, 50), cv.FONT_HERSHEY_PLAIN, 2.0, (0, 0, 255), 2, 8)
# 保存叠加图像
cv.imwrite('D:/elephant.png', superimposed_img)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/727133.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于JSP的二手交易平台网站

开头语: 你好,我是计算机专业的学长猫哥。如果你对二手交易平台感兴趣或有开发相关需求,欢迎联系我,我的联系方式见文末。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:ECLI…

RH850---注意问题积累--1

硬件规格(引脚分配,内存映射,外设功能规格、电气特性、时序图)和操作说明 注意:有关使用的详细信息,请参阅应用说明 ---------外围函数。。。 1:存储指令完成与后续同步指令的一代 当控制寄存器被存储指令更新时,从存储的执行开始…

3ds MAX 2024版资源包下载分享 3ds Max三维建模软件资源包下载安装

3DSMAX凭借其强大的功能和广泛的应用领域,吸引了无数创作者的青睐。 在游戏制作领域,3DSMAX展现出了无可比拟的优势。从细腻的角色建模到宏大的场景搭建,再到逼真的动画效果和渲染,它都能轻松应对,为游戏世界注入了生动…

通过MindSpore API实现深度学习模型

快速入门 将相应的包逐一导入到项目中,这是制作项目的第一步。 import mindspore from mindspore import nn from mindspore.dataset import vision, transforms from mindspore.dataset import MnistDataset 处理数据集 先从网上下载对应的数据集文件,MindSpor…

【GO】rotatelogs库和sirupsen/logrus库实现日志功能的实践用例

“github.com/sirupsen/logrus” 是一个 Go 语言的日志库,它提供了一种简单、灵活的方式来记录日志。该库的主要特点包括: 支持多种日志输出目标,如控制台、文件等。 支持日志轮转,可以按照时间或文件大小进行轮转。 支持日志格式…

“开放”的大模型到底有多“开放”?!

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则…

FRP内网穿透及多级代理的使用

目录 0、前言 1、场景介绍 2、环境准备 2.1 下载frp 2.2 配置一台VPS 2.3 socks5客户端 2.5 网络环境准备 3、Frp设置 3.1 一层代理 3.1 二层代理 4、Frp总结 0、前言 FRP是比较老牌的也是比较流行的反向代理、内网穿透软件。FRP用途和使用场景可以看官方文档,…

【Linux工具】yum软件包管理器与Vim编辑器的高效运用

目录 Linux 软件包管理器 YUM 什么是软件包 安装工具 rzsz 及注意事项 查看软件包 安装和卸载软件 安装软件 卸载软件 Linux 开发工具 编辑器 - Vim 使用 ​编辑 Vim 与 Vi 的区别 Vim 的基本概念 三种模式 Vim 的基本操作 操作尝试: Vim 命令集解释…

【有趣分享】火柴人VS数学

今天看到一个很有趣的视频,是火柴人VS数学,大家感兴趣的可以看一下: 火柴人 VS 数学(Math)https://www.bilibili.com/festival/jzj2023?bvidBV1ph4y1g75E&spm_id_from333.337.search-card.all.click

[Linux] 系统的基本架构特点

Linux系统的基本结构 Linux is also a subversion of UNIX,it follows the basic structure of UNIX 内核(kernel): 操作系统的基本部分 管理与硬件相关的功能,分模块进行 常驻模块:进程控制IO操作文件\磁盘访问 用户不能直接访问内核 外壳(s…

java学习--集合(大写一.1)

看尚硅谷视频做的笔记 1.集合框架概述 1.1生活中的容器 首先知道集合是来解决什么问题的? 1.1.1内存层面需要针对于多个数据进行存储,此时,可以考虑的容器有:数组、集合类 对于内存层面的来说,断电后数据就不复存…

Python和OpenCV图像分块之图像边长缩小比率是2

import cv2 import numpy as npimg cv2.imread("F:\\mytupian\\xihuduanqiao.jpg") # 低反光 cv2.imshow(image, img) # # 图像分块 # dst np.zeros(img.shape, img.dtype) ratio 2 #图像边长缩小比率是2,也就是一张图片被分割成四份 height, wi…

模型预测控制MPC详解(附带案例实现)

模型预测控制MPC详解(附带案例实现) 文章目录 模型预测控制MPC详解(附带案例实现)1. 最优控制问题2. 什么是MPC3. 二次规划Quadratic Programming4. MPC为什么可以转换成QP问题(推导过程)5. MPC总结5.1 MPC…

希喂、K9、弗列加特主食冻干测评:这次,我们去了美国的实验室

主食冻干你有喂过吗? 作为有七年养猫经验的铲屎官,我强烈推荐,真的值得一试! 在宠物经济蓬勃发展的今天,养猫已经成为了一门学问。人们开始追求更加科学、健康的养猫方式。大量喂养案例表明,传统的商业猫粮…

【ARMv8/v9 GIC 系列 2.1 -- GIC SPI 中断的 pending 和 clear pending 配置】

文章目录 GIC Pending 和 Clear PendingGICD_ISPENDR<n>GICD_ICPENDR<n>参数<n>编号解释使用举例设置中断ID 100为挂起状态清除中断ID 100的挂起状态 代码实现小结 GIC Pending 和 Clear Pending 在ARMv8体系结构中&#xff0c;GICD_ISPENDR<n> 和 GI…

C# WPF入门学习番外篇——C#使用WPF连接MySQL数据库

在 C# 中使用 WPF 连接 MySQL 数据库涉及几个步骤&#xff0c;包括安装必要的库&#xff0c;配置连接字符串&#xff0c;编写代码以执行数据库操作等。下面是一个详细的入门教程&#xff0c;帮助你理解如何在 WPF 应用程序中使用 MySQL 数据库。 1. 安装 MySQL 数据库连接器 …

两个方法,批量替换PPT中的字体

经常制作ppt的朋友可能会遇到需要批量替换字体的情况&#xff0c;如果我们想要更换ppt中的字体&#xff0c;今天分享PPT批量替换字体的两个方法。 方法一&#xff1a; 找到功能栏中的编辑选项卡&#xff0c;点击替换 – 替换字体&#xff0c;在里面选择我们想要替换的字体就可…

Humanize,一个很有人情味的 Python 库

目录 01初识 Humanize 为什么选择 Humanize&#xff1f; 安装 Humanize 02时间与日期的处理 时间差的展示 日期的展示 03数字的处理 数字的单位转换 数字的精确度控制 数字的千位分隔符 04文件大小的处理 文件…

JAVA语言开发的一套(智慧工地监管系统源码)让工地变得更加“聪明”

JAVA语言开发的一套&#xff08;智慧工地监管系统源码&#xff09;让工地变得更加“聪明” 数字智慧工地是指利用物联网、大数据、云计算、人工智能等先进技术&#xff0c;对工地进行全面数字化改造和智能化升级&#xff0c;实现工地管理的精细化、高效化和智能化。它通过实时…

ETO MARKETS:美债高额利息——美国财政的不可承受之重

摘要 2024年&#xff0c;美国联邦政府债务的利息支出预计将达到8920亿美元&#xff0c;这一数字比国防开支还要多&#xff0c;凸显了政府债务和利率上升的双重压力。国会预算办公室&#xff08;CBO&#xff09;预测&#xff0c;利息支出占GDP的比例将继续上升&#xff0c;这意…