Closed lthamm closed 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?)
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:
I then take the first image from my keras training set generator:
And try to analyze it with LRP:
This results in a TypeError with the following stacktrace:
tensorflow==2.1.0 python0==3.7 (Should I downgrade to 3.6? Yet this does not seem to be a python error?)