什么用以及是什么
这个比较难以理解,尤其是实现部分的代码,因为需要对卷积核有更进一步的理解。
- 目的
- 我想知道这么多个filter(通道,卷积核,下文不做区分),哪几个更重要,我想知道它们对于结果的贡献
- 我想知道输入的一个数据案例中哪一部分更加重要
- 原理简图
- 输入对每一个通道进行求导,得到输出对各个通道梯度,可以视为通道对结果的贡献权重
- 让所有通道 * 权重,权重越大,通道输出就会放大,反之,通道输出就会缩小
- 全通道叠加,得到14 * 14的统一通道,通道上每个位置都是各个通道的加权和
基本步骤就是上述,其实主要是理解两点:
- 想知道某个东西对结果的影响权重,那就对它求导就可以,导数的意义就在这里
- 得到各个通道的权重,让所有通道输出加权和即可
代码和注释
下面代码中关键的输出都注释了,理解需要。
african_elephant_output = model.output[:, 386]
# <tf.Tensor 'strided_slice_2:0' shape=(?,) dtype=float32>
# model.output <tf.Tensor 'predictions/Softmax:0' shape=(?, 1000) dtype=float32>
last_conv_layer = model.get_layer('block5_conv3')