У меня есть код Python, работающий с моделью KERAS LSTM, который прекрасно работает при непосредственном запуске с использованием кода Python (либо через SPYDER, либо через командную строку).
Python (anaconda): 3.6.7 FLASK: 0.12.3КЕРАС: 2.2.4 TENSORFLOW: 1.10.0
При попытке запустить его как приложение FLASK тот же код выдает следующую ошибку: Ошибка: граф сеанса пуст.Добавьте операции в график перед вызовом run ().
Мне пришлось установить сеанс и установить начальное значение, чтобы результаты модели не отличались от разных прогонов.Я использовал код из документации Керы (https://keras.io/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development) в своем коде, и он работает абсолютно нормально, когда запускается как простой скрипт на python.
Проблема возникает только при попытке запустить его вприложение Flask (что не имеет смысла).
Ошибка в коде появляется в строке, где я пытаюсь загрузить модель из сохраненного файла h5.
Может кто-нибудь помочь мнес этой проблемой?
Прочитал в основном все подобные проблемы из google и StackOverflow, но ни один из вариантов не сработал.
Я также проверил репозиторий KERAS на github, и, похоже, открыта та же проблемакак билет с 1 года. (https://github.com/keras-team/keras/issues/10585)
код приложения FLASK (app.py):
from flask import Flask, jsonify
from PREDICT import worker
app = Flask(__name__)
@app.route('/api/Model', methods=['GET', 'POST'])
def Model_predict():
worker()
return ('Model run')
if __name__ == '__main__':
app.run(debug=True)
код, который я использовал для установки сеанса (взятого с сайта документации KERAS), которыйприсутствует в PREDICT.py: **
# The below is necessary for starting Numpy generated random numbers in a well-defined initial state.
np.random.seed(42)
# The below is necessary for starting core Python generated random numbers in a well-defined state.
rn.seed(12345)
# Force TensorFlow to use single thread.
# Multiple threads are a potential source of non-reproducible results.
# For further details, see: https://stackoverflow.com/questions/42022950/
session_conf = tf.ConfigProto(intra_op_parallelism_threads=1,
inter_op_parallelism_threads=1)
from keras import backend as K
# The below tf.set_random_seed() will make random number generation in the TensorFlow backend have a well-defined initial state.
# For further details, see: https://www.tensorflow.org/api_docs/python/tf/set_random_seed
tf.set_random_seed(1234)
sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)
K.set_session(sess)
**
Ожидаемые результаты состоят в том, что файл модели должен быть правильно загружен для последующего прогнозирования.
Сведения об ошибке:
**
2019-05-15 00:19:19,121 ERROR : Error at Line : 363
2019-05-15 00:19:19,122 ERROR : Error : The Session graph is empty. Add operations to the graph before calling run().
2019-05-15 00:19:19,123 ERROR Stack Trace :
Traceback (most recent call last):
File "PREDICT.py", line 363, in worker
model = loading_model(output_path, weekno, prod)
File "PREDICT.py", line 104, in loading_model
m = load_model(model_name)
File "C:\Users\12345\AppData\Local\Continuum\anaconda3\lib\site-packages\keras\engine\saving.py", line 419, in load_model
model = _deserialize_model(f, custom_objects, compile)
File "C:\Users\12345\AppData\Local\Continuum\anaconda3\lib\site-packages\keras\engine\saving.py", line 287, in _deserialize_model
K.batch_set_value(weight_value_tuples)
File "C:\Users\12345\AppData\Local\Continuum\anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py", line 2470, in batch_set_value
get_session().run(assign_ops, feed_dict=feed_dict)
File "C:\Users\12345\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 877, in run
run_metadata_ptr)
File "C:\Users\12345\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\client\session.py", line 1025, in _run
raise RuntimeError('The Session graph is empty. Add operations to the '
RuntimeError: The Session graph is empty. Add operations to the graph before calling run().
**