Tensorflow训练+上线+预测过程(基于Docker)

本文主要完成以下内容

  • 使用MNIST模型进行训练
  • 基于Tensorflow Serveing 搭建过程,基于Docker
  • 模型测试
  • Tensorflow-Serveing gRPC 远端预测调用
  • Tensorflow -Serveing RESTful 远端预测调用

过程图
image-20191207231823433

Tensorfow 基于Docker 搭建过程

参考本文章

MNIST 模型训练并生成model

  1. 上传mnist 对应的代码。避免下载训练数据失败, 这里一并上传。

image-20191207210540516

  1. 进入notebook的容器, 运行训练数据

python /notebooks/mnist/source/mnist_saved_model.py --training_iteration=5000 --model_version=1 --work_dir=/notebooks/mnist/data /notebooks/model

image-201912072230503153. 训练完后 , 数据被保存在了/notebooks/model中对应宿主机的/home/notebooks/model中

image-20191207223110728

启动tensorflow-serveing docker 并指定model位置

docker run --rm -p 8501:8501 -p 8500:8500 \
-v "/home/notebooks/model:/models/mnist" \
-e MODEL_NAME=mnist -t tensorflow/serving &

说明:8500 gRPC使用端口, 8501 RESTful使用端口

mnist 模型名称

image-20191207223221694

模型测试

启动后,使用mnist_client估算模型(因为需要tensorflow环境,这里直接进入notebook的容器执行)

python ./mnist/source/mnist_client.py --server=172.17.0.3:8500 --work_dir=./mnist/data

执行中会提示缺少tensorflow_serving的模组。

因为我们使用的是1.12.3的tensorflow的版本,这边需要使用pip下载该模组

pip install 'tensorflow-serving-api~=1.12.3'

image-20191207223641874

到此tensorflow-serveing 已经启动,相关内容可以参考:官网

查看metadata定义
http://:8501/v1/models/mnist/metadata

image-20191207223830927

外部访问tensorflow-serveing gRPC方式识别

参考“TensorFlow 建立过程(单机版)” 可以创建单机版本的Tensorflow+notebook 的环境, 并通过该环境执行py文件对图片进行识别。 conda 启动tensorflow12 的环境, 启动jupyter

以下为调用的方法

import time
import numpy as np

import grpc
from tensorflow.contrib.util import make_tensor_proto
from tensorflow.contrib import util as contrib_util

from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_service_pb2_grpc
import imageio
import matplotlib.pyplot as plt
from PIL import Image

def run(host, port, image, model, signature_name):

    channel = grpc.insecure_channel('{host}:{port}'.format(host=host, port=port))
    stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
    
    # Read an image
    data = imageio.imread(image)
    data = data.astype(np.float32)
    #data = imageprepare(image)
    
    data1 = Image.open(image);
    plt.imshow(data1)
    plt.axis('off') # 不显示坐标轴
    plt.show()
    #print(data)
    
    start = time.time()
    
    # Call classification model to make prediction on the image
    request = predict_pb2.PredictRequest()
    request.model_spec.name = model
    request.model_spec.signature_name = signature_name
    #mtp = make_tensor_proto(data, shape=[1, 784])
    mtp = contrib_util.make_tensor_proto(data, shape=[1, 784])
    request.inputs['images'].CopyFrom(mtp)
    #print(request)
    result = stub.Predict(request, 10.0)
    
    end = time.time()
    time_diff = end - start
    
    print('耗时: {}'.format(time_diff))
    response = np.array(result.outputs['scores'].float_val)
    prediction = np.argmax(response)
    print('{}{}'.format('识别为:',prediction))
run("ip地址", 8500, "./data/1.png", "mnist", "predict_images")
run("ip地址", 8500, "./data/2.png", "mnist", "predict_images")
run("ip地址", 8500, "./data/3.png", "mnist", "predict_images")

image-20191207225046885

外部通过RESTful API的方式呼叫

以下通过python的方法来使用,因为各种语言均可使用RESTful的呼叫。 则Python通过其他也可以一样通过。

run("ip地址", 8501, "./data/1.png", "mnist", "predict_images")
run("ip地址", 8501, "./data/2.png", "mnist", "predict_images")
run("ip地址", 8501, "./data/3.png", "mnist", "predict_images")

image-20191207225110532

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值