2022-02-12
机器学习问题不仅是一个科学问题,也是一个工程问题。
大多数年轻的数据科学家希望将大部分时间用于构建完美的机器学习模型,但企业不仅需要训练一个完美的模型,还需要部署它以方便用户服务。
如下图所示,机器学习系统仅由机器学习生成的一小部分组成,而围绕着中间的小黑盒,所需的基础设施庞大而复杂。
因此,在实际应用中,优秀的程序员不仅要学会构建完美的机器学习模型,还需要将其部署给用户。提供便捷的服务。
在本教程中,作者将重点介绍机器学习模型的部署,并使用最流行的2个框架来完成实践。
本教程内容摘自实验楼近期的好课《2模型部署方法实践》。教程中使用的实验环境是实验楼提供的在线web环境。
强烈建议想学教程的朋友可以登录实验楼官网,直接敲代码会更好。
首先,我们来谈谈如何使用预训练模型。
1.简介
本部分的实验将介绍该系列中的模型,这些模型是为移动和嵌入式深度学习应用程序设计的网络。训练也可以达到预期的速度要求。
在后续的实验中,我们将使用该模型进行部署演示。
2.知识点
3.环境配置
目前2已经正式发布,需要通过pip -U安装升级。在线环境下,我们需要先卸载旧版本,再安装2。
# 解决线上环境的一些依赖问题,本地无需这些操作
!pip install --upgrade pip msgpack setuptools h5py
!pip uninstall tensorflow -y
!pip install -U --ignore-installed wrapt # 安装 TensorFlow 2.0
4.选择图片
在本实验中,我们使用库中的内置图像进行图像识别。里面有一张猫的图片,后面我们会用这张图片来做识别任务。
from skimage import data
import matplotlib.pyplot as plt
%matplotlib inline
# skimage 中自带一张猫的图片
image = data.chelsea()
plt.imshow(image)
(注:如果您对课程中使用的实验楼在线环境不熟悉,可以先学习课程《实验室楼在线环境使用指南》。)
5.导入预训练模型
接下来,从 Keras- 导入预训练模型。由于原始模型托管在海外服务器上,在实验室搭建环境中,需要将预训练好的模型从实验室搭建镜像服务器下载到~/.keras/目录下,方便后续模型加载。
# 下载预训练模型到线上环境指定目录
!wget -nc "https://labfile.oss.aliyuncs.com/courses/1435/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_224.h5" -P "/root/.keras/models"
!wget -nc "https://labfile.oss.aliyuncs.com/courses/1435/imagenet_class_index.json" -P "/root/.keras/models"
通过指定 =” 加载预训练模型。
from tensorflow.keras.applications.mobilenet_v2 import MobileNetV2
# 载入 ImageNet 预训练模型
model = MobileNetV2(weights='imagenet')
model.summary()
6.数据处理
接下来,我们尝试识别上面的示例图像,首先我们需要将图像转换成预训练模型可以输入的形状。我们将图像缩放到224*224,在图像矩阵前面加一维,即(224,224,3)的图像矩阵变为(1,224,224,3)。
然后可以调用方法将向量处理为最终支持的输入类型。
!pip install opencv-python==4.1.2.30 # 安装所需 OpenCV
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
import numpy as np
import cv2
# 将图像放缩到 224*224 的大小
image = cv2.resize(image, (224, 224))
# 将图像矩阵前面增加一维,即将 (224,224,3) 的图像矩阵变成 (1,224,224,3)
x = np.expand_dims(image, 0)
# 预处理图像,在 Keras 中,在传入图片数组值 (0-255) 的基础之上,
# 进行先除以 127.5,然后减 1,最后将值的范围为放缩到 (-1,1) 上
x = preprocess_input(x)
x.shape
7.模型预测
接下来,使用model对输入数据进行预测,模型输出是一个(1,1000)的向量,向量中的每个元素代表对应标签的预测值。
output = model.predict(x)
output.shape
这里对模型输出的向量进行解码,解码结果为预测结果,其中top=5表示最有可能输出的前5个。
from tensorflow.keras.applications.mobilenet_v2 import decode_predictions
preds = decode_predictions(output, top=5)
preds
从输出结果可以看出,模型预测的图像最有可能的类别是猫。
8. 保存模型
我们可以在训练中和训练后保存模型,模型部署就是将保存的模型用于实际应用。在训练过程中,2提供了两种保存模型的方式。
1)HDF5 文件
实验一开始,我们下载了预训练好的模型。0_224.h5是一个HDF5格式的文件,保存的模型可以看成一个二进制的blob,其中模型的权重,模型结构和优化器配置同时保存。
2)
在2中,还提供了使用这种方法保存模型的好处是与语言无关。例如,您可以在 Java 中训练模型,然后在 Java 中加载它。此外,您必须在部署模型时使用该格式。转换方法实现如下。
import tensorflow as tf
import time
saved_model_path = './saved_models/{}'.format(int(time.time()))
# 创建一个 SavedModel,并将其放在带有 tf.keras.experimental.export_saved_model 的带时间戳的目录中
tf.keras.models.save_model(model, saved_model_path)
在目录中,
.
├── assets
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index
.pb为数据流图文件,包含图结构,文件夹中保存ckpt文件集合,.data-xxx保存参数值,.index保存对应参数。
9.实验总结
在本节的实验中,我们学习了如何使用 Keras-pre- 模型,并将预训练好的模型从 h5 格式转换为格式。在接下来的实验中,我们将使用本实验中的模型、处理方法和生成的结果。接下来在本实验中,我们将使用 read 进行部署。
《实践中的2种模型部署方法》第一部分实验结束。想看后续教程的朋友可以点击“2模型部署方法实践”,以下实验如下:
该课程目前正在特价中,目前有机会尝试。
补充阅读:
新人可以选择实验楼的入门课程(全部免费):
2.0 新功能快速入门》
《实验搭建在线环境使用指南》
《基础教程》
《Flask Web 框架》
分类:
p>
技术要点:
相关文章:
暂无评论内容