Использование Flask-Socketio с моделью Tensorflow приводит к ошибке модели при прогнозировании - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь запустить модель с сохраненными весами на моем сервере python flask-socketio. Когда я запускаю приложение, насколько я могу судить, веса загружаются правильно. Когда я запускаю интерфейс, который генерирует событие и заставляет модель выдавать прогноз на стороне сервера, я получаю сообщение об ошибке. Я ожидаю, что прогноз будет отправлен обратно во внешний интерфейс, чтобы я мог обновить отображение.

Это использует бэкэнд-флешку-сокет и socket.io на внешнем интерфейсе для связи на основе событий. Я испробовал множество решений, которые работали для других, использующих обычные API REST, основанные на Flask, но ни одно из них не было перенесено в flask-socketio.

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
import numpy as np

def init():
    global model, graph
    model = Sequential()
    model.add(Dense(32, activation='relu', input_shape=(6,)))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(2, activation='linear'))
    model.compile(loss='mse', optimizer='adam', metrics=['mae'])
    model.load_weights("training_1/cp.ckpt")
    model._make_predict_function()
    graph = tf.get_default_graph()

@socketio.on('start_play')
def handle_play(json, method=['GET', 'POST']):
    global graph

    if NEURAL_NET_PLAY:
        with graph.as_default():
            state = np.array([game.get_game_state_vector()])
            prediction = model.predict(state)
            if prediction == 0:
                game.time_step({'left' : True, 'right' : False})
            else:
                game.time_step({'left' : False, 'right' : True})

    else:
        game.time_step(json)

if __name__ == '__main__':
    print("running python server")
    global NEURAL_NET_PLAY
    NEURAL_NET_PLAY = True
    if NEURAL_NET_PLAY:
        init()
    socketio.run(app, debug=False)

Сообщение об ошибке, которое я получаю при запуске:

tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable dense_2/bias from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/dense_2/bias/N10tensorflow3VarE does not exist.
     [[{{node dense_2/BiasAdd/ReadVariableOp}}]]

и в трассировке стека происходит сбой в файле model.predict.

1 Ответ

0 голосов
/ 09 июля 2019

Я полагаю, что это может быть проблемой с резьбой в колбе, потому что Keras не безопасен для потоков. Я столкнулся с подобной проблемой, когда пару месяцев назад хотел использовать колбу и керас. Пожалуйста, отметьте этот фрагмент . Может быть, это поможет вам и даст вам решение.

Вы можете найти дополнительную информацию здесь .

...