albermax / innvestigate

A toolbox to iNNvestigate neural networks' predictions!
Other
1.26k stars 233 forks source link

updates_towards_tf2.0: TypeError: ('Keyword argument not understood:', 'filters') #228

Closed lthamm closed 3 years ago

lthamm commented 3 years ago

I try to use lrp on a model trained with keras > 2, so I switched to the updates_towards_tf2.0 branch, which installed tensorflow==2.1.0.

I then load my pretrained model, which is a fintuned vgg16 model:

import innvestigate
import innvestigate.utils as iutils
from tensorflow import keras

model = keras.models.load_model('checkpoints/vgg_cp.ckpt')

I then take the first image from my keras training set generator:

# The flow / generator gives a batch of 32 images each time
x_batch, y_batch = test.next()
img01 = x_batch[0]

And try to analyze it with LRP:

analyser = innvestigate.create_analyzer("lrp.z", model)
analysis = analyser.analyze(img01)

This results in a TypeError with the following stacktrace:


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-527aa1da5d17> in <module>
      1 analyser = innvestigate.create_analyzer("lrp.z", model)
----> 2 analysis = analyser.analyze(img01)

~/opt/anaconda3/lib/python3.7/site-packages/innvestigate/analyzer/base.py in analyze(self, X, neuron_selection, explained_layer_names, stop_mapping_at_layers, r_init, f_init, no_forward_pass)
    317         """
    318         if not hasattr(self, "_analyzer_model"):
--> 319             self.create_analyzer_model()
    320 
    321         if isinstance(explained_layer_names, list):

~/opt/anaconda3/lib/python3.7/site-packages/innvestigate/analyzer/base.py in create_analyzer_model(self)
    277         """
    278 
--> 279         self._analyzer_model = self._create_analysis(self._model)
    280 
    281     def _create_analysis(self, model):

~/opt/anaconda3/lib/python3.7/site-packages/innvestigate/analyzer/relevance_based/relevance_analyzer.py in _create_analysis(self, *args, **kwargs)
    262 
    263         # FINALIZED constructor.
--> 264         return super(LRP, self)._create_analysis(*args, **kwargs)
    265 
    266     def _default_reverse_mapping(self, layer):

~/opt/anaconda3/lib/python3.7/site-packages/innvestigate/analyzer/base.py in _create_analysis(self, model)
    599             model,
    600             reverse_mappings=self._reverse_mapping,
--> 601             default_reverse_mapping=self._default_reverse_mapping,
    602         )
    603 

~/opt/anaconda3/lib/python3.7/site-packages/innvestigate/analyzer/reverse_map.py in __init__(self, model, reverse_mappings, default_reverse_mapping)
    454 
    455     def __init__(self, model, reverse_mappings, default_reverse_mapping):
--> 456         self.build(model, reverse_mappings, default_reverse_mapping)
    457 
    458     def build(self, model, reverse_mappings, default_reverse_mapping):

~/opt/anaconda3/lib/python3.7/site-packages/innvestigate/analyzer/reverse_map.py in build(self, model, reverse_mappings, default_reverse_mapping)
    481                 raise ValueError("Reverse Mappings should be an instance of ReplacementLayer")
    482 
--> 483             replacement_layers.append(wrapper_class(layer, layer_next))
    484 
    485         # connect graph structure

~/opt/anaconda3/lib/python3.7/site-packages/innvestigate/analyzer/relevance_based/relevance_rule_base.py in __init__(self, layer, *args, **kwargs)
     76             self._layer_wo_act = kgraph.copy_layer_wo_activation(layer,
     77                                                              keep_bias=bias,
---> 78                                                              name_template="no_act_%s")
     79             layer_mapping[(layer.name, type(self).__name__, bias)] = self._layer_wo_act
     80 

~/opt/anaconda3/lib/python3.7/site-packages/innvestigate/utils/keras/graph.py in copy_layer_wo_activation(layer, keep_bias, name_template, weights, reuse_symbolic_tensors, **kwargs)
    321                 else:
    322                     weights = layer.get_weights()[:-1]
--> 323     return get_layer_from_config(layer, config, weights=weights, **kwargs)
    324 
    325 

~/opt/anaconda3/lib/python3.7/site-packages/innvestigate/utils/keras/graph.py in get_layer_from_config(old_layer, new_config, weights, reuse_symbolic_tensors)
    257     :return: The new layer instance.
    258     """
--> 259     new_layer = old_layer.__class__.from_config(new_config)
    260 
    261     if weights is None:

~/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py in from_config(cls, config)
    517         A layer instance.
    518     """
--> 519     return cls(**config)
    520 
    521   def compute_output_shape(self, input_shape):

~/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/training/tracking/base.py in _method_wrapper(self, *args, **kwargs)
    455     self._self_setattr_tracking = False  # pylint: disable=protected-access
    456     try:
--> 457       result = method(self, *args, **kwargs)
    458     finally:
    459       self._self_setattr_tracking = previous_value  # pylint: disable=protected-access

~/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py in __init__(self, trainable, name, dtype, dynamic, **kwargs)
    184     }
    185     # Validate optional keyword arguments.
--> 186     generic_utils.validate_kwargs(kwargs, allowed_kwargs)
    187 
    188     # Mutable properties

~/opt/anaconda3/lib/python3.7/site-packages/tensorflow_core/python/keras/utils/generic_utils.py in validate_kwargs(kwargs, allowed_kwargs, error_message)
    716   for kwarg in kwargs:
    717     if kwarg not in allowed_kwargs:
--> 718       raise TypeError(error_message, kwarg)

TypeError: ('Keyword argument not understood:', 'filters')

tensorflow==2.1.0 python0==3.7 (Should I downgrade to 3.6? Yet this does not seem to be a python error?)