使用LRP(Layer-wise relevance propagation)对模型进行解释
安装
- 安装cuda、cudnn,使用conda安装比较方便
- 安装pytorch
- 安装captum
pip install captum
LRP
参考:https://captum.ai/api/lrp.html
- 构建简单的图像分类网络
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision.transforms as transforms
from captum.attr import LRP
from captum.attr import visualization as vizclass ImageClassifier(nn.Module):def __init__(self):super().__init__()# 第一层(卷积层)# 输入频道3, 输出频道6, 卷积3x3self.conv1 = nn.Conv2d(3, 6, 3)# 第二层(卷积层)# 输入频道6, 输出频道16, 卷积3x3self.conv2 = nn.Conv2d(6, 16, 3)# 第三层(全连接层)# 输入维度16x28x28=12544,输出维度 512self.fc1 = nn.Linear(16 * 28 * 28, 512)# 第四层(全连接层)# 输入维度512, 输出维度64self.fc2 = nn.Linear(512, 64)# 第五层(全连接层)# 输入维度64, 输出维度10self.fc3 = nn.Linear(64, 10)def forward(self, x):# 数据先经过第一层卷积层x = self.conv1(x)# 经过激活函数x = F.relu(x)# 数据经过第二层卷积层x = self.conv2(x)# 经过激活函数x = F.relu(x)# 调整数据维度,‘-1’表示自动计算维度x = x.view(-1, 16 * 28 * 28)# 数据经过第三层全连接层x = self.fc1(x)# 数据经过激活函数x = F.relu(x)# 数据经过第四层全连接层x = self.fc2(x)# 数据经过激活函数x = F.relu(x)# 数据经过第五层全连接层,输出结果x = self.fc3(x)return x
- 对ImageClassifier进行解析
net = ImageClassifier()
lrp = LRP(net)
img = cv2.imread('data/'+'0'+'.jpg')
transf = transforms.ToTensor()
img_tensor_1 = transf(img)
img = cv2.imread('data/'+'1'+'.jpg')
transf = transforms.ToTensor() #将图片转换为tensor
img_tensor_2 = transf(img)
input_tensor = torch.stack((img_tensor_1, img_tensor_2),0) #将两个3*32*32拼接成2*3*32*32的数组
# Attribution size matches input size: 3x3x32x32(batch*通道数*宽*高)
attribution = lrp.attribute(input_tensor, target=5) #目标类别是5
- 对结果进行可视化。由于是对一个batch进行解释的,所以要将返回的结果进行分割。
attri_img1, attri_img2 = attribution.split(1, 0) #将一个batch的tensor分割为两张图的tensor
attri_img1 = attri_img1.reshape(3,32,32) #去掉第一个维度
attri_img2 = attri_img2.reshape(3,32,32) #去掉第一个维度
print(attri_img1.size())
print(attri_img2.size())
default_cmap = LinearSegmentedColormap.from_list('custom blue',[(0, '#ffffff'),(0.25, '#000000'),(1, '#000000')], N=256)
#可视化
_ = viz.visualize_image_attr(np.transpose(img_tensor_1.squeeze().cpu().detach().numpy(),(1,2,0)),np.transpose(attri_img1.squeeze().cpu().detach().numpy(),(1,2,0)),method='heat_map',cmap=default_cmap,show_colorbar=True,sign='positive',outlier_perc=1)
_ = viz.visualize_image_attr(np.transpose(img_tensor_2.squeeze().cpu().detach().numpy(),(1,2,0)),np.transpose(attri_img2.squeeze().cpu().detach().numpy(),(1,2,0)),method='heat_map',cmap=default_cmap,show_colorbar=True,sign='positive',outlier_perc=1)
原图
解释图
后续继续更新解释图和原图中的对应关系,欢迎关注
使用LRP(Layer-wise relevance propagation)对模型进行解释相关推荐
- 【可解释论文阅读】13.LRP(Layer-wise relevance propagation相关性分数逐层传播)
On Pixel-Wise Explanations for Non-Linear Classifier Decisions by Layer-Wise Relevance Propagation 期 ...
- 【阅读笔记】应用LRP,通过将相关性从模型的输出层反向传播到其输入层来解释基于RNN的DKT模型(一)
提示:Towards Interpretable Deep Learning Models for Knowledge Tracing将重点放在应用分层相关传播(LRP)方法,通过将相关性从模型的输出 ...
- 【阅读笔记】应用LRP,通过将相关性从模型的输出层反向传播到其输入层来解释基于RNN的DKT模型(二)
提示:Interpreting Deep Learning Models for Knowledge Tracing与Towards Interpretable Deep Learning Model ...
- OSI七层模型具体解释
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最基本的功能就是帮助不同类型的主机实现传输数据 . 完毕中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...
- Facebook开源模型可解释库Captum,这次改模型有依据了
作者 | Narine Kokhlikyan, Vivek Miglani, Edward Wang, Orion Reblitz-Richardson 译者 | Rachel 出品 | AI科技大本 ...
- 【精品】机器学习模型可解释的重要及必要性
导语:不管你是管理自己的资金还是客户资金,只要你在做资产管理,每一步的投资决策都意义重大,做技术分析或基本面分析的朋友很清楚地知道每一个决策的细节,但是通过机器学习.深度学习建模的朋友可能就会很苦恼, ...
- R数据分析:交叉滞后模型非专业解释
今天继续写交叉滞后模型,本文大部分内容参考自文献:Kearney, Michael. (2017). Cross-Lagged Panel Analysis. 所以不论自己写的怎么样都建议大家去瞅瞅原 ...
- 模型中各变量对模型的解释程度
在建立一个模型后,我们会关心这个模型对于因变量的解释程度,甚至想知道各个自变量分别对模型的贡献有多少.对于非线性模型,如 Random Forest 和 XGBoost 等由于其建模过程就是筛选变量的 ...
- 关于OSI七层模型详细解释
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...
最新文章
- JDBC连接各种数据库方法
- C++ sizeof 使用规则及陷阱分析【转】
- 【网络安全】Metasploit生成的Shellcode的导入函数解析以及执行流程分析(2)
- C#调用SSIS包及读取DataReader目标
- android仿ios弹框_在“提示”框中:iOS外观(在Android上运行),Google Maps作为Time Machine,下载Wii游戏保存...
- 数据库创建(利用写好的数据库表生成创建表的sql语句+利用生成的数据库创建表加同步数据sql)
- 看完这篇还不懂 MySQL 主从复制,可以回家躺平了~
- URAL - 1966 - Cycling Roads(并检查集合 + 判刑线相交)
- ArchLinux安装配置
- prototype.js学习(3)函数绑定
- 树莓派安装qq linux,在树莓派上安装Ubuntu Core
- 计算机软件产品类退税,软件产品增值税退税政策详解.doc
- 开口式霍尔电流传感器如何助力直流配电改造?
- 程序员月入好几万?10年老程序员告诉你真实的情况!!
- cuda8.0 出错:/usr/bin/ld: 找不到 -lGL【转】
- winform 图片按钮
- 博图14软件安装顺序_博图v14安装顺序和教程
- spring多参java注解_spring参数注解校验
- C语言strcpy()函数,字符数组复制
- 原生JS仿造华为商城案例-实现了简单页面-两种轮播图思路的实现-动态展示数据
热门文章
- SpringCloudAlibaba - Nacos (1) 服务治理
- Failed to run the WC DB work queue associated with
- 按键精灵——键盘鼠标
- html图片排列布局下面字_div+css(ul li)实现图片上文字下列表布局
- WIN10待机睡眠不关USB电源、进不了睡眠S3、没有电源选项、节电模式、电脑漂,已解决
- Establishing SSL connection without server's identity verification is not recom
- websocket粘包处理
- excel组合汇总_Excel汇总20150525
- 学了百度竞价的那些sem最后都怎么样了?
- android平分布局的隐藏,Android布局 平分界面