others - python - ''_thread._local' object has no attribute 'value''?

python 3.6.4

Flask =1.1.1,

Keras =2.3.0,

TensorFlow =1.14.0,我有一个Flask服务器,可以从客户端获取图片,使用带有TensorFlow后端的Keras模型,我试图从预先训练的模型中得到一个预测。

我使用下面的函数上传模型(作为类的一部分)





 model_path = self.conf["model_path"] // path in conf to model


 self.model = load_model(model_path) // uploading the model


 self.model._make_predict_function()


 p_log.info("model had been upload successfully")



我使用下面的代码进行预测:


cm_prediction = self.model.predict([face, reye, leye, fg])[0]



现在,我得到了以下错误:


Traceback (most recent call last):


 File"D:code_projectpath to project", line 75, in predict


 cm_prediction = self.model.predict([face, reye, leye, fg])[0]


 File"D:code_projectpath to project", line 1462, in predict


 callbacks=callbacks)


 File"D:code_projectpredictservervenvlibsite-packageskerasenginetraining_arrays.py", line 276, in predict_loop


 callbacks.model.stop_training = False


 File"D:code_projectpredictservervenvlibsite-packageskerasenginenetwork.py", line 323, in __setattr__


 super(Network, self).__setattr__(name, value)


 File"D:code_projectpredictservervenvlibsite-packageskerasenginebase_layer.py", line 1215, in __setattr__


 if not _DISABLE_TRACKING.value:


AttributeError: '_thread._local' object has no attribute 'value'



我正在运行一个简单的Flask服务器:


if __name__ == '__main__':


 pre = predictor()


 # app.run(debug=True)


 app.run(host='0.0.0.0', port=12345)



如果在没有Flask服务器的情况下运行程序,我可以得到预测,但是放在服务器上就出错了。

时间:

keras在19年9月17日发布了新版本2.3.0,我更新了所有库,其中包括keras。自从我更新后,这个消息就出现了。

在我降级到Keras 2.2.5之后问题消失了。

今天构建Docker容器时,我遇到了同样的问题,通过将Keras版本降级到2.2.4进行了修复。

Keras 2.3.0有同样的问题。

对于那些不想降级的人来说,另一个修复方法是在app.run()中设置threaded=False

...