Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG?] analyzer.analyze() not working properly #193

Open
syomantak opened this issue Jun 9, 2020 · 0 comments
Open

[BUG?] analyzer.analyze() not working properly #193

syomantak opened this issue Jun 9, 2020 · 0 comments

Comments

@syomantak
Copy link

syomantak commented Jun 9, 2020

I am running this code cell in a notebook

for i, ridx in enumerate(test_sample_paths):
    x = dset[ridx]['matrix']
    x = x.reshape((1, -1, 300,1))    
    x = x.numpy()
    prob = k_model.predict_on_batch(x)[0] 
    y_hat = prob.argmax()
  
    for aidx, analyzer in enumerate(analyzers):
        a = np.squeeze(analyzer.analyze(x))
        a = np.sum(a, axis=1)        ### Add the values along the embedding dimension
        analysis[i, aidx] = a

This code results in error in this line a = np.squeeze(analyzer.analyze(x)) (This is for Smoothgrad analyzer) . The error is given below. When I rerun the cell, I get the same error again(This is for integrated_gradient analyzer), but on 3rd time, it runs FINE!! The print the text heatmap later and they seem to be alright as well.


TypeError Traceback (most recent call last)
~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/framework/tensor_util.py in make_tensor_proto(values, dtype, shape, verify_shape)
526 try:
--> 527 str_values = [compat.as_bytes(x) for x in proto_values]
528 except TypeError:

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/framework/tensor_util.py in (.0)
526 try:
--> 527 str_values = [compat.as_bytes(x) for x in proto_values]
528 except TypeError:

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/util/compat.py in as_bytes(bytes_or_text, encoding)
60 raise TypeError('Expected binary or unicode string, got %r' %
---> 61 (bytes_or_text,))
62

TypeError: Expected binary or unicode string, got -1

During handling of the above exception, another exception occurred:

TypeError Traceback (most recent call last)
in
18 for aidx, analyzer in enumerate(analyzers):
19 print(analyzer)
---> 20 a = np.squeeze(analyzer.analyze(x))#, neuron_selection=y_hat))
21 print(a.shape)
22 a = np.sum(a, axis=1) ### Add the values along the embedding dimension

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/innvestigate/analyzer/wrapper.py in analyze(self, X, *args, **kwargs)
143 if self._keras_based_augment_reduce is True:
144 if not hasattr(self._subanalyzer, "_analyzer_model"):
--> 145 self.create_analyzer_model()
146
147 ns_mode = self._neuron_selection_mode

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/innvestigate/analyzer/wrapper.py in create_analyzer_model(self)
129 "with this wrapper.")
130
--> 131 new_inputs = iutils.to_list(self._augment(inputs))
132 # print(type(new_inputs), type(extra_inputs))
133 tmp = iutils.to_list(model(new_inputs+extra_inputs))

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/innvestigate/analyzer/wrapper.py in _augment(self, X)
290 tmp = super(PathIntegrator, self)._augment(X)
291 tmp = [ilayers.Reshape((-1, self._augment_by_n)+K.int_shape(x)[1:])(x)
--> 292 for x in tmp]
293
294 difference = self._compute_difference(X)

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/innvestigate/analyzer/wrapper.py in (.0)
290 tmp = super(PathIntegrator, self)._augment(X)
291 tmp = [ilayers.Reshape((-1, self._augment_by_n)+K.int_shape(x)[1:])(x)
--> 292 for x in tmp]
293
294 difference = self._compute_difference(X)

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/keras/engine/base_layer.py in call(self, inputs, **kwargs)
455 # Actually call the layer,
456 # collecting output(s), mask(s), and shape(s).
--> 457 output = self.call(inputs, **kwargs)
458 output_mask = self.compute_mask(inputs, previous_mask)
459

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/innvestigate/layers.py in call(self, x)
489
490 def call(self, x):
--> 491 return K.reshape(x, self._shape)
492
493 def compute_output_shape(self, input_shapes):

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py in reshape(x, shape)
1967 A tensor.
1968 """
-> 1969 return tf.reshape(x, shape)
1970
1971

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py in reshape(tensor, shape, name)
6480 if _ctx is None or not _ctx._eager_context.is_eager:
6481 _, _, _op = _op_def_lib._apply_op_helper(
-> 6482 "Reshape", tensor=tensor, shape=shape, name=name)
6483 _result = _op.outputs[:]
6484 _inputs_flat = _op.inputs

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py in _apply_op_helper(self, op_type_name, name, **keywords)
511 except TypeError as err:
512 if dtype is None:
--> 513 raise err
514 else:
515 raise TypeError(

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py in _apply_op_helper(self, op_type_name, name, **keywords)
508 dtype=dtype,
509 as_ref=input_arg.is_ref,
--> 510 preferred_dtype=default_dtype)
511 except TypeError as err:
512 if dtype is None:

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/framework/ops.py in internal_convert_to_tensor(value, dtype, name, as_ref, preferred_dtype, ctx)
1144
1145 if ret is None:
-> 1146 ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
1147
1148 if ret is NotImplemented:

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py in _constant_tensor_conversion_function(v, dtype, name, as_ref)
227 as_ref=False):
228 _ = as_ref
--> 229 return constant(v, dtype=dtype, name=name)
230
231

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/framework/constant_op.py in constant(value, dtype, shape, name, verify_shape)
206 tensor_value.tensor.CopyFrom(
207 tensor_util.make_tensor_proto(
--> 208 value, dtype=dtype, shape=shape, verify_shape=verify_shape))
209 dtype_value = attr_value_pb2.AttrValue(type=tensor_value.tensor.dtype)
210 const_tensor = g.create_op(

~/anaconda3/envs/gpu_ptorch/lib/python3.6/site-packages/tensorflow/python/framework/tensor_util.py in make_tensor_proto(values, dtype, shape, verify_shape)
529 raise TypeError("Failed to convert object of type %s to Tensor. "
530 "Contents: %s. Consider casting elements to a "
--> 531 "supported type." % (type(values), values))
532 tensor_proto.string_val.extend(str_values)
533 return tensor_proto

TypeError: Failed to convert object of type <class 'tuple'> to Tensor. Contents: (-1, 64, None, 300, 1). Consider casting elements to a supported type.

The analyzers are the following:

input_range = (-24.0467,25.3291)
analyzers = []
noise_scale = (input_range[1]-input_range[0]) * 0.1
ri = input_range[0]  # reference input

methods = [
    # NAME                    OPT.PARAMS         
    ("gradient",              {},           "Gradient"),
    ("smoothgrad",            {"noise_scale": noise_scale,"postprocess": "square"},     "SmoothGrad"),
    ("deconvnet",             {},           "Deconvnet"),
    ("guided_backprop",       {},           "Guided Backprop",),
    ("pattern.net",           {"pattern_type": "relu"}, "PatternNet"),
    ("pattern.attribution",   {"pattern_type": "relu"}, "PatternAttribution"),
    ("deep_taylor.bounded",   {"low": input_range[0],"high": input_range[1]}, "DeepTaylor"),
    ("input_t_gradient",      {},          "Input * Gradient"),
    ("integrated_gradients",  {"reference_inputs": ri},   "Integrated Gradients"),
    #("deep_lift.wrapper",     {"reference_inputs": ri},    "DeepLIFT Wrapper - Rescale"),
    #("deep_lift.wrapper",     {"reference_inputs": ri, "nonlinear_mode": "reveal_cancel"}, "DeepLIFT Wrapper - RevealCancel"),
    ("lrp.z",                 {},   "LRP-Z"),
    ("lrp.epsilon",           {"epsilon": 1},    "LRP-Epsilon"),
]
for method in methods:
    analyzer = innvestigate.create_analyzer(method[0], k_model,**method[1]) 
    analyzer.fit(train_data, batch_size=1024, verbose=1)
    analyzers.append(analyzer)

There is no error in this code cell

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant