python - weak object has gone away_what does it mean?
问题描述
I am using tensorflow for a problem where there is a function which is called once and it works correctly but the second time it is called the error " weak object has gone away" comes up which I don't understand what it means and where the problem might be.
The full trackback is as follows:
----------------------------------------------------------------------
TypeError Traceback (most recent call last)
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in _hash_fix(self, elem)
108 try:
--> 109 hash(elem)
110 except TypeError:
TypeError: weak object has gone away
During handling of the above exception, another exception occurred:
AttributeError Traceback (most recent call last)
<ipython-input-23-f1a95ac20255> in <module>
----> 1 default_settings['sur_model'].predict_with_grad(np.atleast_2d(xx))
<ipython-input-5-7e554cb74b1d> in predict_with_grad(self, x)
127
128 with tf.GradientTape() as t:
--> 129 m, v = self.predict(x)
130 dmdx = t.gradient(m, x)
131 with tf.GradientTape() as t:
<ipython-input-5-7e554cb74b1d> in predict(self, X)
116 """
117
--> 118 X_embed = self.embedding_model(X)
119 #print('X_embed',X_embed)
120 m, v = self.Pr_model.predict_y(X_embed)
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/keras/engine/base_layer.py in __call__(self, inputs, *args, **kwargs)
889 with base_layer_utils.autocast_context_manager(
890 self._compute_dtype):
--> 891 outputs = self.call(cast_inputs, *args, **kwargs)
892 self._handle_activity_regularization(inputs, outputs)
893 self._set_mask_metadata(inputs, outputs, input_masks)
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/def_function.py in __call__(self, *args, **kwds)
455
456 tracing_count = self._get_tracing_count()
--> 457 result = self._call(*args, **kwds)
458 if tracing_count == self._get_tracing_count():
459 self._call_counter.called_without_tracing()
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/def_function.py in _call(self, *args, **kwds)
492 # In this case we have not created variables on the first call. So we can
493 # run the first trace but we should fail if variables are created.
--> 494 results = self._stateful_fn(*args, **kwds)
495 if self._created_variables:
496 raise ValueError("Creating variables on a non-first call to a function"
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in __call__(self, *args, **kwargs)
1820 def __call__(self, *args, **kwargs):
1821 """Calls a graph function specialized to the inputs."""
-> 1822 graph_function, args, kwargs = self._maybe_define_function(args, kwargs)
1823 return graph_function._filtered_call(args, kwargs) # pylint: disable=protected-access
1824
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in _maybe_define_function(self, args, kwargs)
2117
2118 with self._lock:
-> 2119 graph_function = self._function_cache.primary.get(cache_key, None)
2120 if graph_function is not None:
2121 return graph_function, args, kwargs
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in __eq__(self, other)
115
116 def __eq__(self, other):
--> 117 return self._fields_safe == other._fields_safe # pylint: disable=protected-access
118
119
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in _fields_safe(self)
91 def _fields_safe(self):
92 """Hash & equality-safe version of all the namedtuple fields."""
---> 93 return (self._hash_fix(self.input_signature), self.parent_graph,
94 self.device_functions, self.colocation_stack,
95 self.in_cross_replica_context)
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in _hash_fix(self, elem)
99 # Descend into tuples
100 if isinstance(elem, tuple):
--> 101 return tuple(self._hash_fix(i) for i in elem)
102
103 if isinstance(elem, set):
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in <genexpr>(.0)
99 # Descend into tuples
100 if isinstance(elem, tuple):
--> 101 return tuple(self._hash_fix(i) for i in elem)
102
103 if isinstance(elem, set):
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in _hash_fix(self, elem)
99 # Descend into tuples
100 if isinstance(elem, tuple):
--> 101 return tuple(self._hash_fix(i) for i in elem)
102
103 if isinstance(elem, set):
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in <genexpr>(.0)
99 # Descend into tuples
100 if isinstance(elem, tuple):
--> 101 return tuple(self._hash_fix(i) for i in elem)
102
103 if isinstance(elem, set):
~/.local/share/virtualenvs/tf-tRAPLeXL/lib/python3.6/site-packages/tensorflow_core/python/eager/function.py in _hash_fix(self, elem)
110 except TypeError:
111 v = elem()
--> 112 return (v.__class__, tensor_spec.TensorSpec(v.shape, v.dtype))
113
114 return elem
AttributeError: 'NoneType' object has no attribute 'shape'
I find it rather strange and haven't found a clue to know from where I should fix it.
解决方案
万一有人像我一样来到这里,如果您使用 imageio,也会出现此错误。使用 imageio 对象调用该函数两次会给你这个错误。但是如果你将它转换为一个 numpy 数组它会工作
import tensorflow as tf
import imageio
@tf.function
def square(x):
return x**2
# wont work
# a = square(imageio.imread('myimage.png'))
# a = square(imageio.imread('myimage.png'))
# will work!
a = square(np.asarray(imageio.imread('myimage.png')))
a = square(np.asarray(imageio.imread('myimage.png')))
推荐阅读
- javascript - 如何在 Windows 10 上使用 Open 包启动 Edge
- python - 在导入tensorflow的过程中,每次都会出现这个错误。我确实尝试卸载然后再次安装。它仍然给出同样的错误
- html - 在没有最大宽度的情况下右对齐图像
- encryption - 公司如何更改其加密密钥?
- python-3.x - Python:如何获取文件路径的最后 n 个元素
- python - 附加字典数组
- c++ - MinGW 上的 GCC:libcurl 中不支持或禁用协议“https”
- java - POJO 的 ArrayList 未保存在所有设备共享首选项上
- python-3.x - 将 pyspark 数据帧写入雪花表时出错 [snowflake-cloud-data-platform]
- flutter - 如何删除 SliverAppBar 中的空白空间?