Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleX
提交
fe9a78ea
P
PaddleX
项目概览
PaddlePaddle
/
PaddleX
通知
138
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
43
列表
看板
标记
里程碑
合并请求
5
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleX
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
43
Issue
43
列表
看板
标记
里程碑
合并请求
5
合并请求
5
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
fe9a78ea
编写于
6月 22, 2020
作者:
S
sunyanfang01
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix the interpret doc
上级
bc44ce9d
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
24 addition
and
9 deletion
+24
-9
docs/apis/visualize.md
docs/apis/visualize.md
+6
-4
docs/appendix/interpret.md
docs/appendix/interpret.md
+14
-3
docs/images/lime.png
docs/images/lime.png
+0
-0
docs/images/normlime.png
docs/images/normlime.png
+0
-0
paddlex/interpret/visualize.py
paddlex/interpret/visualize.py
+4
-2
未找到文件。
docs/apis/visualize.md
浏览文件 @
fe9a78ea
...
@@ -146,10 +146,11 @@ paddlex.interpret.normlime(img_file,
...
@@ -146,10 +146,11 @@ paddlex.interpret.normlime(img_file,
dataset=None,
dataset=None,
num_samples=3000,
num_samples=3000,
batch_size=50,
batch_size=50,
save_dir='./')
save_dir='./',
normlime_weights_file=None)
```
```
使用NormLIME算法将模型预测结果的可解释性可视化。
使用NormLIME算法将模型预测结果的可解释性可视化。
NormLIME是利用一定数量的样本来出一个全局的解释。
NormLIME会提前计算一定数量的测试样本的LIME结果,然后对相同的特征进行权重的归一化,这样来得到一个全局的输入和输出的关系
。
NormLIME是利用一定数量的样本来出一个全局的解释。
由于NormLIME计算量较大,此处采用一种简化的方式:使用一定数量的测试样本(目前默认使用所有测试样本),对每个样本进行特征提取,映射到同一个特征空间;然后以此特征做为输入,以模型输出做为输出,使用线性回归对其进行拟合,得到一个全局的输入和输出的关系。之后,对一测试样本进行解释时,使用NormLIME全局的解释,来对LIME的结果进行滤波,使最终的可视化结果更加稳定
。
**注意:**
可解释性结果可视化目前只支持分类模型。
**注意:**
可解释性结果可视化目前只支持分类模型。
...
@@ -159,9 +160,10 @@ NormLIME是利用一定数量的样本来出一个全局的解释。NormLIME会
...
@@ -159,9 +160,10 @@ NormLIME是利用一定数量的样本来出一个全局的解释。NormLIME会
>* **dataset** (paddlex.datasets): 数据集读取器,默认为None。
>* **dataset** (paddlex.datasets): 数据集读取器,默认为None。
>* **num_samples** (int): LIME用于学习线性模型的采样数,默认为3000。
>* **num_samples** (int): LIME用于学习线性模型的采样数,默认为3000。
>* **batch_size** (int): 预测数据batch大小,默认为50。
>* **batch_size** (int): 预测数据batch大小,默认为50。
>* **save_dir** (str): 可解释性可视化结果(保存为png格式文件)和中间文件存储路径。
>* **save_dir** (str): 可解释性可视化结果(保存为png格式文件)和中间文件存储路径。
>* **normlime_weights_file** (str): NormLIME初始化文件名,若不存在,则计算一次,保存于该路径;若存在,则直接载入。
**注意:**
dataset
`
读取的是一个数据集,该数据集不宜过大,否则计算时间会较长,但应包含所有类别的数据。
**注意:**
dataset
`
读取的是一个数据集,该数据集不宜过大,否则计算时间会较长,但应包含所有类别的数据。
NormLIME可解释性结果可视化目前只支持分类模型。
### 使用示例
### 使用示例
> 对预测可解释性结果可视化的过程可参见[代码](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/interpret/normlime.py)。
> 对预测可解释性结果可视化的过程可参见[代码](https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/interpret/normlime.py)。
docs/appendix/interpret.md
浏览文件 @
fe9a78ea
...
@@ -20,9 +20,20 @@ LIME的使用方式可参见[代码示例](https://github.com/PaddlePaddle/Paddl
...
@@ -20,9 +20,20 @@ LIME的使用方式可参见[代码示例](https://github.com/PaddlePaddle/Paddl
## NormLIME
## NormLIME
NormLIME是在LIME上的改进,LIME的解释是局部性的,是针对当前样本给的特定解释,而NormLIME是利用一定数量的样本对当前样本的一个全局性的解释,有一定的降噪效果。其实现步骤如下所示:
NormLIME是在LIME上的改进,LIME的解释是局部性的,是针对当前样本给的特定解释,而NormLIME是利用一定数量的样本对当前样本的一个全局性的解释,有一定的降噪效果。其实现步骤如下所示:
1.
下载Kmeans模型参数和ResNet50_vc网络前三层参数。(ResNet50_vc的参数是在ImageNet上训练所得网络的参数;使用ImageNet图像作为数据集,每张图像从ResNet50_vc的第三层输出提取对应超象素位置上的平均特征和质心上的特征,训练将得到此处的Kmeans模型)
1.
下载Kmeans模型参数和ResNet50_vc网络前三层参数。(ResNet50_vc的参数是在ImageNet上训练所得网络的参数;使用ImageNet图像作为数据集,每张图像从ResNet50_vc的第三层输出提取对应超象素位置上的平均特征和质心上的特征,训练将得到此处的Kmeans模型)
2.
计算测试集中每张图像的LIME结果。(如无测试集,可用验证集代替)
2.
使用测试集中的数据计算normlime的权重信息(如无测试集,可用验证集代替):
3.
使用Kmeans模型对所有图像中的所有像素进行聚类。
对每张图像的处理:
4.
对在同一个簇的超像素(相同的特征)进行权重的归一化,得到每个超像素的权重,以此来解释模型。
(1) 获取图像的超像素。
(2) 使用ResNet50_vc获取第三层特征,针对每个超像素位置,组合质心特征和均值特征
`F`
。
(3) 把
`F`
作为Kmeans模型的输入,计算每个超像素位置的聚类中心。
(4) 使用训练好的分类模型,预测该张图像的
`label`
。
对所有图像的处理:
(1) 以每张图像的聚类中心信息组成的向量(若某聚类中心出现在盖章途中设置为1,反之为0)为输入,
预测的
`label`
为输出,构建逻辑回归函数
`regression_func`
。
(2) 由
`regression_func`
可获得每个聚类中心不同类别下的权重,并对权重进行归一化。
3.
使用Kmeans模型获取需要可视化图像的每个超像素的聚类中心。
4.
对需要可视化的图像的超像素进行随机遮掩构成新的图像。
5.
对每张构造的图像使用预测模型预测label。
6.
根据normlime的权重信息,每个超像素可获不同的权重,选取最高的权重为最终的权重,以此来解释模型。
NormLIME的使用方式可参见
[
代码示例
](
https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/interpret/normlime.py
)
和
[
api介绍
](
../apis/visualize.html#normlime
)
。在使用时,参数中的
`num_samples`
设置尤为重要,其表示上述步骤2中的随机采样的个数,若设置过小会影响可解释性结果的稳定性,若设置过大则将在上述步骤3耗费较长时间;参数
`batch_size`
则表示在计算上述步骤3时,预测的batch size,若设置过小将在上述步骤3耗费较长时间,而上限则根据机器配置决定;而
`dataset`
则是由测试集或验证集构造的数据。
NormLIME的使用方式可参见
[
代码示例
](
https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/interpret/normlime.py
)
和
[
api介绍
](
../apis/visualize.html#normlime
)
。在使用时,参数中的
`num_samples`
设置尤为重要,其表示上述步骤2中的随机采样的个数,若设置过小会影响可解释性结果的稳定性,若设置过大则将在上述步骤3耗费较长时间;参数
`batch_size`
则表示在计算上述步骤3时,预测的batch size,若设置过小将在上述步骤3耗费较长时间,而上限则根据机器配置决定;而
`dataset`
则是由测试集或验证集构造的数据。
...
...
docs/images/lime.png
查看替换文件 @
bc44ce9d
浏览文件 @
fe9a78ea
802.8 KB
|
W:
|
H:
423.0 KB
|
W:
|
H:
2-up
Swipe
Onion skin
docs/images/normlime.png
查看替换文件 @
bc44ce9d
浏览文件 @
fe9a78ea
1.5 MB
|
W:
|
H:
546.2 KB
|
W:
|
H:
2-up
Swipe
Onion skin
paddlex/interpret/visualize.py
浏览文件 @
fe9a78ea
...
@@ -70,8 +70,10 @@ def normlime(img_file,
...
@@ -70,8 +70,10 @@ def normlime(img_file,
normlime_weights_file
=
None
):
normlime_weights_file
=
None
):
"""使用NormLIME算法将模型预测结果的可解释性可视化。
"""使用NormLIME算法将模型预测结果的可解释性可视化。
NormLIME是利用一定数量的样本来出一个全局的解释。NormLIME会提前计算一定数量的测
NormLIME是利用一定数量的样本来出一个全局的解释。由于NormLIME计算量较大,此处采用一种简化的方式:
试样本的LIME结果,然后对相同的特征进行权重的归一化,这样来得到一个全局的输入和输出的关系。
使用一定数量的测试样本(目前默认使用所有测试样本),对每个样本进行特征提取,映射到同一个特征空间;
然后以此特征做为输入,以模型输出做为输出,使用线性回归对其进行拟合,得到一个全局的输入和输出的关系。
之后,对一测试样本进行解释时,使用NormLIME全局的解释,来对LIME的结果进行滤波,使最终的可视化结果更加稳定。
注意1:dataset读取的是一个数据集,该数据集不宜过大,否则计算时间会较长,但应包含所有类别的数据。
注意1:dataset读取的是一个数据集,该数据集不宜过大,否则计算时间会较长,但应包含所有类别的数据。
注意2:NormLIME可解释性结果可视化目前只支持分类模型。
注意2:NormLIME可解释性结果可视化目前只支持分类模型。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录