美文网首页深度学习
Grad-CAM论文阅读与代码实现

Grad-CAM论文阅读与代码实现

作者: 续袁 | 来源:发表于2019-03-05 20:02 被阅读0次

1.显著性

2.代码复现:Grad-CAM-tensorflow

2.1 重要代码解析

tf.Graph.gradient_override_map(op_type_map):返回一个改写gradient函数的上下文,使得针对某些operation,我们可以使用自己的gradient函数。一个图维护这样一个映射关系self._gradient_override_map.

# 先注册一个gradient函数
@tf.RegisterGradient("CustomSquare")
def _custom_square_grad(op, grad):
  # ...

with tf.Graph().as_default() as g:
  c = tf.constant(5.0)
  s_1 = tf.square(c) # 使用tf.square默认的gradient
  with g.gradient_override_map({"Sqaure": "CustomSquare"}):
    s_2 = tf.square(s_2): # 使用自定义的_custom_square_grad函数来计算s_2的梯度

官方文档中只有tf.where(input, name=None)一种用法,在实际应用中发现了另外一种使用方法tf.where(input, a,b),其中a,b均为尺寸一致的tensor,作用是将a中对应input中true的位置的元素值不变,其余元素进行替换,替换成b中对应位置的元素值,下面使用代码来说明:

import tensorflow as tf
import numpy as np
sess=tf.Session()

a=np.array([[1,0,0],[0,1,1]])
a1=np.array([[3,2,3],[4,5,6]])

print(sess.run(tf.equal(a,1)))
print(sess.run(tf.where(tf.equal(a,1),a1,1-a1)))
#输出结果
[[3  -1  -2]
[-3  5   6]]

tf.zeros_like创建一个tensor,所有的元素都设置为0。

2.2 代码复现结果

运行结果

3.代码复现问题解决

3.1 AttributeError: module 'tensorflow.python.ops.gen_nn_ops' has no attribute '_relu_grad'

3.1.1 解决办法

@ops.RegisterGradient("GuidedRelu")
def _GuidedReluGrad(op, grad):
    #return tf.where(0. < grad, gen_nn_ops._relu_grad(grad, op.outputs[0]), tf.zeros_like(grad))  #修改前
    return tf.where(0. < grad, gen_nn_ops.relu_grad(grad, op.outputs[0]), tf.zeros_like(grad))   #修改后

3.2 NotFoundError (see above for traceback): Unsuccessful TensorSliceReader constructor: Failed to find any matching files for resnet_v1_50.ckpt

3.2.1 解决办法

找不到模型文件,要做的事:检查路径,文件是否不存在
文件下载地址:https://github.com/tensorflow/models/tree/master/research/slim

image.png

参考资料

[1] Grad-CAM: Why did you say that? Visual Explanations from Deep Networks via Gradient-based Localization
[2] 【论文翻译】Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization ICCV 2017
[3] Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localizati论文精读及资源整理
[4] Ankush96/grad-cam.tensorflow
[5] 凭什么相信你,我的CNN模型?(篇一:CAM和Grad-CAM)
[6] 凭什么相信你,我的CNN模型?(篇二:万金油LIME)

代码解读

[1] TensorFlow函数:tf.where
[2] tenflow 入门 tf.where()用法

代码复现

[1] insikk/Grad-CAM-tensorflow 很好
[2] Ankush96/grad-cam.tensorflow
[3] jacobgil/keras-grad-cam

[4] Cloud-CV/Grad-CAM
[5] gradcam在线演示

[7] Beyond Sparsity: Tree Regularization of Deep Models for Interpretability
[8] CAM 和 Grad-CAM 实现

相关文章

网友评论

    本文标题:Grad-CAM论文阅读与代码实现

    本文链接:https://www.haomeiwen.com/subject/psfhuqtx.html