Repository: understandable-machine-intelligence-lab/Quantus
Issue: Tutorial notebook TypeError: Callable() takes no arguments
Root cause: Documentation Deficiency

Hi!
I'm trying to run the [tutorial_model_training_explanation_robustness.ipynb](https://github.com/understandable-machine-intelligence-lab/Quantus/blob/main/tutorials/tutorial_model_training_explanation_robustness.ipynb) notebook and I get the following error:

```
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
[<ipython-input-7-432ed12102bf>](https://localhost:8080/#) in <module>()
     50                                                                         y_batch=y_batch.cpu().numpy(),
     51                                                                         a_batch=None,
---> 52                                                                         **{"method": "Saliency", "device": device, "img_size": 28}) 
     53 
     54     print(f"Epoch {epoch+1}/{epochs} - loss {loss.item():.2f} - test accuracy: {(100 * test_acc):.2f}% - max sensitivity {np.mean(sensitivities[epoch]):.2f}")

1 frames
[/usr/local/lib/python3.7/dist-packages/quantus/metrics/robustness_metrics.py](https://localhost:8080/#) in __call__(self, model, x_batch, y_batch, a_batch, *args, **kwargs)
    432                 inputs=x_batch,
    433                 targets=y_batch,
--> 434                 **self.kwargs,
    435             )
    436 

[/usr/lib/python3.7/typing.py](https://localhost:8080/#) in __call__(self, *args, **kwargs)
    676             raise TypeError(f"Type {self._name} cannot be instantiated; "
    677                             f"use {self._name.lower()}() instead")
--> 678         result = self.__origin__(*args, **kwargs)
    679         try:
    680             result.__orig_class__ = self

TypeError: Callable() takes no arguments
```

Are you passing/ specifying an `explain_func`?

> Are you passing/ specifying an `explain_func`?

I did not change the code at all. It passes quantus.explain, is it defaults to something or I need to specify it? 
My goal is evaluating the robustness of a model to input perturbations, which explain func should I specify for it?

Hi, thanks a lot. I've fixed the problem in the notebook now, committing changes as we speak ...

These were changes necessary:


 ```
# Explain model (on a few test samples) and measure sensitivies.
sensitivities[epoch] = sensitivities[epoch] = quantus.MaxSensitivity(**{"nr_samples": 10,
                                                                        "perturb_radius": 0.2,
                                                                        "norm_numerator": quantus.fro_norm,
                                                                        "norm_denominator": quantus.fro_norm,
                                                                        "explain_func": quantus.explain,
                                                                        "perturb_func": quantus.uniform_noise,
                                                                        "similarity_func": quantus.difference,
                                                                    })(model=model, 
                                                                    x_batch=x_batch.cpu().numpy(),
                                                                    y_batch=y_batch.cpu().numpy(),
                                                                    a_batch=None,
                                                                    **{"method": "Saliency", "device": device, "explain_func": quantus.explain}) ```