Поддерживается ли правильная загрузка и прогнозирование модели в разных потоках в Tensorflow?
Некоторый фон:
При попытке загрузить модель в потоке A и затем прогнозировать ее в потоке B нам выдается следующее сообщение об ошибке:
ValueError: Tensor SOME_TENSOR is not an element of this graph.
Я нашел этот поток TF GitHub , предлагая решить его путем сохранения графика при загрузке модели и использования его по умолчанию при прогнозировании. Вроде как это:
# thread A
global graph
graph = tf.get_default_graph()
...
# thread B
with graph.as_default():
preds = model.predict(image)
Я пытался это сделать, но я также получал ошибки из-за различных сессий и неинициализированных переменных:
tensorflow.python.framework.errors_impl.FailedPreconditionError:
Failed precondition: Error while reading resource variable lstm_2_3/bias from Container: localhost. This could mean that the variable was uninitialized. Not found: Container localhost does not exist. (Could not find resource: localhost/lstm_2_3/bias)
Я начал с исправления keras.backend.get_session().run(tf.compat.v1.global_variables_initializer())
но это не сработало, выдавая неверные прогнозы. Вместо этого я решил трактовать сессию так же, как график, и перенести ее с момента загрузки модели.
Таким образом, у меня есть следующее решение:
# thread A
global graph
global sess
graph = tf.get_default_graph()
sess = K.get_session()
...
# thread B
with graph.as_default():
try:
preds = model.predict(image)
except FailedPreconditionError:
K.set_session(sess)
preds = model.predict(image)
Не Я собираюсь ie, это кажется хакерским. Это правильный способ обработки загрузки / прогнозирования модели в отдельных потоках? Что-то не так с этим подходом?