深度学习:基于PyTorch的模型解释工具Captum

深度学习:基于PyTorch的模型解释工具Captum

  • 引言
  • 简介
  • 示例
    • 安装
    • 解释模型的预测
    • 解释文本模型
      • 情绪分析
      • 问答
    • 解释视觉模型
      • 特征分析
      • 特征消融
      • 鲁棒性
    • 解释多模态模型

引言

当我们训练神经网络模型时,我们通常只关注模型的整体性能,例如准确率或损失函数值。然而,理解模型为何做出特定预测,哪些输入特征对模型决策影响最大,对于构建可解释、可信赖和健壮的模型至关重要。为此,Facebook AI研究团队开发了captum库,这是一个开源项目,旨在帮助研究人员和开发人员更好地理解PyTorch模型的运行机制。

简介

Captum(拉丁文"comprehension"的词根,意为理解)是一个开源、可扩展的库,用于构建在 PyTorch 上的模型可解释性。Captum能够与任何PyTorch构建的模型相适配。它提供了多种解释算法,包括Integrated Gradients、Deep Lift、Feature Ablation等。这些算法可以针对单个输出或一组输出应用,并可在CPU或CUDA上运行。Captum还提供了一个交互式可视化工具,让用户能够轻松地观察和比较不同特征的影响。更多详细内容可见官网https://captum.ai/。

示例

以下展示了如何安装和使用captum:

安装

# conda 安装
conda install captum -c pytorch
# pip 安装
pip install captum

解释模型的预测

利用Integrated Gradients算法分析输入对于目标输出的贡献度,并打印出结果。

from captum.attr import IntegratedGradients# 假设model是我们用PyTorch构建和训练好的模型
# input是模型的输入数据
# target是我们想要解释的分类输出ig = IntegratedGradients(model)
attr, delta = ig.attribute(input, target=target, return_convergence_delta=True)
print('Integrated Gradients Attribution:', attr)
print('Convergence Delta:', delta)

解释文本模型

情绪分析

此示例加载预训练的CNN模型使用Integrated Gradients算法对IMDB数据集进行情绪分析。

在这里插入图片描述

问答

此示例使用 Captum 解释用于问答的 BERT 模型,使用 Hugging Face 的预训练模型,并在 SQUAD 数据集上进行了微调,并展示了如何使用 hooks 来检查和更好地理解嵌入和注意力层。
在这里插入图片描述
在这里插入图片描述
此示例使用attribution和Integrated Gradients算法分析注意力矩阵。此分析有助于我们识别不同tokens之间的强交互对,以进行特定模型预测。我们将我们的发现与向量norm进行比较,结果表明attribution分数比向量norm更有意义。
在这里插入图片描述

解释视觉模型

特征分析

此示例加载预训练的CNN模型使用Integrated Gradients和DeepLIFT算法对CIFAR数据集进行特征分析。
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

特征消融

此示例利用分割掩码来定义输入特征的消融组,并展示了这种分析如何帮助理解输入的哪些部分影响模型中的特定目标。
在这里插入图片描述

鲁棒性

此示例将 FGSM 和 PGD 等鲁棒性攻击以及 MinParamPerturbation 和 AttackComparator 等鲁棒性指标应用于在 CIFAR 数据集上训练的模型。除此之外,它还演示了如何将鲁棒性技术与归因算法结合使用。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

解释多模态模型

此示例针对开源视觉问答(VQA)模型,使用Integrated Gradients算法解释了几个测试问题的输出,并分析了模型文本和视觉部分的归因分数。
在这里插入图片描述

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

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

相关文章

推特Twitter有直播功能吗?如何用Twitter直播?

现在各大直播平台已经成为社交媒体营销的一种重要渠道,它让品牌能够即时地与全球受众进行互动。据统计,直播市场正在迅速增长,预计到2028年将达到2230亿美元的规模。在这个不断扩张的市场中,许多社交媒体平台如YouTube、Facebook、…

Docker - 哲学 默认网络和 自定义网络 与 linux 网络类型 和 overlay2

默认网络:不指定 --nerwork 不指定 网络 run 一个容器时,会直接使用默认的网络桥接器 (docker0) 自定义网络:指定 --nerwork 让这两台容器互相通信 的前提 - 共享同一个网络 关于 ip addr 显示 ens160 储存驱动 ov…

为响应国家号召,搜维尔科技开启虚拟仿真实验室设备升级改造服务

近日,国务院发布了关于《推动大规模设备更新和消费品以旧换新行动方案》,该通知的发布表现出国家对于科技创新事业的高度重视。各行各业都在积极响应国家号召,加快数字化转型和设备升级与更新步伐。搜维尔科技为响应国家号召,将开…

C语言例4-24:从键盘输入一个小于1000的自然数,判断其是否是自守数。

自守数是指一个数的平方的尾数等于其自身的自然数,例如25*25625 代码如下: //从键盘输入一个小于1000的自然数,判断其是否是自守数。 //自守数是指一个数的平方的尾数等于其自身的自然数,例如25*25625 //算法分析:由…

electron 打包生成的latest.yml文件名字变成xxx.yml文件名

正常情况是electron每次打包会生成一个latest.yml文件和一个xxx.exe文件,但是当version的名字修改成 这样 后面添加了-beta ,然后生成的文件名字就变成了 beta.yml 更改方法: 在build配置底下添加 "detectUpdateChannel": false…

C++|类封装、类的分文件编写练习:设计立方体类、点和圆的关系

文章目录 练习案例1:设计立方体类CPP代码 练习案例2:点和圆的关系CPP代码 代码总结类的分文件编写 练习案例1:设计立方体类 设计立方体类(Cube) 求出立方体的面积和体积 分别用全局函数和成员函数判断两个立方体是否相等。 CPP代码 class Cube { pub…

鸿蒙(HarmonyOS)Navigation如何实现多场景UI适配?

场景介绍 应用在不同屏幕大小的设备上运行时,往往有不同的UI适配,以聊天应用举例: 在窄屏设备上,联系人和聊天区在多窗口中体现。在宽屏设备上,联系人和聊天区在同一窗口体现。 要做好适配,往往需要开发…

鸿蒙HarmonyOS应用开发之C/C++标准库机制概述

OpenHarmony NDK提供业界标准库 libc标准库、 C标准库 ,本文用于介绍C/C标准库在OpenHarmony中的机制,开发者了解这些机制有助于在NDK开发过程中避免相关问题。 1. C兼容性 在OpenHarmony系统中,系统库与应用Native库都在使用C标准库&#…

集成学习 | 集成学习思想:Stacking思想

目录 一. Stacking 思想 一. Stacking 思想 Stacking(或stacked generalization),是指训练一个模型用于组合(combine)其他各个模型 Stacking有两层第一层是不同的基学习器(classifiers/regressors)第二层是用于组合基学习器的元学习&#xf…

mysql如何存Emoji表情

如何存Emoji表情 背景解决方案一: 如果是自己搭建的数据库,参考如下。 1:先创建数据库,utf8编码2: 修改mysql 的配置文件 /etc/my.cnf 文件3:然后把你的表和字段也要支持utf8md4编码4:修改你连…

鸿蒙开发-UI-交互事件-手势事件

鸿蒙开发-UI-图形-绘制自定义图形 鸿蒙开发-UI-图形-页面内动画 鸿蒙开发-UI-图形-组件内转场动画 鸿蒙开发-UI-图形-弹簧曲线动画 鸿蒙开发-UI-交互事件-通用事件 鸿蒙开发-UI-交互事件-键鼠事件 鸿蒙开发-UI-交互事件-焦点事件 文章目录 前言 一、绑定手势方法 1. gesture …

智能算法-遗传算法 学习笔记

适应度的计算可类别为神经网络的目标函数,但此算法属于无监督学习,宏观来讲为搜寻最优解(梯度)的方式不同? 但神经网络中好像并不存在变异操作(参数矩阵突变)? 交叉的话残差网络ResN…