Использование модели keras загрузки multiprocessing.pool вызывает прогноз ValueError Tensor Tensor

Я сохранил более 1000 моделей для каждого предмета. Теперь мне нужно загрузить все эти модели в память (фрейм данных), чтобы делать прогнозы. Если я просто использую цикл for для загрузки этих моделей, каждая загрузка будет на 3 секунды медленнее, чем загрузка предыдущей модели. Поэтому я пытаюсь использовать multiprocessing.pool (ThreadPool).

Но, как ни странно, использование ThreadPool вызовет предсказание «ValueError: Tensor Tensor». При использовании нормальной загрузки предсказание хорошее.

Я пробовал поток, также получил сообщение об ошибке

#following code will lead to ValueError
from multiprocessing.pool import ThreadPool as Pool
def load_model(stock):
    model_pred.at[0, stock] = keras.models.load_model (
        'C:/Users/chenp/Documents/rqpro/models/{}_model.h5'.format (stock))


pool = Pool(processes=16)
for stock in trade_stocks['stock']:
    pool.map (load_model, (stock,))

#Prediction
for stock in trade_stocks['stock']:
    model = model_pred.loc[0, stock]
    prediction = model.predict(pred_data)

#Get following msg:
ValueError: Tensor Tensor("dense_9/Softmax:0", shape=(?, 2), dtype=float32) is not an element of this graph.

#Normal code but too low efficient
for stock in trade_stocks['stock']:
    model_pred.at[0, stock] = keras.models.load_model(
           'C:/Users/chenp/Documents/rqpro/models/{}_model.h5'.format(stock))





#Get following msg:
ValueError: Tensor Tensor("dense_9/Softmax:0", shape=(?, 2), dtype=float32) is not an element of this graph.

person pei chen    schedule 26.05.2019    source источник


Ответы (1)


Это происходит потому, что Keras не является потокобезопасным. Для решения этой проблемы перед прогнозированием используйте _make_predict_function (). Для получения подробного ответа отметьте

person Rangeet Pan    schedule 02.04.2020