【问题标题】:Tensorflow: Can I run my tensorflow model directly in flask?Tensorflow:我可以直接在烧瓶中运行我的 tensorflow 模型吗?
【发布时间】:2020-09-07 17:03:07
【问题描述】:

我创建了一个 tensorflow 模型,保存并测试了它。我真的不知道如何使用 tensorflow 服务,我不确定我的模型的输入和输出节点是否将其转换为 protobuf 然后使用 tensorflow 服务。所以,我想知道我是否可以直接使用flask上的预测功能并在那里加载模型进行预测?我真的很困惑为什么我们必须只使用 tensorflow 服务来部署 tensorflow 模型?有没有更简单的直接方法?

【问题讨论】:

    标签: python tensorflow conv-neural-network


    【解决方案1】:

    您可以,但您需要设置 TensorFlow Serving 服务器。然后你向服务器发送一个 post 请求。

    参考链接在这里:Deploying-keras-models-using-tensorflow-serving-and-flask

    参考链接在这里:Serving-TensorFlow flask client

    """This script wraps the client into a Flask server. It receives POST request with
    prediction data, and forward the data to tensorflow server for inference.
    """
    
    from flask import Flask, render_template, request, url_for, jsonify,Response
    import json
    import tensorflow as tf
    import numpy as np
    import os
    import argparse
    import sys
    from datetime import datetime
    
    from grpc.beta import implementations
    from tensorflow_serving.apis import predict_pb2
    from tensorflow_serving.apis import prediction_service_pb2
    
    tf.app.flags.DEFINE_string('server', 'localhost:9000', 'PredictionService host:port')
    FLAGS = tf.app.flags.FLAGS
    
    app = Flask(__name__)
    
    
    class mainSessRunning():
        def __init__(self):
            host, port = FLAGS.server.split(':')
            channel = implementations.insecure_channel(host, int(port))
            self.stub = prediction_service_pb2.beta_create_PredictionService_stub(channel)
    
            self.request = predict_pb2.PredictRequest()
            self.request.model_spec.name = 'example_model'
            self.request.model_spec.signature_name = 'prediction'
    
        def inference(self, val_x):
            # temp_data = numpy.random.randn(100, 3).astype(numpy.float32)
            temp_data = val_x.astype(np.float32).reshape(-1, 3)
            print("temp_data is:", temp_data)
            data, label = temp_data, np.sum(temp_data * np.array([1, 2, 3]).astype(np.float32), 1)
            self.request.inputs['input'].CopyFrom(
                tf.contrib.util.make_tensor_proto(data, shape=data.shape))
    
            result = self.stub.Predict(self.request, 5.0)
            return result, label
    
    
    run = mainSessRunning()
    
    print("Initialization done. ")
    
    
    # Define a route for the default URL, which loads the form
    @app.route('/inference', methods=['POST'])
    def inference():
        request_data = request.json
        input_data = np.expand_dims(np.array(request_data), 0)
        result, label = run.inference(input_data)
        di={"result":str(result),'label': label[0].tolist()}
        return Response(json.dumps(di), mimetype='application/json')
    

    【讨论】:

    • 嘿,感谢您的回复,但我想知道这是否适用于没有 keras 的 tensorflow 模型,因为我没有使用 keras 库并使用 tensorflow 并运行模型 usinf sess.run() 所以没有型号名称。
    • 是的,它会起作用的。我上传了一些代码供您参考。看看这个链接:github.com/aaxwaz/Serving-TensorFlow-Model/blob/master/…
    • 这个模型是.meta格式还是.pb格式?另外,有什么方法可以找出张量流模型的输出和输入张量?
    • .meta 格式,我认为两者都应该工作,但您需要为此编写唯一的代码。阅读图表并通过 [n for n in tf.get_default_graph().as_graph_def().node] 打印。 stackoverflow 上有一个答案,stackoverflow.com/questions/55313980/…。
    • 我们不能简单地在flask应用中加载模型保存的模型并进行预测吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多