美文网首页深度学习
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