对卷积神经网络关注点的可视化——显著图和类激活图

1、针对网络关注点的可视化可以告诉我们卷积神经网络是使用哪一部分的视觉信息做出选择的,这种可视化本质上是将图像区域和神经网络结果联系起来。
2、这里主要有两种方法可以帮助我们了解卷积神经网络的关注点:显著图(Saliency Map)和类激活图(Class Activation Map)。
3、显著图
显著图解决的问题是图像中的像素对图像分类结果的影响。
生成显著图的方法:通过计算输出类别对输入图像求导数来得到。导数的意思是当输入的像素有一些小的改变时,模型输出的类别会发生怎样的变化。如果输入图像中有一部分的区域,对应输出类别在这部分区域的导数是一个很大的正值,那么当这个区域发生轻微改变时,对输出类别的影响就会非常大,这个区域就可以视为输入图像中对模型分类结果有显著影响的区域。
4、类激活图
对输入图像生成类激活的热力图。对于一张图像,这个热力图能够表示每个位置对该类别的重要程度。
对于一个训练好的卷积神经网络而言,输入信息通过多层卷积和池化运算或操作,一个网络的最后一个卷积层包含了最丰富的视觉和语义信息,类激活图就是利用了这最后一个卷积层中的信息。

#对卷积神经网络关注点的可视化 :显著图和类激活图
import keras
from keras.datasets import mnist
from keras.models import load_model
from matplotlib import pyplot as plt
import numpy as np

(x_train,y_train),(x_test,y_test)=mnist.load_data()
image=x_train[1]
plt.imshow(image)
#plt.savefig("image.jpg")

model=load_model('mnist_cnn.h5')
image=np.reshape(image,(1,28,28,1))

from vis.visualization import visualize_saliency
from vis.utils import  utils
from keras import activations


#显著图
'''
model模型
layer_idx输出层在网络中的索引
filter_indices输出的类别 比如数字0的图像 类别就是0
seed_input输入的图像
'''
#通过网络层的名字找到layer_idx
layer_idx=utils.find_layer_idx(model,'dense_2')
#将最后一层的softmax替换为linear
model.layers[layer_idx].activation=activations.linear
model=utils.apply_modifications(model)
#visualize_saliency负责生成显著图
grads=visualize_saliency(model,layer_idx,filter_indices=0,seed_input=image)
plt.imshow(grads,cmap='jet')
plt.savefig("xianzhutu.jpg")

#类激活图
# from vis.visualization import visualize_cam
# layer_idx=utils.find_layer_idx(model,'dense_2')
# #将最后一层的softmax替换为linear
# model.layers[layer_idx].activation=activations.linear
# model=utils.apply_modifications(model)
# grads=visualize_cam(model,layer_idx,filter_indices=0,seed_input=image)
# plt.imshow(grads,cmap='jet')
# plt.savefig("leijihuotu.jpg")
  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用MATLAB对卷积神经网络进行t-SNE可视化处理的步骤如下: 1. 加载卷积神经网络模型和数据集 首先,加载已经训练好的卷积神经网络模型和需要可视化的数据集。例如: ```matlab % 加载已经训练好的卷积神经网络模型 load('myCNN.mat'); % 加载需要可视化的数据集 load('myData.mat'); ``` 2. 提取卷积神经网络的特征向量 使用卷积神经网络对数据集进行前向传播,并提取最后一层卷积层或全连接层的特征向量。例如: ```matlab % 提取卷积神经网络的特征向量 featureLayer = 'fc7'; % 取最后一个全连接层的输出 features = activations(myCNN, myData, featureLayer); ``` 3. 对特征向量进行t-SNE降维 使用MATLAB中的t-SNE函数对特征向量进行t-SNE降维,并得到降维后的数据。例如: ```matlab % 对特征向量进行t-SNE降维 Y = tsne(features); ``` 4. 可视化降维后的数据 使用MATLAB中的scatter函数对降维后的数据进行可视化。例如: ```matlab % 可视化降维后的数据 gscatter(Y(:,1), Y(:,2), myData.Labels); ``` 完整的MATLAB代码示例: ```matlab % 加载已经训练好的卷积神经网络模型 load('myCNN.mat'); % 加载需要可视化的数据集 load('myData.mat'); % 提取卷积神经网络的特征向量 featureLayer = 'fc7'; % 取最后一个全连接层的输出 features = activations(myCNN, myData, featureLayer); % 对特征向量进行t-SNE降维 Y = tsne(features); % 可视化降维后的数据 gscatter(Y(:,1), Y(:,2), myData.Labels); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值