Я пытаюсь запустить модель с сохраненными весами на моем сервере 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.