albermax / albermax/innvestigate

Negative outputs in Deconvnet and Guided BackProp

Open
#235 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
1.3k
Forks
230
PR merge metrics
No merged PRs in 30d

Description

Hello Alber,

I am trying to analyse a simple model using deconvnet and guidedbackprop. I have a few doubts regarding the implementation of these two methods.

My model looks like this:
```
model = tf.keras.Sequential([
tf.keras.layers.Dense(30, activation='relu', input_shape=(22,)),
tf.keras.layers.Dense(3, activation='relu'),
tf.keras.layers.Dense(1)
])
```

When I analyse the model using GuidedBackProp one my results look like this:

`[ 0.11697155 -0.22231908 0.02728167 0.23650022 0.2358752 -0.01217415
-0.26119494 -0.16302212 -0.05665719 -0.06339239 -0.03417799 0.28304198
0.00337575 -0.11469954 -0.11458022 0.02820442 0.34076804 0.22410852
0.08049499 0.18145919 -0.30921796 0.07817852]`

As you can see there are positive and negative values. **Here is my doubt:** As per my understanding, based on Springenberg et al., the Guided backprop method propagates back only positive gradients as relu is applied for both forward and backward passes.

**As per The figure 1 in [https://arxiv.org/pdf/1412.6806.pdf](https://arxiv.org/pdf/1412.6806.pdf) , the final output shouldn't have any negative values but in our case we have (for both guided backprop and deconvnet). Could you please tell me why is this happening?**

**Question 2**: Also, instead of ReLU, if I want to analyse for tanh activations, will the following implementation work for guided backprop?

```
def guided_backprop_mapping(X,Y, bp_Y, bp_state):
tmp = tf.compat.v1.nn.tanh(bp_Y)
return tf.compat.v1.gradients(Y,X,grad_ys=tmp)

class GuidedBackProp(innvestigate.analyzer.base.ReverseAnalyzerBase):

def _create_analysis(self, *args, **kwargs):
self._add_conditional_reverse_mapping(lambda layer: innvestigate.utils.keras.checks.contains_activation(layer, "tanh"),
tf_to_keras_mapping(guided_backprop_mapping),
name="guided_backprop_reverse_relu_layer",)
return super(GuidedBackProp, self )._create_analysis(*args ,**kwargs)
```

Thank you very much in advance.

Best regards,
Venki

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.