Base Interpreter¶
Abstract Interpreter¶
-
class
interpretdl.Interpreter(model: callable, device: str, **kwargs)[source]¶ Interpreter is the base abstract class for all Interpreters. The implementation of any Interpreter should at least
(1) prepare
predict_fnthat outputs probability predictions, gradients or other desired intermediate results of the model, and(2) implement the core function
interpret()of the interpretation algorithm.In general, we find this implementation is practical, makes the code more readable and can highlight the core function of the interpretation algorithm.
This kind of implementation works for all post-poc interpretation algorithms. While some algorithms may have different features and other fashions of implementations may be more suitable for them, our style of implementation can still work for most of them. So we follow this design for all Interpreters in this library.
Three sub-abstract Interpreters that implement
_build_predict_fn()are currently provided in this file:InputGradientInterpreter,InputOutputInterpreter,IntermediateLayerInterpreter. For each of them, the implementedpredict_fncan be used by several different algorithms. Therefore, the further implementations can focus on the core algorithm. More sub-abstract Interpreters will be provided if necessary.Warning
use_cudawould be deprecated soon. Usedevicedirectly.Parameters: - model (callable) – A model with
forward()and possiblybackward()functions. - device (str) – The device used for running
model, options:"cpu","gpu:0","gpu:1"etc.
-
_build_predict_fn(**kwargs)[source]¶ Build
predict_fnfor interpreters. This will be called byinterpret().
-
_env_setup()[source]¶ Prepare the environment setup. This is not always necessary because the setup can be done within the function of
_build_predict_fn().
- model (callable) – A model with
Sub-abstract: Input Gradient Interpreter¶
-
class
interpretdl.InputGradientInterpreter(model: callable, device: str, **kwargs)[source]¶ This is one of the sub-abstract Interpreters.
InputGradientInterpreterare used by input gradient based Interpreters. Interpreters that are derived fromInputGradientInterpreterincludeGradShapCVInterpreter,IntGradCVInterpreter,SmoothGradInterpreter.This Interpreter implements
_build_predict_fn()that returns input gradient given an input.Parameters: - model (callable) – A model with
forward()and possiblybackward()functions. - device (str) – The device used for running
model, options:"cpu","gpu:0","gpu:1"etc.
-
_build_predict_fn(rebuild: bool = False, gradient_of: str = 'probability')[source]¶ Build
predict_fnfor input gradients based algorithms. The model is supposed to be a classification model.Parameters: - rebuild (bool, optional) – forces to rebuild. Defaults to
False. - gradient_of (str, optional) – computes the gradient of
[
"loss","logit"or"probability"] w.r.t. input data. Defaults to"probability". Other options can get similar results while the absolute scale might be different.
- rebuild (bool, optional) – forces to rebuild. Defaults to
- model (callable) – A model with
Sub-abstract: Input Output Interpreter¶
-
class
interpretdl.InputOutputInterpreter(model: callable, device: str, **kwargs)[source]¶ This is one of the sub-abstract Interpreters.
InputOutputInterpreterare used by input-output correlation based Interpreters. Interpreters that are derived fromInputOutputInterpreterincludeOcclusionInterpreter,LIMECVInterpreter,SmoothGradInterpreter.This Interpreter implements
_build_predict_fn()that returns the model’s prediction given an input.Parameters: - model (callable) – A model with
forward()and possiblybackward()functions. - device (str) – The device used for running
model, options:"cpu","gpu:0","gpu:1"etc.
-
_build_predict_fn(rebuild: bool = False, output: str = 'probability')[source]¶ Build
predict_fnfor Input-Output based algorithms. The model is supposed to be a classification model.Parameters: - rebuild (bool, optional) – forces to rebuild. Defaults to
False. - output (str, optional) – computes the logit or probability. Defaults:
"probability". Other options can get similar results while the absolute scale might be different.
- rebuild (bool, optional) – forces to rebuild. Defaults to
- model (callable) – A model with
Sub-abstract: Intermediate-Layer Interpreter¶
-
class
interpretdl.IntermediateLayerInterpreter(model: callable, device: str, **kwargs)[source]¶ This is one of the sub-abstract Interpreters.
IntermediateLayerInterpreterexhibits features from intermediate layers to produce explanations. This interpreter extracts intermediate layers’ features, but no gradients involved. Interpreters that are derived fromIntermediateLayerInterpreterincludeRolloutInterpreter,ScoreCAMInterpreter.This Interpreter implements
_build_predict_fn()that returns the model’s intermediate outputs given an input.Parameters: - model (callable) – A model with
forward()and possiblybackward()functions. - device (str) – The device used for running
model, options:"cpu","gpu:0","gpu:1"etc.
-
_build_predict_fn(rebuild: bool = False, target_layer: str = None, target_layer_pattern: str = None)[source]¶ Build
predict_fnfor IntermediateLayer based algorithms. The model is supposed to be a classification model.target_layerandtarget_layer_patterncannot be set at the same time. See the arguments below.Parameters: - rebuild (bool, optional) – forces to rebuild. Defaults to
False. - target_layer (str, optional) – the name of the desired layer whose features will output. This is used when
there is only one layer to output. Conflict with
target_layer_pattern. Defaults toNone. - target_layer_pattern (str, optional) – the pattern name of the layers whose features will output. This is
used when there are several layers to output and they share a common pattern name. Conflict with
target_layer. Defaults toNone.
- rebuild (bool, optional) – forces to rebuild. Defaults to
- model (callable) – A model with
Sub-abstract: Transformer Interpreter¶
-
class
interpretdl.TransformerInterpreter(model: callable, device: str, **kwargs)[source]¶ This is one of the sub-abstract Interpreters.
TransformerNLPInterpreterare used by Interpreters for Transformer based model. Interpreters that are derived fromTransformerNLPInterpreterincludeBTNLPInterpreter,GANLPInterpreter.This Interpreter implements
_build_predict_fn()that returns servral variables and gradients in each layer.Parameters: - model (callable) – A model with
forward()and possiblybackward()functions. - device (str) – The device used for running
model, options:"cpu","gpu:0","gpu:1"etc.
-
_build_predict_fn(rebuild: bool = False, embedding_name: str = None, attn_map_name: str = None, attn_v_name: str = None, attn_proj_name: str = None, gradient_of: str = None)[source]¶ Build
predict_fnfor transformer based algorithms. The model is supposed to be a classification model.Parameters: - rebuild (bool, optional) – forces to rebuild. Defaults to
False. - embedding_name (str, optional) – the layer name for embedding, if in need.
- attn_map_name (str, optional) – the layer name for attention weights, if in need.
- attn_v_name (str, optional) – the layer name for attention value.
- attn_proj_name (str, optional) – the layer name for attention projection, if in need.
- nlp (bool, default to False) – whether the input data is for language test.
- rebuild (bool, optional) – forces to rebuild. Defaults to
- model (callable) – A model with