【发布时间】:2020-10-14 17:10:33
【问题描述】:
我一直在使用 pyTorch 跟踪 LRP 的实现,并希望使用 Tensorflow 和 Keras 对其进行测试。我在 Keras 中使用具有权重 (VGG16) 的相同模型,并且能够使用
成功执行 forward pass 和 element wise division# keras-tensorflow implementation
z = incr(clasifierLayers[l](A[l])) # forward pass step(1)
s = (R[l+1]/z) # Element wise division step(2)
但我在重新创建向后传球时遇到了麻烦。在使用 pyTorch 的原始代码 (LRP) 中,反向传递是使用
# pyTorch implementation
(z*s).sum().backward(); c = A[l].grad
当我尝试使用 tensorflow 查找复制后向传递时,我的梯度返回 None。这是我尝试计算后向传递的代码。
def getGradients(product,layer,l):
with tf.GradientTape() as tape:
tape.watch(product)
a=layers[l](A[l])
gradient = tape.gradient(product, a)
return gradient
c = getGradients((z*s).numpy().sum(),layers[l],l) # backward pass step(3)
谁能告诉我这个实现有什么问题?
提前致谢
【问题讨论】:
标签: tensorflow keras conv-neural-network heatmap