随着云计算和 Serverless 技术的发展,越来越多的应用和服务转向了无服务器架构。而机器学习和人工智能技术的应用也渐渐成为了 Serverless 应用开发中的重要组成部分。本文将介绍在 Serverless 应用中使用机器学习和人工智能技术的一些技巧和案例,帮助开发者更好地应用这些技术。
使用无服务器机器学习平台
第一种使用机器学习和人工智能技术的方式是使用无服务器机器学习平台。这些平台包含了机器学习和深度学习的各种算法和工具,可以帮助开发者完成从数据收集、预处理、建模到推理的全部流程。无服务器机器学习平台的优点在于:
- 弹性伸缩:可以随着流量的变化调整计算资源的使用。
- 无服务器计费:只需要按照使用量来进行计费,减少了开发者的成本。
- 开箱即用:可以快速启动一个机器学习项目,节省了繁琐的初始化操作。
目前市面上比较知名的无服务器机器学习平台有 AWS SageMaker、Azure Machine Learning Studio 和 Google Cloud AI Platform 等。下面以 AWS SageMaker 为例来介绍如何在 Serverless 应用中使用无服务器机器学习平台。
示例:使用 AWS SageMaker 完成图像分类应用
- 准备数据
在使用机器学习算法训练模型之前,需要准备一组数据集。本例中,我们将使用一个包含猫和狗两种类别的图像数据集,下载地址为 https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data。下载完成后,解压并将数据集放置到 S3 存储桶中。
- 创建 SageMaker Notebook 实例
在 AWS SageMaker 控制台中创建一个 Notebook 实例。在实例启动后,可以使用 Jupyter Notebook 来访问实例中的 Python 环境。
- 构建模型
使用 Jupyter Notebook 中的 Python 代码构建图像分类模型。本例中使用的是 TensorFlow 2.x 框架,代码如下:
-- -------------------- ---- ------- ------ ---------- -- -- ---- ----------------------- ------ ---------- ---- ----------------------- ------ ------- ------------- -------- ------ ------- - -------- ----- - ------------ -------------------- --- --- ----------------- ---- --- ------------------- -------------------------- ---- -------------------- --- --- ------------------- -------------------------- ---- --------------------- --- --- ------------------- -------------------------- ---- --------------------- --- --- ------------------- -------------------------- ---- -------------------- -------------------- ------------------- ----------------------- ------------------ ---------------------- - ---- ----------------------------------------- ----------------------------------------------- ---------------- - ---- ---- ------------------------------------ ------ ------------------ ------------- - ---------------------------------- ------------ - ---------------------------------- --------- - ------------ -------------- - ----------------- --------------- - ---------------------------------- ---------- ----------------- ----- -------------- -------------------- -------------------- - --------------------------------- --------------- ----------------- ----- -------------- -------------------- ------- - ---------- ---------------- -------------------- ---------- ------------------------------------- --------------------
这段代码构建了一个卷积神经网络模型,并使用猫狗图像数据集进行训练。训练完成后,可以使用作图工具来查看训练过程的准确率和损失值曲线。
- 部署模型
在 Jupyter Notebook 中,使用 AWS SageMaker 提供的 Python SDK 来部署模型。代码如下:
-- -------------------- ---- ------- ---- ---------------------------- ------ ----- - ----- -- ---- ---------------------- ---- -- -- -------- ------------------------ - -- --------- -- ----- - -------------------------------------------- --------------------------------------- - ---- --------- - ----------------------------------------- -------------------------
这段代码首先将训练好的模型保存到 S3 存储桶中,然后使用 AWS SageMaker Python SDK 创建一个 SageMaker 模型并部署到云端。部署完成后,可以通过 SageMaker 给出的 Endpoint 来调用部署好的模型完成推理任务。
总结
使用无服务器机器学习平台来完成 Serverless 应用中的机器学习和人工智能任务既快速又方便。开发者无需关心计算资源的申请和管理,只需要将注意力专注于算法的优化和性能的提升。
在 Lambda 中使用 TensorFlow.js
第二种使用机器学习和人工智能技术的方式是在 Lambda 函数中使用 TensorFlow.js。TensorFlow.js 是 TensorFlow 的一个 JavaScript 版本,可以运行在浏览器和 Node.js 等环境中。在 Lambda 函数中使用 TensorFlow.js 的好处在于:
- 无需安装和配置 Python 和 TensorFlow 等环境。
- 可以直接使用 Lambda 函数中的事件和资源,方便应用开发和部署。
- TensorFlow.js 具有良好的跨平台性,可以很好地兼容不同终端环境。
下面以在 Lambda 函数中使用 TensorFlow.js 完成图像分类应用为例进行介绍。
示例:在 Lambda 函数中使用 TensorFlow.js
- 准备模型
在本例中,我们将使用 TensorFlow.js 的一个官方模型进行示范,模型的地址为 https://tfhub.dev/google/tfjs-model/imagenet/mobilenet_v2_100_224/classification/3/default/1。下载完成后,将模型的目录结构拷贝到 Lambda 函数的目录中。
- 准备事件
在 Lambda 函数中,需要定义一个事件,用于接收传入的数据和参数。在本例中,我们需要接收一个包含图像 URL 的 JSON 对象,代码如下:
{ "imageUrl": "<image_url>" }
- 解析事件
在 Lambda 函数被触发后,需要解析传入的事件。针对本例,我们需要解析传入事件中的图像 URL 并将其下载到本地文件系统中。代码如下:
-- -------------------- ---- ------- ----- ----- - ----------------- ----- -- - -------------- --------------- - ----- ------- -- - -- ---- ----- -------- - --------------- -- ---- ----- ----- - ----- ------------------------ ---------------------------------- ------ ---------- --
这段代码使用 Node.js 的 https
和 fs
模块来下载和保存图像数据。
- 加载模型
在解析事件后,需要加载并初始化 TensorFlow.js 的模型。代码如下:
-- -------------------- ---- ------- ----- -- - --------------------------------- ----- ---- - ---------------- ----- ---------- - -------------------- ----------------------------------------- --------------- - ----- ------- -- - -- ---- ----- ----- - ----- ----------------------------------------------------- --
这段代码使用 TensorFlow.js 的 Node.js 版本来加载模型,并将模型放到 Lambda 函数的可读目录中。
- 图像分类
模型加载完成后,我们可以使用 TensorFlow.js 提供的 API 对图像进行分类。代码如下:
-- -------------------- ---- ------- --------------- - ----- ------- -- - -- ---- ----- ----- - ----- ----------------------------------------------------- -- ---- ----- -------- - --------------- -- ---- ----- ----- - ----- ------------------------ ---------------------------------- ------ ---------- -- ---- ----- ------ - ---------------------------------- ----- ------- - --------------------------- --- ----- --------- - -- ----- ----- - ---------------------------------------------------------------------- ----- ---------- - ----- -------------------------- ----- ------ - ---------------------- --------------------- ---------------------- -------- --
这段代码使用 Node.js 的 fs
模块来读取和写入图像数据。对于每个图像,可以使用 TensorFlow.js API 将其解码为 tensor 对象,进而进行分类并输出分类结果。
总结
在 Lambda 函数中使用 TensorFlow.js 进行图像分类任务非常方便,可以从 Python 和 TensorFlow 的复杂性中解放出来。同时,由于 Node.js 的高性能和 TensorFlow.js 的跨平台性,Lambda 函数的性能和应用范围也得到了有效的提升。除此之外,Lambda 函数中还可以使用其他的 JavaScript ML 库和服务,例如 Brain.js、ConvNetJS、Google Cloud AutoML 等。这些技术和服务可以通过 Lambda 函数完成更加丰富和复杂的机器学习和人工智能任务。
总结
Serverless 应用的崛起为开发者带来了更加高效、便捷和成本有效的开发方式。机器学习和人工智能技术的加入进一步提升了 Serverless 应用的价值和创新性。本文从无服务器机器学习平台和在 Lambda 函数中使用 TensorFlow.js 两个角度介绍了如何在 Serverless 应用中使用机器学习和人工智能技术。开发者可以结合自己的实际需要和技术水平来选择最适合自己的方案和工具。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647ae53e968c7c53b0682433