当前位置: 首页 > 面试题库 >

部署Keras模型

陈泰宁
2023-03-14
问题内容

我部署了一个keras模型,并通过flask API将测试数据发送到该模型。我有两个文件:

首先:My Flask应用程序:

# 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)

第二:文件Im用于将json数据发送到api端点:

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密层模型,并且训练没有错误。


问题答案:

Flask使用多个线程。你遇到的问题是因为tensorflow模型未在同一线程中加载和使用。一种解决方法是强制tensorflow使用gloabl默认图。

加载模型后添加

global graph
graph = tf.get_default_graph() 

而在你的预测

with graph.as_default():
    y_hat = keras_model_loaded.predict(predict_request, batch_size=1, verbose=1)


 类似资料:
  • 错误为: 谁能帮帮我吗?

  • GX8010中,CPU和MCU各有一个NPU,CPU中的为主NPU,MCU中的为SNPU,NPU比SNPU的性能更强,功耗也更大。 CPU可以控制NPU或SNPU,MCU只能控制SNPU。 由于CPU和MCU的特点不同,在其上面使用NPU的API也不同。 CPU中使用NPU或SNPU 生成能在CPU上运行的模型文件,需要在编译模型的配置文件中指定: OUTPUT_TYPE: raw 在CPU上内存

  • 问题内容: 我已经用训练了一个回归网络。我在训练和测试阶段都使用了图层。我已经绘制了这些图,结果看起来很有希望。 现在,我要部署模型并使用它。我知道如果使用了,最后一层必须在部署文件中。在什么情况下该怎么办? 问题答案: 对于部署,您只需要丢弃损失层(在您的情况下为该层)。网络的输出是您输入的损失层。 对于层(和),您需要 替换 损耗层,因为损耗层在其中包括一个额外的层(出于计算原因)。

  • Keras有两种类型的模型,序贯模型(Sequential)和函数式模型(Model),函数式模型应用更为广泛,序贯模型是函数式模型的一种特殊情况。 两类模型有一些方法是相同的: model.summary():打印出模型概况,它实际调用的是keras.utils.print_summary model.get_config():返回包含模型配置信息的Python字典。模型也可以从它的config

  • Keras有两种类型的模型,顺序模型(Sequential)和泛型模型(Model) 两类模型有一些方法是相同的: model.summary():打印出模型概况 model.get_config():返回包含模型配置信息的Python字典。模型也可以从它的config信息中重构回去 config = model.get_config() model = Model.from_config(con

  • 在 Keras 中有两类主要的模型:Sequential 顺序模型 和 使用函数式 API 的 Model 类模型。 这些模型有许多共同的方法和属性: model.layers 是包含模型网络层的展平列表。 model.inputs 是模型输入张量的列表。 model.outputs 是模型输出张量的列表。 model.summary() 打印出模型概述信息。 它是 utils.print_sum