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
参考资料
[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 实现
网友评论