TypeError: Tensor is unhashable. Instead, use tensor.ref() as the key. in Keras Surgeon
TypeError: Tensor is unhashable. Instead, use tensor.ref() as the key. in Keras Surgeon
我在 pruning.I 使用 Kerassurgeon 模块时遇到这个错误,而我在 google 中使用 VGG-16 colab.It 对其他 models.Can 人来说工作正常帮我解决这个问题。
---> 17 model_new = surgeon.operate()<br>
18 return model_new
>>/usr/local/lib/python3.6/dist-packages/kerassurgeon/surgeon.py in operate(self)
152 sub_output_nodes = utils.get_node_inbound_nodes(node)
153 outputs, output_masks = self._rebuild_graph(self.model.inputs,
--> 154 sub_output_nodes)
155
156 # Perform surgery at this node
>>/usr/local/lib/python3.6/dist-packages/kerassurgeon/surgeon.py in _rebuild_graph(self, graph_inputs, output_nodes, graph_input_masks)
264 # Call the recursive _rebuild_rec method to rebuild the submodel up to
265 # each output layer
--> 266 outputs, output_masks = zip(*[_rebuild_rec(n) for n in output_nodes])
267 return outputs, output_masks
268
>>/usr/local/lib/python3.6/dist-packages/kerassurgeon/surgeon.py in <listcomp>(.0)
264 # Call the recursive _rebuild_rec method to rebuild the submodel up to
265 # each output layer
--> 266 outputs, output_masks = zip(*[_rebuild_rec(n) for n in output_nodes])
267 return outputs, output_masks
268
>>/usr/local/lib/python3.6/dist-packages/kerassurgeon/surgeon.py in _rebuild_rec(node)
216 # Check for replaced tensors before any other checks:
217 # these are created by the surgery methods.
--> 218 if node_output in self._replace_tensors.keys():
219 logging.debug('bottomed out at replaced output: {0}'.format(
220 node_output))
>>/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in __hash__(self)
724 if (Tensor._USE_EQUALITY and executing_eagerly_outside_functions() and
725 (g is None or g.building_function)):
--> 726 raise TypeError("Tensor is unhashable. "
727 "Instead, use tensor.ref() as the key.")
728 else:
**TypeError: Tensor is unhashable. Instead, use tensor.ref() as the key.**
我解决了这个错误。这是由于 versions.Use Kerassurgeon 而不是 tfkerassurgeon 的变化。
使用以下版本
tf 1.x , keras > 2.2 , kerassurgeon
我在尝试Deep learning example with GradientExplainer时解决了类似的问题。这是版本不兼容造成的。
添加以下代码可能会有所帮助:
import tensorflow.compat.v1.keras.backend as K
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
tf 版本为 2.3.1
kerase 版本是 2.4.0
Shap 版本为 0.36
我遇到了类似的问题,我已经使用下一行解决了它:
import tensorflow.compat.v1.keras.backend as K
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
请尝试以下代码:
import tensorflow.compat.v1.keras.backend as K
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
1.compat 允许您编写同时适用于 TensorFlow 1.x 和 2 的代码,并且应该
根据 版本导入 .
解决任何错误
2.eager_execution是一调用就可以操作的接口
来自 Python。开启它可以让 Tensorflow 更加直观。
3.But 那为什么要禁用 eager_execution?
->eager_execution 比 graph_execution 慢。它逐行运行操作
这使得潜在的加速机会变得毫无用处。
4.Run tf.executing_eagerly() 检查 eager_execution 是打开还是关闭。
希望这有助于减轻您的错误。
我在 pruning.I 使用 Kerassurgeon 模块时遇到这个错误,而我在 google 中使用 VGG-16 colab.It 对其他 models.Can 人来说工作正常帮我解决这个问题。
---> 17 model_new = surgeon.operate()<br>
18 return model_new
>>/usr/local/lib/python3.6/dist-packages/kerassurgeon/surgeon.py in operate(self)
152 sub_output_nodes = utils.get_node_inbound_nodes(node)
153 outputs, output_masks = self._rebuild_graph(self.model.inputs,
--> 154 sub_output_nodes)
155
156 # Perform surgery at this node
>>/usr/local/lib/python3.6/dist-packages/kerassurgeon/surgeon.py in _rebuild_graph(self, graph_inputs, output_nodes, graph_input_masks)
264 # Call the recursive _rebuild_rec method to rebuild the submodel up to
265 # each output layer
--> 266 outputs, output_masks = zip(*[_rebuild_rec(n) for n in output_nodes])
267 return outputs, output_masks
268
>>/usr/local/lib/python3.6/dist-packages/kerassurgeon/surgeon.py in <listcomp>(.0)
264 # Call the recursive _rebuild_rec method to rebuild the submodel up to
265 # each output layer
--> 266 outputs, output_masks = zip(*[_rebuild_rec(n) for n in output_nodes])
267 return outputs, output_masks
268
>>/usr/local/lib/python3.6/dist-packages/kerassurgeon/surgeon.py in _rebuild_rec(node)
216 # Check for replaced tensors before any other checks:
217 # these are created by the surgery methods.
--> 218 if node_output in self._replace_tensors.keys():
219 logging.debug('bottomed out at replaced output: {0}'.format(
220 node_output))
>>/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in __hash__(self)
724 if (Tensor._USE_EQUALITY and executing_eagerly_outside_functions() and
725 (g is None or g.building_function)):
--> 726 raise TypeError("Tensor is unhashable. "
727 "Instead, use tensor.ref() as the key.")
728 else:
**TypeError: Tensor is unhashable. Instead, use tensor.ref() as the key.**
我解决了这个错误。这是由于 versions.Use Kerassurgeon 而不是 tfkerassurgeon 的变化。
使用以下版本
tf 1.x , keras > 2.2 , kerassurgeon
我在尝试Deep learning example with GradientExplainer时解决了类似的问题。这是版本不兼容造成的。
添加以下代码可能会有所帮助:
import tensorflow.compat.v1.keras.backend as K
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
tf 版本为 2.3.1
kerase 版本是 2.4.0
Shap 版本为 0.36
我遇到了类似的问题,我已经使用下一行解决了它:
import tensorflow.compat.v1.keras.backend as K
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
请尝试以下代码:
import tensorflow.compat.v1.keras.backend as K
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
1.compat 允许您编写同时适用于 TensorFlow 1.x 和 2 的代码,并且应该 根据 版本导入 .
解决任何错误2.eager_execution是一调用就可以操作的接口 来自 Python。开启它可以让 Tensorflow 更加直观。
3.But 那为什么要禁用 eager_execution?
->eager_execution 比 graph_execution 慢。它逐行运行操作
这使得潜在的加速机会变得毫无用处。
4.Run tf.executing_eagerly() 检查 eager_execution 是打开还是关闭。
希望这有助于减轻您的错误。