python - Tensorflow:我可以直接在 Flask 中运行我的 tensorflow 模型吗?

标签 python tensorflow conv-neural-network

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

最佳答案

可以,但您需要设置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')

关于python - Tensorflow:我可以直接在 Flask 中运行我的 tensorflow 模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61928192/

相关文章:

python - 为什么我的应用程序会泄漏内存?如何避免内存泄漏?

python - networkx是否支持按标签进行dfs遍历

python - 由于语法错误而无法使用 mysql.connector 库?

python - 如何使用 TensorFlow reader 和 queue 同时读取两个文件?

python - 如何在 Tensorflow 的当前范围之外创建变量?

Python 3 有效地迭代列表字典

neural-network - Keras 密集层错误 : TypeError: 'int' object is not callable

conv-neural-network - 生成图像上的白点 CycleGAN

graph - Node2Vec 嵌入到全局图特征

machine-learning - TensorFlow - random_crop 在 Cifar10 示例中做什么?