When I use Keras to predict behind a web service, it occurred an error. and the error message is like flowing:java
self._make_predict_function()
File
"/usr/local/lib/python3.4/dist-packages/keras/engine/training.py"
, line
679
, in _make_predict_function
**self._function_kwargs)
File
"/usr/local/lib/python3.4/dist-packages/keras/backend/tensorflow_backend.py"
, line
615
, in function
return
Function(inputs, outputs, updates=updates)
File
"/usr/local/lib/python3.4/dist-packages/keras/backend/tensorflow_backend.py"
, line
589
, in __init__
with tf.control_dependencies(self.outputs):
File
"/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/ops.py"
, line
3192
, in control_dependencies
return
get_default_graph().control_dependencies(control_inputs)
File
"/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/ops.py"
, line
2993
, in control_dependencies
c = self.as_graph_element(c)
File
"/usr/local/lib/python3.4/dist-packages/tensorflow/python/framework/ops.py"
, line
2291
, in as_graph_element
raise ValueError(
"Tensor %s is not an element of this graph."
% obj)
ValueError: Tensor Tensor(
"Sigmoid_2:0"
, shape=(?,
17
), dtype=float32) is not an element of
this
graph.
|
This error appears when using tensorflow backend. After search this error, I found it's a bug when using tensorflow graph cross threads.python
Here's how to fix the bug:git
#Right after loading or constructing your model, save the TensorFlow graph:
graph = tf.get_default_graph()
#In the other thread (or perhaps in an asynchronous event handler),
do
:
global graph
with graph.as_default():
(...
do
inference here ...)
|
refer to: https://github.com/fchollet/keras/issues/2397github