理解CNN模型如何学习

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

可视化中间层的输出

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

vgg = models.vggl6(pretrained=True).cuda()
class LayerActivations():
    features=None
    def 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.mfbz.cn/a/744668.html

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

相关文章

办公软件的答案?ONLYOFFICE 桌面应用编辑器会是最好用的 Office 软件?ONLYOFFICE 桌面编辑器使用初体验

文章目录 📋前言🎯什么是 ONLYOFFICE🎯 主要功能介绍及 8.1 新功能体验🎯 在线体验📝最后 📋前言 提到办公软件,大家最常用的可能就是微软的 Microsoft Office 和国产的 WPS Office。这两款软件…

使用API有效率地管理Dynadot域名,为文件夹中的域名进行域名停放

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

解锁高效办公:ONLYOFFICE新版本8.1功能揭秘与个人实战体验

文章目录 💯ONLYOFFICE 桌面编辑器 8.1 ✍1 新增功能介绍✍2 轻松编辑器PDF文件🍓2.1 PDF新增编辑器操作🍓2.2 PDF新增表单操作 ✍3 用幻灯片版式快速修改幻灯片✍4 无缝切换文档编辑、审阅和查看模式✍5 改进从右至左语言的支持 & 新的本…

C++——布隆过滤器

目录 布隆过滤器的提出 布隆过滤器的概念 布隆过滤器的基本原理和特点 布隆过滤器的实现 布隆过滤器的插入 布隆过滤器的查找 布隆过滤器的删除 布隆过滤器的优点 布隆过滤器的缺陷 布隆过滤器使用场景 布隆过滤器的提出 在注册账号设置昵称的时候,为了保证…

【已解决】SpringBoot图片更新需重启服务器才能显示

问题描述 1、更新头像,并跳转回列表页,发现显示不出来 2、但是前端获取用户头像的信息是在加载页面就会被调用的,同时前端也不存在所谓的缓存问题,因为没有动这部分代码。 但查看响应是能获得正确的信息(前端打印图片…

Docker 下载与安装以及配置

安装yum工具 yum install -y yum-ulits配置yum源 阿里云源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装Docker 17.03后为两个版本: 社区版(Community Edition,缩写为 CE&#x…

内网一键部署k8s-kubeshpere,1.22.12版本

1.引言 本文档旨在指导读者在内网环境中部署 Kubernetes 集群。Kubernetes 是一种用于自动化容器化应用程序部署、扩展和管理的开源平台,其在云原生应用开发和部署中具有广泛的应用。然而,由于一些安全或网络限制,一些组织可能选择在内部网络…

【踩坑】修复循环设置os.environ[‘CUDA_VISIBLE_DEVICES‘]无效

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 问题示例 for gpus in [0, 1, 2, 3, 4, 5, 6, 7]:os.environ[CUDA_VISIBLE_DEVICES] gpusprint(torch.cuda.get_device_name(0)) 始终将使用第…

专业技能篇---计算机网络

文章目录 前言计算机网络基础一、网络分层模型 HTTP一、从输入URL到页面显示发生了什么?二、Http的状态码有哪些?三、 HTTP与HTTPS有什么区别?四、URI 和 URL 的区别是什么?五、Cookie和Session有什么区别?六、GET与POST WebSock…

期货投机的操作

期货投机是一种高风险、高回报的投资方式,吸引着众多投资者参与。将深入探讨期货专业投机的操作秘诀,帮助投资者掌握必要的知识和技巧,在期货市场中驰骋。 一、期货专业投机的本质 期货投机是利用期货合约进行买卖,以赚取差价的一…

Diffusion Mamba:用于CT到MRI转换的Mamba扩散模型

Diffusion Mamba:用于CT到MRI转换的Mamba扩散模型 提出背景拆解左侧:整体框架中间:Mamba块的细节右侧:螺旋扫描的细节 提出背景 论文:https://arxiv.org/pdf/2406.15910 代码:https://github.com/wongzbb…

JAVA【案例5-2】模拟默认密码自动生成

【模拟默认密码自动生成】 1、案例描述 本案例要求编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。 2、案例目的 (1&#xff09…

超简单的nodejs使用log4js保存日志到本地(可直接复制使用)

引入依赖 npm install log4js 新建配置文件logUtil.js const log4js require(log4js);// 日志配置 log4js.configure({appenders: {// 控制台输出consoleAppender: { type: console },// 文件输出fileAppender: {type: dateFile,filename: ./logs/default, //日志文件的存…

【详述】BP神经网络建模流程一步一步详述

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、BP神经网络的建模流程二、BP神经网络的建模分步讲解2.1.数据归一化2.2.数据划分2.3.网络结构设置2.4.网络训练2.5.训练效果评估 本文梳理BP神经网络的建模流程,供大家建模时进行借鉴。 一、BP神经…

循环神经网络——RNN

循环神经网络 在之前NLP基础章节-语言模型中我们介绍了 n n n 元语法,其中单词 x t x_t xt​ 在时间步 t t t 的条件概率仅取决于前面 n n n 个单词,若是想要将之前单词的影响也加入那么模型参数数量会指数级增长。但是可能之前的单词存在重要的信息…

进阶篇08——MySQL管理

系统数据库 常用工具 mysql 客户端工具 mysqladmin 执行管理操作 mysqlbinlog 数据库二进制日志转成文本 mysqlshow 数据库查找 mysqldump 数据库备份 mysqlimport/source 数据库导入

LLM大语言模型-AI大模型全面介绍

简介: 大语言模型(LLM)是深度学习的产物,包含数十亿至数万亿参数,通过大规模数据训练,能处理多种自然语言任务。LLM基于Transformer架构,利用多头注意力机制处理长距离依赖,经过预训…

Python-爬虫 下载天涯论坛帖子

为了爬取的高效性,实现的过程中我利用了python的threading模块,下面是threads.py模块,定义了下载解析页面的线程,下载图片的线程以及线程池 import threading import urllib2 import Queue import re thread_lock threading.RL…

宝塔计划任务调用node程序时,log4js日志保存本地位置会发生变化

接我上一篇文章的情况 超简单的nodejs使用log4js保存日志到本地(可直接复制使用)-CSDN博客 原本应当保存在node项目目录下的日志文件,如果使用宝塔的计划任务来定时执行的话,日志保存路径会发生变化到如下图的位置: 如…

JFrame和JScrollPanel布局初步使用

还不是很了解,做了几个程序; import java.awt.Container; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.border.EmptyBorder;public class pa1 {public static void main(String[] agrs){JF…