首页 > 其他分享 >关于卷积神经网络特征可视化

关于卷积神经网络特征可视化

时间:2024-03-19 14:29:06浏览次数:14  
标签:解释 卷积 ReLU 神经网络 可视化 图像 激活 方法

卷积神经网络CNN,一个大号/深层的,现代的,黑箱的,信号/图像处理器。

简单讲解如何将图像输入到卷积神经网络CNN并显示网络不同层的激活图,并通过将激活图与原始图像进行比较以探索网络学习哪些特征

本例来源于Mathworks公司的大佬,需要用到MATLAB Neural Network Toolbox(TM), Image Processing Toolbox 和 the Neural Network Toolbox(TM) Model _for AlexNet Network_.

加载预训练模型和数据

加载预训练的AlexNet 网络。如果Neural Network Toolbox Model _for AlexNet Network_没有安装,则MATLAB会提供下载链接。

net = alexnet;

读取一张图片并显示

imshow(im)
imgSize = size(im);
imgSize = imgSize(1:2);

图片

可视化网络结构

显示网络的层信息,观察第一个卷积层有 96 个通道

net.Layers

ans =

25x1 Layer array with layers:

1 'data' Image Input 227x227x3 images with 'zerocenter' normalization
2 'conv1' Convolution 96 11x11x3 convolutions with stride [4 4] and padding [0 0]
3 'relu1' ReLU ReLU
4 'norm1' Cross Channel Normalization cross channel normalization with 5 channels per element
5 'pool1' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]
6 'conv2' Convolution 256 5x5x48 convolutions with stride [1 1] and padding [2 2]
7 'relu2' ReLU ReLU
8 'norm2' Cross Channel Normalization cross channel normalization with 5 channels per element
9 'pool2' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]
10 'conv3' Convolution 384 3x3x256 convolutions with stride [1 1] and padding [1 1]
11 'relu3' ReLU ReLU
12 'conv4' Convolution 384 3x3x192 convolutions with stride [1 1] and padding [1 1]
13 'relu4' ReLU ReLU
14 'conv5' Convolution 256 3x3x192 convolutions with stride [1 1] and padding [1 1]
15 'relu5' ReLU ReLU
16 'pool5' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]
17 'fc6' Fully Connected 4096 fully connected layer
18 'relu6' ReLU ReLU
19 'drop6' Dropout 50% dropout
20 'fc7' Fully Connected 4096 fully connected layer
21 'relu7' ReLU ReLU
22 'drop7' Dropout 50% dropout
23 'fc8' Fully Connected 1000 fully connected layer
24 'prob' Softmax softmax
25 'output' Classification Output crossentropyex with 'tench', 'goldfish', and 998 other classes

显示第一个卷积层的激活图

act1 = activations(net,im,'conv1','OutputAs','channels');
sz = size(act1);
act1 = reshape(act1,[sz(1) sz(2) 1 sz(3)]);

使用mat2gray函数对输出进行规范化,并显示8 x 12的96张图像,层中的每个通道对应一张图像。

montage(mat2gray(act1),'Size',[8 12])

图片

指定通道的激活图

调整通道 32 中激活的大小,使其与原始图像相同,并显示激活图

act1ch32 = act1(:,:,:,32);
act1ch32 = mat2gray(act1ch32);
act1ch32 = imresize(act1ch32,imgSize);
imshowpair(im,act1ch32,'montage')

图片

查找最强的激活通道

[maxValue,maxValueIndex] = max(max(max(act1)));
act1chMax = act1(:,:,:,maxValueIndex);
act1chMax = mat2gray(act1chMax);
act1chMax = imresize(act1chMax,imgSize);
imshowpair(im,act1chMax,'montage')

图片

下面研究更深的网络层的激活

以conv5层的激活图为例,代码与上面类似

图片

conv5层的最强激活图

图片

进一步查看通道3和通道5。

图片

可视化relu5层的激活值

图片

与conv5层的激活相比,relu5层清晰地精确定位图像中具有强烈激活的面部区域特征。

注意:先检查MATLAB是否安装了预训练的AlexNet ,输入net=AlexNet进行验证。如果Neural Network Toolbox Model for AlexNet Network没有安装,则MATLAB会提供按照链接。

完整代码:关于卷积神经网络特征可视化

卷积神经网络特征可视化存在的难点是什么

1)对于可视化方法,仍存在噪声、稳定性、解释能力有限等问题。

通过对多种可视化方法的实验比较发现,多数可视化方法生成的热力图含有一定的噪声,噪声产生的原因仍没有权威统一的解释。同时,面对不同图像时的可视化效果不尽相同,有些图像可能直接导致可视化方法的失效,而失效的原因尚不清楚,仍有待进一步的探究。此外,面对复杂背景条件的图像、多目标场景、小目标图像等,受限于模型本身在面对这些情形时的性能约束,可视化方法的解释效果并不一定好。未来可能的研究趋势是将可视化方法与其他解释方法的结合,从不同侧面不同角度解释模型,从而缓解单一可视化方法解释效果受限的问题。

2)对于可视化效果的评估,仍欠缺标准统一的评估方法。

目前很难找到适用于大多数可视化方法的评估标准,原因在于许多方法的目标并不相同,也即每种方法对“可解释性”的理解并不相同,导致各种可视化方法的解释结果差别较大。同时,很多可视化方法自身同样缺乏清晰明确的数学与逻辑机理,导致结果难以量化比较。如果可以从“可解释性”的概念出发,统一数个可解释性的标准,那么对于可视化结果的评估也就有了依据。同时,还可以根据可视化方法产生的热力图的特点进行分类评价,每类热力图使用与之适应的评价标准,提升其侧重解释某方面的能力。

3)对于可视化的对象,细粒度的识别模型难以可视化解释。可视化方法多应用于对图像分类、目标定位及场景识别等任务的解释,能够实现对多目标图像中语义级目标的区分。例如,“Cat”和“Dog”虽然同属动物,但是在语义级上属于明显不同的两种动物。而单独对于“Cat”这一动物,实现的不同品种猫的细粒度图像分类,受限于分类网络自身准确性,可视化方法很难找到用于区分目标的细节特征,此时的解释效果非常有限,甚至对于不同的目标可视化效果始终相同。与人们的视觉观察及解释能力相差较远。这一问题或许可以通过视觉解释与语言解释相结合的途径来改善解释效果。对可视化解释难以描述的细微之处,辅助加以自然语言描述形式的解释(比如对猫的颜色、猫耳形状的描述),能够实现更好的解释效果。

4)对于可视化解释的完备性,现有研究中的解释结果与预测结果无法相互印证。

理论上看,一个完备可靠的解释可以使用户从中推理并得到被解释的预测结果,而目前的可视化方法仍不具备这一能力,仅能从预测结果中得到解释结果,而无法根据解释来推断出模型的预测,即两者之间的相互印证关系没有被建立起来。例如,如果可视化方法给出了错误的解释,但这一解释恰好符合用户根据预测结果推测的预期解释,进而使得用户相信了解释的可靠性,这将对其形成误导。此时,若能根据解释结果推断预测结果,发现推断出的预测结果和实际预测结果不相符合,则可通过进一步分析发现其中存在的问题,从而提升用户对可视化方法的信任。

标签:解释,卷积,ReLU,神经网络,可视化,图像,激活,方法
From: https://blog.csdn.net/weixin_39402231/article/details/136814802

相关文章

  • 在cifar-10数据集上t-sne可视化效果最好(๑•̀ㅂ•́)و✧
    还是需要在python上面保存模型,加载模型,然后提取特征保存为mat文件就行了(但我现在只加载了64维特征,4096维特征还没试过,估计也可以但应该会又慢又不好看)①先放matlab可视化t-sne的代码%加载特征数据data=load('10_157_ckpt.pth.mat');features=data.features;labels=dat......
  • 火箭升空,震撼来袭!三维可视化技术揭秘宇宙探索之旅
    在浩瀚无垠的宇宙中,人类对于未知的探索从未停止。每一次火箭发射,都是对宇宙的一次深情告白,都是人类迈向星辰大海的坚定步伐。如今,借助三维可视化技术,我们得以更加直观、生动地感受火箭发射的震撼场景,仿佛置身于那激动人心的瞬间,与火箭一同冲破大气层,探索宇宙的奥秘。 想象一下,......
  • 智慧乡村,数字物联,大数据信息可视化管控平台
    通过打造数据中台,实现模型算法、业务组件、工具组件、地图服务和数据服务等应用支撑服务;以“互联互通、以用促建、共建共享”为原则,应用业界成熟的大数据中台产品,贯穿目录编制、治理、归集、入仓、采集、分析等六大环节,提高数据存储能力、数据处理能力,实现聚数、看数和用数......
  • 界面组件DevExpress WinForms v23.2 - 数据可视化功能升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForms控件日前正式发布了v23.2,此版......
  • Python轻松实现地图可视化(附详细源码) 转载
    大家好,我是J哥,专注原创,致力于用浅显易懂的语言分享爬虫、数据分析及可视化等干货,希望人人都能学到新知识。Python的地图可视化库很多,Matplotlib库虽然作图很强大,但只能做静态地图。而我今天要讲的是交互式地图库,分别为pyecharts、folium,掌握这两个库,基本可以解决你的地图可视化需......
  • 【神经网络算法】一文搞懂GAN(生成对抗网络)
    本文将从GAN的本质、GAN的原理、GAN架构改进三个方面,带您一文搞懂生成对抗网络GenerativeAdversarialNetworks | GAN。一、GAN的本质GAN架构:GAN(GenerativeAdversarialNetworks,生成对抗网络)架构由两个主要组件构成:生成器(Generator)和判别器(Discriminator)。这两个组件在......
  • 【神经网络算法】一文搞懂Tokenization(分词)
    本文将从分词的本质、中英文分词、分词的方法三个方面,带您一文搞懂Tokenization(分词)。一、分词的本质核心逻辑:将句子、段落、文章这种长文本,分解为以字词为单位的数据结构。文本切分:分词是将连续的文本切分为独立的、有意义的词汇单元的过程。这些词汇单元可以是单词、......
  • 069基于CNN卷积神经网络的大豆叶片形态检测小程序版本
    代码下载和视频演示地址:068-069基于CNN卷积神经网络的大豆叶片形态检测pyqt和小程序版本_哔哩哔哩_bilibili效果展示图如下:​代码文件展示如下:​运行01数据集文本生成制作.py可以对data文件夹下图片保存在txt文本中。运行02train.py读取txt中的图片路径和对应标签......
  • 数据可视化-ECharts Html项目实战(3)
    在之前的文章中,我们学习了如何创建堆积折线图,饼图以及较难的瀑布图并更改图标标题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。数据可视化-EChartsHtml项目实战(2)-CSDN博客文章浏览阅读1.2k次,点赞33次,收藏16......
  • 一个用于强化学习的卷积神经网络基础结构示例
    classGomokuNet(nn.Module):def__init__(self,input_dim,action_space):super(GomokuNet,self).__init__()#定义网络层self.conv1=nn.Conv2d(1,32,kernel_size=3,padding=1)self.conv2=nn.Conv2d(32,64,kerne......