1

Я использую предварительно подготовленную модель keras, и при попытке получить предсказания возникла ошибка. У меня есть следующий код в колбах сервере:ValueError: Tensor: (...) не является элементом этого графика

from NeuralNetwork import * 

@app.route("/uploadMultipleImages", methods=["POST"]) 
def uploadMultipleImages(): 
    uploaded_files = request.files.getlist("file[]") 
    getPredictionfunction = preTrainedModel["VGG16"] 

    for file in uploaded_files: 
     path = os.path.join(STATIC_PATH, file.filename) 
     result = getPredictionfunction(path) 

Это то, что я в моем NeuralNetwork.py файл:

vgg16 = VGG16(weights='imagenet', include_top=True) 
def getVGG16Prediction(img_path): 

    model = vgg16 
    img = image.load_img(img_path, target_size=(224, 224)) 
    x = image.img_to_array(img) 
    x = np.expand_dims(x, axis=0) 
    x = preprocess_input(x) 

    pred = model.predict(x) #ERROR HERE 
    return sort(decode_predictions(pred, top=3)[0]) 

preTrainedModel["VGG16"] = getVGG16Prediction 

Однако выполнение этого кода ниже, не создают какие-либо ошибки:

if __name__ == "__main__": 
    STATIC_PATH = os.getcwd()+"/static" 
    print(preTrainedModel["VGG16"](STATIC_PATH+"/18.jpg")) 

Вот полная ошибка: enter image description here

Любые комментарии или предложения очень ценятся. Спасибо.

ответ

1

EDIT: То, что я написал ниже не похоже на работу при развертывании приложения (я только тестирование на местном уровне до сих пор). Модель в app.config слишком часто загружается. (по каждому запросу?)

По совпадению у меня была такая же проблема вчера. Кажется, есть некоторые проблемы между взаимодействием TensorFlow и Flask. К сожалению, я не знаю достаточно о внутренности одного из них, чтобы действительно понять проблему, но я могу предоставить хак, который помог мне заставить его работать. (Примечание: я использовал Python3, но я не думаю, что это имеет значение здесь.)

Проблема возникает при инициализации модели в глобальном пространстве имен вашего флеш-приложения. Поэтому я загрузил модель непосредственно в app.config:

app.config.update({"MODEL":VGG16(weights='imagenet', include_top=True)}) 
# ... 
app.config["MODEL"].predict(x) 

Может быть, вы можете загрузить модель в вашем server.py вместо вашего NeuralNetwork.py и передать его getVGG16Prediction вместе с img_path?

+4

В моем случае проблема заключалась в том, что колба загружала тензорный поток дважды. Когда я изменил app.run (debug = False), тогда он работает, но я не знаю почему. Вот ссылка на этот вопрос: http://stackoverflow.com/questions/42015797/is-tensorflow-loading-twice-in-pycharm. Я не уверен, что в вашем случае это то же самое, но я надеюсь, что это поможет. Благодарим за ваше предложение :) – matchifang

Смежные вопросы