tensorflow / lucid

A collection of infrastructure and tools for research in neural network interpretability.
Apache License 2.0
4.65k stars 655 forks source link

Issues importing graph from saved_model.pb #222

Open mencia opened 4 years ago

mencia commented 4 years ago

I save a tfhub model as explained in https://github.com/tensorflow/lucid/issues/218. According to https://github.com/tensorflow/lucid/wiki/Importing-Models-into-Lucid, once the model is saved, it can be visualized by:

model = Model.load("saved_model.pb")
render.render_vis(model, "layer_name:0")

What should layer_name be? According to the last section of https://colab.research.google.com/drive/1PPzeZi5sBN2YRlBmKsdvZPbfYtZI-pHl#scrollTo=A1Vb01eu8r7_, it should be one of the nodes, which can be accessed by:

for node in model.graph_def.node:
    print(node.name)

and in my case these are:

module/encoder/e1/kernel
module/encoder/e1/bias
module/encoder/e2/kernel
module/encoder/e2/bias
module/encoder/e3/kernel
module/encoder/e3/bias
module/encoder/e4/kernel
module/encoder/e4/bias
module/encoder/e5/kernel
module/encoder/e5/bias
module/encoder/means/kernel
module/encoder/means/bias
module/encoder/log_var/kernel
module/encoder/log_var/bias
module/decoder/dense/kernel
module/decoder/dense/bias
module/decoder/dense_1/kernel
module/decoder/dense_1/bias
module/decoder/conv2d_transpose/kernel
module/decoder/conv2d_transpose/bias
module/decoder/conv2d_transpose_1/kernel
module/decoder/conv2d_transpose_1/bias
module/decoder/conv2d_transpose_2/kernel
module/decoder/conv2d_transpose_2/bias
module/decoder/conv2d_transpose_3/kernel
module/decoder/conv2d_transpose_3/bias
checkpoint_initializer/prefix
checkpoint_initializer/tensor_names
checkpoint_initializer/shape_and_slices
checkpoint_initializer
AssignVariableOp
checkpoint_initializer_1/prefix
checkpoint_initializer_1/tensor_names
checkpoint_initializer_1/shape_and_slices
checkpoint_initializer_1
AssignVariableOp_1
checkpoint_initializer_2/prefix
checkpoint_initializer_2/tensor_names
checkpoint_initializer_2/shape_and_slices
checkpoint_initializer_2
AssignVariableOp_2
checkpoint_initializer_3/prefix
checkpoint_initializer_3/tensor_names
checkpoint_initializer_3/shape_and_slices
checkpoint_initializer_3
AssignVariableOp_3
checkpoint_initializer_4/prefix
checkpoint_initializer_4/tensor_names
checkpoint_initializer_4/shape_and_slices
checkpoint_initializer_4
AssignVariableOp_4
checkpoint_initializer_5/prefix
checkpoint_initializer_5/tensor_names
checkpoint_initializer_5/shape_and_slices
checkpoint_initializer_5
AssignVariableOp_5
checkpoint_initializer_6/prefix
checkpoint_initializer_6/tensor_names
checkpoint_initializer_6/shape_and_slices
checkpoint_initializer_6
AssignVariableOp_6
checkpoint_initializer_7/prefix
checkpoint_initializer_7/tensor_names
checkpoint_initializer_7/shape_and_slices
checkpoint_initializer_7
AssignVariableOp_7
checkpoint_initializer_8/prefix
checkpoint_initializer_8/tensor_names
checkpoint_initializer_8/shape_and_slices
checkpoint_initializer_8
AssignVariableOp_8
checkpoint_initializer_9/prefix
checkpoint_initializer_9/tensor_names
checkpoint_initializer_9/shape_and_slices
checkpoint_initializer_9
AssignVariableOp_9
checkpoint_initializer_10/prefix
checkpoint_initializer_10/tensor_names
checkpoint_initializer_10/shape_and_slices
checkpoint_initializer_10
AssignVariableOp_10
checkpoint_initializer_11/prefix
checkpoint_initializer_11/tensor_names
checkpoint_initializer_11/shape_and_slices
checkpoint_initializer_11
AssignVariableOp_11
checkpoint_initializer_12/prefix
checkpoint_initializer_12/tensor_names
checkpoint_initializer_12/shape_and_slices
checkpoint_initializer_12
AssignVariableOp_12
checkpoint_initializer_13/prefix
checkpoint_initializer_13/tensor_names
checkpoint_initializer_13/shape_and_slices
checkpoint_initializer_13
AssignVariableOp_13
checkpoint_initializer_14/prefix
checkpoint_initializer_14/tensor_names
checkpoint_initializer_14/shape_and_slices
checkpoint_initializer_14
AssignVariableOp_14
checkpoint_initializer_15/prefix
checkpoint_initializer_15/tensor_names
checkpoint_initializer_15/shape_and_slices
checkpoint_initializer_15
AssignVariableOp_15
checkpoint_initializer_16/prefix
checkpoint_initializer_16/tensor_names
checkpoint_initializer_16/shape_and_slices
checkpoint_initializer_16
AssignVariableOp_16
checkpoint_initializer_17/prefix
checkpoint_initializer_17/tensor_names
checkpoint_initializer_17/shape_and_slices
checkpoint_initializer_17
AssignVariableOp_17
checkpoint_initializer_18/prefix
checkpoint_initializer_18/tensor_names
checkpoint_initializer_18/shape_and_slices
checkpoint_initializer_18
AssignVariableOp_18
checkpoint_initializer_19/prefix
checkpoint_initializer_19/tensor_names
checkpoint_initializer_19/shape_and_slices
checkpoint_initializer_19
AssignVariableOp_19
checkpoint_initializer_20/prefix
checkpoint_initializer_20/tensor_names
checkpoint_initializer_20/shape_and_slices
checkpoint_initializer_20
AssignVariableOp_20
checkpoint_initializer_21/prefix
checkpoint_initializer_21/tensor_names
checkpoint_initializer_21/shape_and_slices
checkpoint_initializer_21
AssignVariableOp_21
checkpoint_initializer_22/prefix
checkpoint_initializer_22/tensor_names
checkpoint_initializer_22/shape_and_slices
checkpoint_initializer_22
AssignVariableOp_22
checkpoint_initializer_23/prefix
checkpoint_initializer_23/tensor_names
checkpoint_initializer_23/shape_and_slices
checkpoint_initializer_23
AssignVariableOp_23
checkpoint_initializer_24/prefix
checkpoint_initializer_24/tensor_names
checkpoint_initializer_24/shape_and_slices
checkpoint_initializer_24
AssignVariableOp_24
checkpoint_initializer_25/prefix
checkpoint_initializer_25/tensor_names
checkpoint_initializer_25/shape_and_slices
checkpoint_initializer_25
AssignVariableOp_25
init
lucid_metadata_json

When I try to visualize some part:

import lucid.optvis.render as render
_ = render.render_vis(model, "module/encoder/e5/kernel:0")

I get the following errors:

---------------------------------------------------------------------------
InvalidArgumentError                      Traceback (most recent call last)
~/Internship/Projects/Disentanglement_Locatello/env_py36/lib/python3.6/site-packages/tensorflow/python/framework/importer.py in import_graph_def(graph_def, input_map, return_elements, name, op_dict, producer_op_list)
    426         results = c_api.TF_GraphImportGraphDefWithResults(
--> 427             graph._c_graph, serialized, options)  # pylint: disable=protected-access
    428         results = c_api_util.ScopedTFImportGraphDefResults(results)

InvalidArgumentError: Input 0 of node import/AssignVariableOp was passed float from import/module/decoder/conv2d_transpose/bias:0 incompatible with expected resource.

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-66-4a76f238a346> in <module>
      1 import lucid.optvis.render as render
----> 2 _ = render.render_vis(model, "module/encoder/e5/kernel:0")

~/Internship/Projects/Disentanglement_Locatello/env_py36/lib/python3.6/site-packages/lucid/optvis/render.py in render_vis(model, objective_f, param_f, optimizer, transforms, thresholds, print_objectives, verbose, relu_gradient_override, use_fixed_seed)
     93 
     94     T = make_vis_T(model, objective_f, param_f, optimizer, transforms,
---> 95                    relu_gradient_override)
     96     print_objective_func = make_print_objective_func(print_objectives, T)
     97     loss, vis_op, t_image = T("loss"), T("vis_op"), T("input")

~/Internship/Projects/Disentanglement_Locatello/env_py36/lib/python3.6/site-packages/lucid/optvis/render.py in make_vis_T(model, objective_f, param_f, optimizer, transforms, relu_gradient_override)
    175     with gradient_override_map({'Relu': redirected_relu_grad,
    176                                 'Relu6': redirected_relu6_grad}):
--> 177       T = import_model(model, transform_f(t_image), t_image)
    178   else:
    179     T = import_model(model, transform_f(t_image), t_image)

~/Internship/Projects/Disentanglement_Locatello/env_py36/lib/python3.6/site-packages/lucid/optvis/render.py in import_model(model, t_image, t_image_raw, scope, input_map)
    255     t_image_raw = t_image
    256 
--> 257   model.import_graph(t_image, scope=scope, forget_xy_shape=True, input_map=input_map)
    258 
    259   def T(layer):

~/Internship/Projects/Disentanglement_Locatello/env_py36/lib/python3.6/site-packages/lucid/modelzoo/vision_base.py in import_graph(self, t_input, scope, forget_xy_shape, input_map)
    198       final_input_map.update(input_map)
    199     tf.import_graph_def(
--> 200         self.graph_def, final_input_map, name=scope)
    201     self.post_import(scope)
    202 

~/Internship/Projects/Disentanglement_Locatello/env_py36/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py in new_func(*args, **kwargs)
    505                 'in a future version' if date is None else ('after %s' % date),
    506                 instructions)
--> 507       return func(*args, **kwargs)
    508 
    509     doc = _add_deprecated_arg_notice_to_docstring(

~/Internship/Projects/Disentanglement_Locatello/env_py36/lib/python3.6/site-packages/tensorflow/python/framework/importer.py in import_graph_def(graph_def, input_map, return_elements, name, op_dict, producer_op_list)
    429       except errors.InvalidArgumentError as e:
    430         # Convert to ValueError for backwards compatibility.
--> 431         raise ValueError(str(e))
    432 
    433     # Create _DefinedFunctions for any imported functions.

ValueError: Input 0 of node import/AssignVariableOp was passed float from import/module/decoder/conv2d_transpose/bias:0 incompatible with expected resource.

The problem is to do with the model.import_graph call, inside the import_model method in render.py.

The same ValueError has been discussed in https://devtalk.nvidia.com/default/topic/1050006/tensorrt/incompatible-with-expected-resource/.

Any ideas on how to overcome this?