SmoothGrad¶
_{ }View colab tutorial  _{ }View source  ðŸ“° Paper
SmoothGrad is a gradientbased explanation method, which, as the name suggests, averages the gradient at several points corresponding to small perturbations around the point of interest. The smoothing effect induced by the average help reducing the visual noise, and hence improve the explanations.
Quote
[...] The gradient at any given point will be less meaningful than a local average of gradient values. This suggests a new way to create improved sensitivity maps: instead of basing a visualization directly on the gradient, we could base it on a smoothing of the gradients with a Gaussian kernel.
More precisely, the explanation \(\phi\) for an input \(x\) and a classifier \(f\) is defined as
The \(\sigma\) in the formula is controlled using the noise
parameter, and the expectation is estimated using \(N\) samples controlled by the nb_samples
parameter.
Tip
It is recommended to have a noise level \(\sigma\) at about 20% of the range of your inputs, i.e. \(\sigma=0.2\) if your inputs are between \([0, 1]\) or \(\sigma=0.4\) if your inputs are between \([1, 1]\).
Example¶
from xplique.attributions import SmoothGrad
# load images, labels and model
# ...
method = SmoothGrad(model, nb_samples=50, noise=0.15)
explanations = method.explain(images, labels)
Notebooks¶
SmoothGrad
¶
Used to compute the SmoothGrad, by averaging Saliency maps of noisy samples centered on the
original sample.
__init__(self,
model: keras.src.engine.training.Model,
output_layer: Union[str, int, None] = None,
batch_size: Optional[int] = 32,
operator: Union[xplique.commons.operators_operations.Tasks, str,
Callable[[keras.src.engine.training.Model, tf.Tensor, tf.Tensor], float], None] = None,
reducer: Optional[str] = 'mean',
nb_samples: int = 50,
noise: float = 0.2)
¶
model: keras.src.engine.training.Model,
output_layer: Union[str, int, None] = None,
batch_size: Optional[int] = 32,
operator: Union[xplique.commons.operators_operations.Tasks, str,
Callable[[keras.src.engine.training.Model, tf.Tensor, tf.Tensor], float], None] = None,
reducer: Optional[str] = 'mean',
nb_samples: int = 50,
noise: float = 0.2)
Parameters

model : keras.src.engine.training.Model
The model from which we want to obtain explanations

output_layer : Union[str, int, None] = None
Layer to target for the outputs (e.g logits or after softmax).
If an
int
is provided it will be interpreted as a layer index.If a
string
is provided it will look for the layer name.Default to the last layer.
It is recommended to use the layer before Softmax.

batch_size : Optional[int] = 32
Number of inputs to explain at once, if None compute all at once.

operator : Union[xplique.commons.operators_operations.Tasks, str, Callable[[keras.src.engine.training.Model, tf.Tensor, tf.Tensor], float], None] = None
Function g to explain, g take 3 parameters (f, x, y) and should return a scalar, with f the model, x the inputs and y the targets. If None, use the standard operator g(f, x, y) = f(x)[y].

reducer : Optional[str] = 'mean'
String, name of the reducer to use. Either "min", "mean", "max", "sum", or
None
to ignore.Used only for images to obtain explanation with shape (n, h, w, 1).

nb_samples : int = 50
Number of noisy samples generated for the smoothing procedure.

noise : float = 0.2
Scalar, noise used as standard deviation of a normal law centered on zero.
explain(self,
inputs: Union[tf.Dataset, tf.Tensor, ] ,
targets: Union[tf.Tensor, , None] = None) > tf.Tensor
¶
inputs: Union[tf.Dataset, tf.Tensor,
targets: Union[tf.Tensor,
Compute the explanations of the given inputs.
Accept Tensor, numpy array or tf.data.Dataset (in that case targets is None)
Parameters

inputs : Union[tf.Dataset, tf.Tensor,
] Dataset, Tensor or Array. Input samples to be explained.
If Dataset, targets should not be provided (included in Dataset).
Expected shape among (N, W), (N, T, W), (N, H, W, C).
More information in the documentation.

targets : Union[tf.Tensor,
, None] = None Tensor or Array. Onehot encoding of the model's output from which an explanation is desired. One encoding per input and only one output at a time. Therefore, the expected shape is (N, output_size).
More information in the documentation.
Return

explanations : tf.Tensor
Explanation generated by the method.