理解CNN模型如何学习

        深度学习模型常常被认为是不可解释的。但是人们正在探索不同的技术来解释这些模型内发生了什么。对于图像,由卷积神经网络学习的特征是可解释的。我们将探索两种流行的技术来理解卷积神经网络。

可视化中间层的输出

        可视化中间层的输出将有助于我们理解输入图像如何在不同层之间进行转换。通常,每层的输出称为激活(activation)。为了可视化,我们需要提取中间层的输出,可以用几种不同的方式完成提取。PyTorch提供了一个名为register_forward_hook的方法,它允许传入一个可以提取特定层输出的函数。
        默认情况下,为了以最佳方式使用内存,PyTorch 模型仅存储最后一层的输出。因此,在检查中间层的激活之前,需要了解如何从模型中提取输出。我们先看看下面用于提取的代码,然后再进行详细介绍:

vgg = models.vggl6(pretrained=True).cuda()
class LayerActivations():features=Nonedef init (self,model,layer num):self.hook = model[layer num].register forward hook(self.hook fn)def hook fn(self,module,input,output):self.features =output.cpu()def remove(self):self.hook.remove()
conv_out = LayerActivations(vgg.features,0)
o = vgg(Variable(img.cuda()))
conv_out.remove()
act = conv_out.features

        首先创建一个预先训练的VGG模型,并从中提取特定层的输出。LayerActivations类指示PyTorch将一层的输出保存到features变量。让我们来看看LayerActivations类中的每个函数。
        _init_函数取得模型以及用于将输出提取成参数的层的编号。我们在层上调用register_forward _hook方法并传入函数。当PyTorch 进行前向传播时——也就是说,当图像通过层传输时——调用传给register_forward_hook方法的函数。此方法返回一个句柄,该句柄可用于注销传递给register _forward_hook方法的函数。
        register_forward_hook方法将3个值传入我们传给它的函数。参数module允许访问层本身。第二个参数是 input,它指的是流经层的数据。第三个参数是output,它允许访问层转换后的输入或激活。将输出存储到LayerActivations类中的features 变量。
        第三个函数取得_init_函数的钩子并注销该函数。现在可以传入正在寻找的激活(activation)的模型和层的编号。让我们看看为图5.22创建的不同层的激活。

        可视化第一个卷积层创建的激活和使用的代码:

fig=plt.figure(figsize=(20,50))
fig.subplots_adjust(left=0,right=l,bottom=0,top=0.8,hspace=0,wspace=0.2)
for i in range(30):ax = fig.add_subplot(12,5,i+l,xticks=[],yticks=[])ax.imshow(act[0][i])

        可视化第五个卷积层创建的一些激活,如图5.23所示。

        来看最后一个 CNN 层,如图5.24所示。
        从不同的层生成的激活来看,可以看出前面的层检测线条和边缘,最后的层倾向于学习更高层次的特征,而解释性较差。在对权重可视化之前,让我们看看在ReLU层之后特征平面或激活如何自我表示。所以,让我们可视化第二层的输出。

        如果快速查看图5.24第二行中的第5个图像,它看起来像是滤波器正在检测图像中的眼睛。当模型不能执行时,这些可视化技巧可以帮助我们理解模型可能无法正常工作的原因。

CNN层的可视化权重

        获取特定层的模型权重非常简单。可以通过state_dict函数访问所有模型权重。state_dict函数返回一个字典,其中键是层,值是权重。以下代码演示了如何为特定层拉取(pull)权重并将其可视化:

vgg.state_dict().keys()
cnn_weights = vgg.state_dict()['features.0.weight'].cpu()

        上述代码提供了如图 5.25 所示的输出。

        每个框表示大小为3x3的滤波器的权重。每个滤波器都经过训练以识别图像中的某些模式。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JupyterLab使用指南(七):JupyterLab使用 LaTeX 生成数学公式

在 JupyterLab 中,可以使用 LaTeX 语法生成复杂的数学公式。JupyterLab 内置对 LaTeX 的支持,使得我们可以方便地在 notebook 中编写和展示数学公式。以下是详细的步骤和示例。 1. 使用 LaTeX 生成数学公式 LaTeX 是一种专门用于排版数学公式的语言。J…

Stable Diffusion 插件安装与推荐,助力你的AI绘图

在上一篇文章我们安装了Stable Diffusion ,这篇文章我们来安装Stable Diffusion的插件 Stable Diffusion的插件是绘画中重要的一环,好的插件可以让你的绘画更加得心应手 中英双语插件 为什么要安装中英双语插件呢,不能只安装中文插件吗&…

安卓应用开发学习:获取导航卫星信息

一、引言 我昨天写了《安卓应用开发学习:获取经纬度及地理位置描述信息》日志,今天再接再厉,记录一下跟着《Android App 开发进阶与项目实战》一书,实现获取导航卫星信息,并在手机上显示的功能的情况。先上实现后的在…

Redis的持久化方式和注意点

redis持久篇 两种持久化技术: AOF日志和RDB快照 Redis默认会开启RBD快照 AOF:持久化只会记录写操作命令。 是一种日志,写入到文件,有相应的格式文本 就是 Redis 里的AOF(Append Only File)持久化功能,注意只会记录写操作命令…

决定马萨诸塞州版图的关键历史事件

决定马萨诸塞州版图的关键历史事件: 1. 早期探索与*民定居:17世纪初,英国清教徒为寻求宗教自由,乘坐“五月花号”到达新大陆,并于1620年在现在的普利茅斯建立了第一个永久性英国*民地。随后,更多的英国*民…

LKD-Net: Large Kernel Convolution Network for Single Image Dehazing

LKD-Net:用于单幅图像去噪的大型核卷积网络 摘要 基于深度卷积神经网络(CNN)的单幅图像去噪方法已经取得了很大的成功。以往的方法致力于通过增加网络的深度和宽度来提高网络的性能。目前的方法侧重于增加卷积核的大小,以受益于更大的接受野来增强其性能…

昇思25天学习打卡营第1天|新手上路

这里写自定义目录标题 打卡昇思MindSpore扫盲快速入门 打卡 昇思MindSpore扫盲 第一节基本是一个mindspore的科普扫盲。大概介绍一通mindspore的一些架构,feature,以及其对比于其他同类框架的优势。简单扫读了一遍大概有点印象直接跳过。 快速入门 这…

Vue 3 中处理文件上传和响应式更新

Vue 3 中处理文件上传和响应式更新 一、前言1.创建文件上传组件2.解释代码3.在主应用中使用文件上传组件4.总结 一、前言 在现代 web 开发中,文件上传是一个常见需求。本文将详细介绍如何在 Vue 3 中处理文件上传,并确保上传后的文件列表能够响应式更新…

如何把图片转换成pdf格式?图片转PDF方法分享

如何把图片转换成pdf格式?图片转换为PDF格式的重要性不言而喻。PDF文件不仅能够在各种操作系统和设备上保持一致的显示效果,还能确保图片内容的清晰度和质量不受损害。此外,PDF格式支持加密和权限设置,可以保护图片内容不被轻易篡…

FireFox 编译指南2024 Windows10篇-环境准备(一)

1. 引言 在开源浏览器项目中,Firefox因其高性能和灵活性而备受开发者青睐。为了在本地环境中编译和定制Firefox,开发者需要做好充分的环境准备工作。这不仅是编译成功的基础,也是后续调试、优化和二次开发的关键步骤。 编译Firefox是一个复…

深入剖析Tomcat(十二) 详解StandardContext

StandardContext是Context容器的一个标准实现,一般情况下,Tomcat都是使用StandardContext类来创建Context容器。前面讲过,Context容器代表了一个Web应用,Tomcat本身支持部署多个应用,相应的每个应用都会有一个Standard…

实用软件下载:ABBYY Finereader 15最新安装包及详细安装教程

数据表明FineReader PDF提供实用、简易的工具,将纸质文档和PDF结合起来,提高了数字工作场所的效率。我们都知道 即时背景识别:使不可搜索的PDF能够在工作中立即使用。值得一提的是文档转换更精准:OCR技术,它提高了PDF转换、布局保…

基于STM32的简易计算器proteus仿真设计(仿真+程序+设计报告+讲解视频)

基于STM32的简易计算器proteus仿真设计 讲解视频1.主要功能2. 仿真3. 程序4. 设计报告5. 资料清单&下载链接 基于STM32的简易计算器proteus仿真设计(仿真程序设计报告讲解视频) 仿真图proteus 8.9 程序编译器:keil 5 编程语言:C语言 …

深入JVM:详解JIT即时编译器

文章目录 深入JVM:详解JIT即时编译器一、序言二、基础概念1、何为JIT即时编译2、热点代码 三、HotSpot内置的即时编译器1、C1编译器2、C2编译器3、分层编译3.1 协作流程 四、常见JIT优化技术1、方法内联2、逃逸分析(1)同步锁消除(…

数据结构:栈和队列详解

栈 栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出LIFO(Last In First Out)的原则。大家可以理解为…

Day60 代码随想录打卡|回溯算法篇---组合

题目(leecode T77): 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 方法:本题最直观的解法是使用暴力for循环遍历法,根据k的大小定for循环的嵌套次数&…

Posix消息队列使用总结

Posix在线文档: The Single UNIX Specification, Version 2 (opengroup.org) Linux系统中提供了两种不同接口的消息队列: POSIX消息队列。POSIX为可移植的操作系统接口。System V消息队列。System V 是 AT&T 的第一个商业UNIX版本(UNIX System III)的…

[Python人工智能] 四十六.PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解合如何利用keras和tensorflow构建基于注意力机制的CNN-BiLSTM-ATT-CRF模型,并实现中文实体识别研究。这篇文章将介绍PyTorch入门知识。前面我们的Python人工智能主要以TensorFlow和Keras为主,…

【Linux】进程间通信_4

文章目录 七、进程间通信1. 进程间通信分类systeam V共享内存消息队列信号量 未完待续 七、进程间通信 1. 进程间通信分类 systeam V共享内存 进程间通信的本质就是让不同进程看到同一份资源。而systeam V是通过让不同的进程经过页表映射到同一块内存空间(操作系…

LED显示屏中什么是静态驱动?什么是扫描驱动?两者的区别是什么?

随着科技的飞速发展,LED显示屏作为现代信息显示技术的重要组成部分,正以其独特的优势引领着显示行业的革新。近日,LED显示屏市场呈现出蓬勃的发展态势,技术创新不断推动行业向前发展,让LED显示屏无论是在商场的广告牌、…