我正在部署keras模型并通过flask api将测试数据发送到模型 . 我有两个文件:
第一:我的烧瓶应用:
# Let's startup the Flask application
app = Flask(__name__)
# Model reload from jSON:
print('Load model...')
json_file = open('models/model_temp.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
keras_model_loaded = model_from_json(loaded_model_json)
print('Model loaded...')
# Weights reloaded from .h5 inside the model
print('Load weights...')
keras_model_loaded.load_weights("models/Model_temp.h5")
print('Weights loaded...')
# URL that we'll use to make predictions using get and post
@app.route('/predict',methods=['GET','POST'])
def predict():
data = request.get_json(force=True)
predict_request = [data["month"],data["day"],data["hour"]]
predict_request = np.array(predict_request)
predict_request = predict_request.reshape(1,-1)
y_hat = keras_model_loaded.predict(predict_request, batch_size=1, verbose=1)
return jsonify({'prediction': str(y_hat)})
if __name__ == "__main__":
# Choose the port
port = int(os.environ.get('PORT', 9000))
# Run locally
app.run(host='127.0.0.1', port=port)
第二:我用来发送json数据发送到api endpoints 的文件:
response = rq.get('api url has been removed')
data=response.json()
currentDT = datetime.datetime.now()
Month = currentDT.month
Day = currentDT.day
Hour = currentDT.hour
url= "http://127.0.0.1:9000/predict"
post_data = json.dumps({'month': month, 'day': day, 'hour': hour,})
r = rq.post(url,post_data)
我从Flask得到关于Tensorflow的回复:
ValueError:Tensor Tensor(“dense_6 / BiasAdd:0”,shape =(?,1),dtype = float32)不是此图的元素 .
我的keras模型是一个简单的6密集层模型,训练没有错误 .
有任何想法吗?
1 回答
Flask使用多个线程 . 您遇到的问题是因为tensorflow模型未加载并在同一个线程中使用 . 一种解决方法是强制tensorflow使用gloabl默认图 .
加载模型后添加此项
在你的预测中