当前位置: 首页 > news >正文

杜克大学大规模云计算、数据工程与机器学习笔记(六)

在我的“边缘计算机视觉”相关代码中有大量此类示例。在AWS文档中也能找到很多编程调用案例。

与其他云服务商的对比

上一节我们介绍了AWS Rekognition的基本使用和API调用,本节我们来对比一下不同云服务商的计算机视觉解决方案。

以下是Google Cloud和Microsoft Azure的典型工作流程:

  1. 上传图像至云端。

  2. 服务自动训练一个定制化模型。

  3. 用户可以直接使用训练好的模型,或将其下载到本地。

特别值得一提的是,Google的解决方案对本地模式有非常好的支持。

而AWS的方案则侧重于:用户将图像放入指定的S3存储桶中,然后服务对该存储桶中的内容进行转换标签检测

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a28c34c42ea277ed5b1b231d4703b1f0_6.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a28c34c42ea277ed5b1b231d4703b1f0_7.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a28c34c42ea277ed5b1b231d4703b1f0_6.png

总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a28c34c42ea277ed5b1b231d4703b1f0_7.png

本节课我们一起学习了AWS Rekognition计算机视觉服务。我们了解了其无需自定义模型训练、通过拖拽或API即可进行图像分析的核心特点,并通过对象检测实例演示了其使用过程。最后,我们对比了AWS、Google Cloud和Azure在计算机视觉服务上不同的侧重点和工作流程,认识到AWS方案在基于存储桶的批量处理方面具有优势。

135:GCP自动机器学习与自然语言处理

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_0.png

在本节课中,我们将学习如何利用Google Cloud Platform(GCP)的云函数(Cloud Functions)和AI API,构建一个能够执行自然语言处理(NLP)操作的生产级Web服务。我们将从创建一个简单的“Hello World”函数开始,逐步将其扩展为一个能够调用维基百科API和GCP翻译服务的复杂应用。

概述

GCP的云函数允许开发者无需管理服务器即可部署代码。我们将创建一个云函数,它首先作为一个简单的回声服务,然后集成GCP的自然语言处理API,实现从维基百科获取内容并自动翻译的功能。

创建基础云函数

上一节我们介绍了GCP云服务的概念,本节中我们来看看如何创建一个基础的云函数端点。

首先,在GCP控制台中创建函数。我们将其命名为类似hello-serverless的名称。创建时,需要指定一个运行时环境,例如Python。系统会提示设置一个入口点,这意味着当Web服务被远程调用时,将首先执行这个函数。

以下是创建函数的核心步骤代码框架:

# 这是一个云函数的基本结构defhello_serverless(request):# 函数逻辑将在这里编写return'Response'

创建完成后,GCP会提供一个唯一的URL端点,全球用户都可以通过此URL访问该服务。

测试与调用函数

函数部署后,我们可以立即进行测试。测试有两种主要方式:

  1. 通过控制台测试:在GCP控制台的函数详情页,有一个“测试”标签页。我们可以手动输入JSON格式的载荷(Payload)来触发函数。

  2. 通过命令行调用:使用gcloud命令行工具,可以更灵活地从终端调用函数。

例如,通过命令行调用的格式如下:

gcloud functions call hello-serverless --data ‘{“message”: “Hello from Shell”}’

通过测试,我们确认函数可以接收请求并返回响应,这构成了一个可用的Web服务基础。

集成AI API构建复杂应用

我们已经有了一个可工作的Web服务,现在可以为其添加更强大的功能。接下来,我们将把GCP的自然语言处理(NLP)API集成到云函数中。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_2.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_4.png

我们将修改函数代码,使其能够:

  1. 接收一个实体名称(如“Google”)、目标语言和句子数量作为输入。

  2. 调用维基百科API获取该实体的摘要文本。

  3. 使用GCP的翻译API将摘要翻译成目标语言。

  4. 返回翻译后的结果。

以下是实现此功能的核心代码逻辑:

fromgoogle.cloudimporttranslate_v2astranslateimportwikipediadeftranslate_wikipedia(request):request_json=request.get_json()entity=request_json[‘entity’]language=request_json[‘language’]sentences=request_json[‘sentences’]# 获取维基百科内容summary=wikipedia.summary(entity,sentences=sentences)# 使用GCP进行翻译translate_client=translate.Client()result=translate_client.translate(summary,target_language=language)returnresult[‘translatedText’]

部署这个新函数后,我们再次通过控制台或命令行进行测试。例如,我们可以请求将“Facebook”的维基百科摘要翻译成西班牙语。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_6.png

通过这种方式,我们快速构建了一个功能完整的、可扩展的NLP微服务,而无需关心服务器运维、扩展性或网络基础设施。

总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_8.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_10.png

本节课中我们一起学习了如何利用GCP云函数构建无服务器应用。我们从创建一个简单的回声服务开始,逐步将其增强为一个集成了外部API(维基百科)和GCP核心AI服务(翻译API)的复杂自然语言处理管道。整个过程展示了云函数的强大之处:开发者只需专注于业务逻辑代码,即可快速部署出健壮、可扩展的生产级服务。

136:GCP自动机器学习计算机视觉

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_0.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_2.png

在本节课中,我们将要学习Google Cloud Platform(GCP)上的自动机器学习(AutoML)计算机视觉功能。我们将了解如何创建数据集、训练模型,并探讨将模型部署到云端或移动设备(边缘)的两种主要方式。

概述

GCP提供了强大的自动机器学习计算机视觉能力。通过AutoML Vision,用户可以轻松创建自定义的图像分类模型,而无需深厚的机器学习专业知识。

创建数据集

首先,我们需要创建一个数据集来训练模型。以下是创建数据集的步骤。

在GCP的AutoML界面中,点击“新建数据集”。你可以选择任务类型,例如“单标签分类”。这种分类适用于为每张图像分配一个标签的场景,比如区分“猫”或“狗”。

接下来,你需要提供训练数据。有两种主要方式:

  • 从本地上传图像文件。

  • 提供一个CSV文件,该文件指向存储在Google Cloud Storage中的一批图像。

数据格式示例如下:在CSV文件中,每一行包含一个指向图像的URI(例如gs://my-bucket/cat.jpg)和对应的标签(例如cat)。你需要同时准备训练数据和测试数据。上传完成后,所有数据会被存储起来。

浏览与可视化数据

上一节我们介绍了如何创建和上传数据集,本节中我们来看看如何浏览这些数据。

上传图像后,你可以在界面中查看所有已上传的图像。该界面提供了优秀的可视化功能,允许你通过筛选器切换来浏览不同类别的数据。这有助于在训练前直观地检查数据质量。

训练模型

浏览完数据后,下一步就是训练模型。点击“训练”按钮即可开始训练一个新模型。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_4.png

在训练设置中,你有两个关键的部署选择:

  • 云端部署:模型将托管在GCP云上。如果你希望构建一个接收用户输入并进行预测的在线服务,这是完全可行的选择。

  • 边缘部署:模型可以下载并部署到移动设备等边缘设备上运行。

模型部署选项

边缘部署

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_6.png

边缘部署的优势在于模型可以离线运行在终端设备上。在训练完成后,进入“测试与使用”环节,你可以直接下载模型文件。

例如,你可以选择“Android Quickstart”选项,通过点击按钮在云端完成训练,然后将模型下载并部署到物理安卓设备上。这种方式的最大优点是代码量极少,最终你可以将训练好的模型直接集成到移动应用中。

云端部署

另一种选择是云端部署。如果选择将模型部署在云端,在“测试与使用”环节,系统会为你提供一个可调用的API端点。

虽然调用它会启动服务器并产生费用,但之后你就可以让用户通过这个端点提交数据(例如手写样本图片)。这意味着你可以将图像数据提交到Cloud Vision API,点击训练后,系统会快速启动一个端点。之后,你的应用程序只需调用该端点并传入图像数据,就能获得预测结果,从而为计算机视觉应用构建一个完整的端到端流程。

功能核心:自定义训练

无论是边缘还是云端部署,AutoML Vision的核心功能都允许你从零开始,使用自己的数据来定制和训练模型。这为你提供了高度的灵活性和所有权,使得解决方案能完美契合你的特定业务需求。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_8.png

总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_10.png

本节课中我们一起学习了GCP AutoML计算机视觉的基本工作流程。我们了解了如何创建数据集、可视化数据、训练模型,并重点探讨了将模型部署到“边缘”设备或“云端”的两种不同方式及其适用场景。整个过程旨在降低机器学习应用的门槛,实现低代码甚至无代码的模型开发与部署。

137:Azure自动机器学习AI预测 📊🤖

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_0.png

在本节课中,我们将学习如何使用Azure机器学习服务中的自动机器学习功能,来快速构建一个预测模型。我们将以一个NBA球员数据集为例,预测球员的薪资,并探索模型给出的有趣洞察。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_2.png


https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_4.png

访问Azure机器学习服务

首先,我们需要进入Azure门户。在主页找到并进入“机器学习”服务。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_6.png

进入机器学习工作区后,我们可以启动工作室。在工作室中,有一个名为“自动ML”的功能,我们将从这里开始。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_8.png


准备与上传数据

为了演示,我将使用一个包含NBA球员信息的公开数据集。这个数据集包含球员、位置、三分球命中数、薪资以及维基百科页面浏览量等信息。

以下是数据准备步骤:

  1. 下载数据集文件。

  2. 在自动ML界面中,点击“新建自动ML运行”。

  3. 选择“从本地文件”创建数据集。

  4. 将数据集命名为“NBA_salary”,并选择“表格数据”类型。

  5. 上传文件,并使用文件第一行作为列标题。

  6. 确认数据架构后,创建数据集。

上传完成后,我们可以浏览数据集,查看各列的统计摘要,例如缺失值数量和数据分布。这有助于我们快速了解数据质量。


配置并运行回归预测实验

上一节我们准备好了数据,本节中我们来看看如何配置一个预测任务。我们的目标是预测球员的薪资(一个连续数值),因此这是一个回归问题。

以下是创建回归实验的步骤:

  1. 选择我们刚创建的“NBA_salary”数据集。

  2. 点击“下一步”,创建一个新实验,命名为“predict_salary”。

  3. 在配置中,选择“salary”列作为我们要预测的目标。

  4. 选择一个计算集群来运行实验。

  5. 在任务类型中,选择“回归”,因为薪资是连续数值。

  6. 点击“完成”开始自动训练。

自动ML将自动尝试多种回归算法(如决策树、随机森林、梯度提升等),并组合成集成模型,以找到最佳预测方案。


分析模型结果与洞察

实验运行完成后,我们可以查看结果。系统会展示性能最佳的模型,通常是一个“投票集成”模型。

我们来看一下关键评估指标:

  • R平方:约为56%,说明模型能解释薪资变异的56%,这是一个不错的结果。

  • 平均绝对误差:约为3(百万美元),这是预测值与实际值的平均差距。

但更有趣的是模型提供的特征重要性解释。它告诉我们哪些因素对预测薪资影响最大:

  1. 罚球命中率:这是最重要的特征,但可能并不直观。

  2. 年龄:第二重要的特征。

  3. 上场时间:比较符合直觉。

  4. 防守篮板社交媒体影响力:令人惊讶的是,Twitter粉丝数和维基百科页面浏览量比投篮尝试次数更重要。

通过分析特征贡献,我们发现:

  • 罚球命中率与薪资呈正相关,即罚球越准,薪资倾向于越高。

  • 年龄对薪资的影响有正有负,分布相对均衡。

  • 社交媒体影响力(页面浏览量)对薪资有显著的正面影响。

这些洞察可能对球员经纪人很有价值,例如,他们可以建议球员重点提升罚球命中率和社交媒体曝光度。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_10.png


通过代码调用模型

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_12.png

上一节我们分析了模型结果,本节中我们来看看如何通过编程方式与训练好的实验进行交互。我们可以使用Azure Machine Learning Python SDK来列出实验或部署模型为API。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_14.png

以下是一个示例代码框架,展示如何连接到工作区并列出实验:

# 导入必要的库fromazureml.coreimportWorkspacefromazureml.core.experimentimportExperiment# 从配置文件加载工作区ws=Workspace.from_config()# 列出工作区中的所有实验experiment_list=Experiment.list(ws)forexpinexperiment_list:print(exp.name)# 假设我们的实验名为 'predict_salary',可以获取它salary_experiment=Experiment(ws,name='predict_salary')# 接下来可以获取实验中的最佳运行,并部署为Web服务等

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_16.png

通过这种方式,我们可以将训练好的模型集成到自己的应用程序(例如Flask Web应用)中,实现自动化的预测流程。


扩展实验:尝试其他预测任务

自动ML的灵活性在于可以快速针对不同目标进行实验。我们可以用同一份数据尝试预测其他变量。

以下是两个额外的实验思路:

  1. 预测页面浏览量:创建一个名为“predict_page_views”的新实验,选择“page_views”作为目标列,同样使用回归任务。这可以预测哪位球员最受公众关注。

  2. 预测球员位置:创建一个名为“position_prediction”的新实验,选择“position”作为目标列。由于位置是类别(如后卫、前锋),这次我们选择分类任务。

启动这些实验后,自动ML会分别为我们构建合适的模型。这样,无需手动编写和调优大量代码,我们就能探索数据中多种不同的关系。


总结

本节课中我们一起学习了Azure自动机器学习的核心工作流程。我们从上传NBA数据集开始,配置并运行了一个回归模型来预测球员薪资。通过分析结果,我们获得了关于影响薪资因素的有趣洞察,例如罚球命中率和社交媒体影响力的重要性。最后,我们还了解了如何通过Python SDK以编程方式与实验交互,并扩展了实验以尝试分类等其他预测任务。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_18.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_19.png

自动机器学习大大降低了机器学习的入门门槛,让数据科学家和开发者能快速构建、评估和部署有效的预测模型。

138:Azure自动机器学习计算机视觉

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_0.png

在本节课中,我们将要学习Azure平台上的计算机视觉服务,特别是其“自定义视觉”功能。我们将了解它如何与之前介绍的Google Cloud服务类似,帮助用户无需深厚机器学习知识即可构建和训练图像识别模型。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_2.png

概述

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_4.png

Azure提供了名为“认知服务”的套件,其中包含实现计算机视觉自动化的功能。这项服务允许开发者便捷地构建视觉AI模型。

Azure自定义视觉服务

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_6.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_7.png

上一节我们介绍了云平台提供自动化机器学习工具的普遍概念。本节中我们来看看Azure的具体实现。

Azure的计算机视觉API服务中,有一个与Google Cloud的“自定义视觉”类似的功能,同样名为“自定义视觉”。该服务承诺能在数分钟内创建一个模型。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_9.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_10.png

其使用流程与在Google Cloud上进行操作基本相同。

以下是使用Azure自定义视觉的核心步骤:

  1. 创建模型。

  2. 上传用于训练的图像数据。

  3. 为图像添加标签。

  4. 点击按钮开始训练模型。

  5. 使用训练好的模型进行预测。

从界面来看,Azure自定义视觉与Google Cloud的服务非常相似。用户上传图像、进行标注,然后通过“训练”按钮启动模型训练过程,最后可进行预测验证。

总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_12.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_13.png

本节课中我们一起学习了Azure的计算机视觉服务。我们了解到,Azure通过其“自定义视觉”服务,提供了与Google Cloud类似的、流程化的图像模型构建与训练功能,使得自动化计算机视觉模型的开发变得简单高效。

139:云应用核心组件回顾 🧩

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/dc33e7ceb460c548a6f651c087098463_0.png

在本节课中,我们将回顾构建现代云应用,特别是机器学习应用时,所需的核心组件。我们将这些组件比作烹饪的四种关键原料,并了解如何将它们组合起来。

上一节我们讨论了云计算的宏观架构,本节中我们来看看构成具体应用的核心要素。

想象你是一位主厨。要构建一个功能完整的现代云应用,你至少需要准备好以下四种“原料”:

以下是构建云应用所需的四个核心组件列表:

  1. DevOps:这代表开发与运维的实践与工具链,用于实现应用的自动化构建、测试、部署和监控。

  2. PaaS基础设施服务:这是推荐的基础平台,它提供了运行应用所需的计算、网络和存储环境,开发者无需管理底层服务器。

  3. AI API或高级服务:对于机器学习应用,这指用于模型训练、推理或特定AI能力(如视觉、语言识别)的托管服务。

  4. 平台服务:当你需要持久化存储数据时,应使用的数据库、数据仓库或其他数据管理服务。

在应用开发的初始阶段,你可以从PaaS和AI API开始。当你进展到需要存储和管理数据时,就应引入平台服务。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/dc33e7ceb460c548a6f651c087098463_2.png

本节课中我们一起学习了构建云应用(尤其是机器学习应用)的四个核心组件:DevOps、PaaS基础设施服务、AI API和平台服务。理解并合理组合这些组件,是成功在云端构建和部署应用的关键。

140:开发API的步骤

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_0.png

在本节课中,我们将要学习如何为Web服务开发API,包括如何接收用户数据、如何部署服务,以及如何通过工具(如Postman)来测试和规划后端功能,而无需过早构建前端界面。

概述

如果你有一个Web服务,你如何将数据传递给用户,又如何处理用户的数据?在我的职业生涯中,我通常会构建一个Web服务。这个Web服务,正如我们刚才讨论的,可以基于Flask框架来构建。然后,你需要做的就是将它部署到某个平台上。

部署Web服务

上一节我们介绍了构建Web服务的概念,本节中我们来看看如何将其部署到云端。

你可以将服务部署到任何云平台上。以下是几个主要的部署选项:

  • GCP:通过App Engine部署。

  • Azure:通过App Services部署。

  • AWS:通过Elastic Beanstalk部署。

这些都是部署Web服务的优秀方式。

接收用户输入

部署好服务后,你可能会问,如何实际获取用户的输入呢?方法是为你的Flask服务添加一个POST方法。

这是一个HTTP Web服务。HTTP Web服务有几个与之关联的“动词”(或称方法)。动词是你可以对特定路由执行的操作。最常见的两个动词是GETPOST

  • GET:意味着你将接收数据。

  • POST:意味着你将向Web服务发送数据。

要获取用户输入,你只需要在Flask中创建一个路由,并指定它只接受POST方法。例如,你可以创建一个路由/input。用户将把内容“发布”到这个Web服务地址。

这个过程可以分为两个阶段来理解。

第一阶段:计算机交互

当你构建这类Web服务时,你实际上是在构建一个让计算机能与你的服务交互的接口。你告诉计算机,它将接收特定类型的JSON负载。这个JSON负载可以包含各种数据,例如一张图片。

{"image":"file.png"}

Web服务接收到这个图像后,可以将其传递给你正在进行的任何处理流程,比如图像识别。

第二阶段:人类交互

然而,普通用户通常不知道如何调用Web服务并放入JSON负载,因为这需要使用POST方法发送数据。因此,人们通常的做法是构建一个与后端交互的应用程序。

这个应用程序可以是网页,也可以是移动应用。无论是哪种形式,它们的作用都是“包装”那个输入端点。例如,应用程序会提供一个表单来提示用户输入数据,用户将数据填入表单后,表单数据会被发送到Web服务,服务处理后再将结果返回。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_2.png

所以,关键的区别在于:你需要Flask服务来处理逻辑;之后,如果你想让人类用户与之交互,你还需要某种应用程序,比如我们讨论过的单页Web应用、iOS或Android应用。

开发流程建议

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_4.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_5.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_6.png

我的建议是采用以下开发场景:你完全可以先构建整个后端,在构建任何图形用户界面之前,就定义好所有的URL接口。我认为这样做实际上更好。

但如果你与业务人员合作,他们很多时候会强迫你先做界面,这实际上非常危险。他们会对“让网站或应用看起来漂亮”的部分感到兴奋,却不了解背后的技术顺序。这就像先粉刷墙壁,但如果顺序错了,你可能不得不拆掉墙壁来铺设管道。

因此,最好专注于明确你的应用程序要做什么,然后先定义和调用这些API端点。你可能知道有一个叫Postman的服务,它是一个非常好的工具,能帮助你组织开发步骤。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_8.png

无论你是构建电子商务公司、体育社交网络、推荐引擎还是其他任何东西,如果你按部就班地开发,可以使用像Postman这样的工具。你可以用它来收集所有的API端点。例如,你可以模拟前端的行为,向这些应用发送请求(如cURL命令),而无需实际编写前端代码。你可以收集一系列这样的操作。

我的建议是,如果你正在构建一个产品级应用,并希望它成为一个软件即服务应用,你应该首先使用Postman这样的工具来规划和测试。你可以创建一个新项目,添加一个集合,然后在集合中定义各种路由并调用它们。我认为在初期使用Postman比直接构建前端或移动应用更好,因为这是“让它先工作”的阶段,你需要确保能够完整地测试和运行你的后端逻辑。

总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_10.png

本节课中我们一起学习了开发API的关键步骤。我们首先讨论了如何将基于Flask的Web服务部署到各大云平台。接着,我们深入探讨了如何通过POST方法和特定路由来接收用户输入,并区分了计算机直接交互与通过前端应用进行人类交互的不同场景。最后,我们强调了先定义和测试后端API、再构建前端的开发流程的重要性,并介绍了使用Postman工具来规划和测试API端点的最佳实践。遵循这些步骤,可以帮助你更稳健、高效地构建可扩展的云计算解决方案。

141:使用Flask构建机器学习后端服务 🚀

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/fac98dde3cce1d221e37e17400c97e32_0.png

在本节课中,我们将学习如何从零开始,为一个机器学习公司构建一个最小可行、可用于生产的后端服务。我们将以Flask框架为例,规划出核心的API端点,并讨论从后端到前端的完整开发流程。

概述

假设你需要从头构建一个机器学习公司。首要任务是确定需要构建的最小功能集合。一个基于Flask框架的后端服务是一个不错的起点。

第一步:规划核心后端端点 🏗️

上一节我们提出了构建后端服务的想法,本节中我们来看看具体需要哪些核心API端点。一个基础的机器学习后端服务至少需要以下几个端点。

以下是构建一个简单但功能完整的后端服务所需的端点列表:

  • 认证端点 (/auth): 此端点负责验证用户是否拥有有效账户。其实现可以与外部服务集成,例如AWS CognitoFirebase。用户通过此端点登录后,才能访问其他受保护的资源。

  • 授权端点 (/authz): 此端点与认证服务(如Cognito)协同工作,用于确定已登录用户可以访问哪些资源。例如,它可以区分普通用户和管理员(admin)的权限。

  • 预测端点 (/predict): 这是服务的核心功能端点。以手写数字识别为例,该端点接收图像作为输入,运行机器学习模型进行预测,并将结果(例如识别的数字名称,如"name": "1")返回给用户。

  • 注册端点 (/register): 允许新用户创建账户。同样,可以集成Cognito等服务来处理用户注册流程。

  • 登出端点 (/logout): 用于处理用户会话的终止。

通过构建这四到五个端点,你就拥有了一个可运行的后端服务。用户可以注册、登录、使用预测功能,然后登出。这是一个非常精简但可用于生产环境的后端架构。

第二步:使用Postman测试与持续交付 🔧

在第一步中我们规划了后端蓝图,本节中我们来看看如何确保其可靠运行。在着手开发任何前端界面(如单页Web应用或另一个Flask前端)之前,我的个人建议是:不要先做那个

首先,你应该使用像Postman这样的工具来测试你的API。确保每个端点都能被正确调用,并且按预期返回结果。这是验证后端逻辑是否有效的关键步骤。

同时,第一步的实现过程隐含着另一个重要实践:持续交付。我们之前讨论过它的重要性。这意味着每次你提交代码时,都应该有自动化流程来检查代码风格、运行测试。我会将精力集中在这方面,虽然需要一些前期工作,但它能确保服务的稳定性和质量。

第三步:构建前端界面 📱

如果你已经完成了第二步,确保后端服务通过Postman测试并能稳定工作,那么就可以进入第三步:构建前端界面。

此时,前端可以是任何你想要的形态。事实上,有些公司甚至不优先考虑Web端。例如,微信(WeChat)就更侧重于移动端优先的策略。你可以选择开发移动应用,或者构建Web应用。关键在于,现在你拥有了一个坚实、可调用的后端服务,前端可以自由地通过API与之交互。

总结

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/fac98dde3cce1d221e37e17400c97e32_2.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/fac98dde3cce1d221e37e17400c97e32_4.png

本节课中我们一起学习了构建机器学习后端服务的三步法。首先,我们使用Flask规划了核心的认证、授权、预测等API端点。接着,我们强调了使用Postman进行API测试和建立持续交付流程的重要性,这是确保后端健壮性的关键。最后,在拥有可靠的后端服务之后,我们再根据需求选择开发Web或移动端前端界面。这个流程帮助我们从零开始,系统地搭建一个可扩展的机器学习应用。

142:构建专业Web服务清单 📋

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_0.png

在本节课中,我们将学习如何构建一个专业的Web服务。核心在于建立一个系统化的检查清单,以确保服务的自动化部署、弹性伸缩、监控与测试等关键环节都得到妥善处理。


专业Web服务的检查清单

构建专业Web服务时,你需要一份检查清单。这份清单确保服务在开发、部署和运维的各个环节都符合高标准。

以下是构建专业Web服务时必须考虑的关键项目:

  1. 自动化部署流程:你必须拥有一个自动化的部署流程。这是专业云开发的必备条件。

  2. 测试与代码检查:你需要建立测试和代码检查机制。这非常重要且功能强大。

  3. 弹性伸缩能力:你需要确保你的服务具备弹性伸缩能力。

  4. 监控与日志记录:你需要添加监控和日志记录功能。例如,当服务出现问题时,你如何能及时知晓。

上一节我们介绍了专业Web服务的核心检查项目,本节中我们来看看如何将这些项目融入一个具体的工作流程。


核心工作流程:不要猜测,始终验证

核心建议是采用以下工作流程。在弹性方面,我们的原则是:不要猜测,始终验证。猜测会让你陷入麻烦。

具体流程如下:

  1. 代码提交:开发者将代码提交到GitHub仓库。

  2. 自动化部署与检查:代码提交后,系统自动将其部署到云端。在此过程中,系统会执行代码检查、运行测试等任务。

  3. 触发定期负载测试:部署完成后,我建议触发一个定期(例如每晚)的测试。这可以通过两种服务实现:

    • Loader.io

    • Locust

你为什么要这样做?因为任何事情都可能发生。即使你使用的是可以自动伸缩的平台即服务工具,也不要猜测其表现。这就像你家里需要安装烟雾报警器一样——你不能假设今天安全,明天就一定安全。因此,在预发布环境中设置一个夜间负载测试,可以验证你的应用性能,而不是仅仅猜测它运行良好。

如果你同时配置了像AWS CloudWatch这样的监控和日志服务,你就能更好地掌握应用状态。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_2.png


负载测试工具示例

以下是两个可用于实施夜间负载测试的工具示例。

示例一:Flask + Locust

这里有一个使用Flask和Locust的示例。这是一个很好的参考,展示了你可以如何实现。本质上,你可以添加一个非常简单的测试来确保应用不会在负载下崩溃。部署过程中的测试可能关注业务逻辑,而这种负载测试是更高层次的验证。为什么不设置它在夜间自动运行呢?

示例二:Loader.io

另一个我使用过的工具是Loader.io。我非常喜欢这个简单的基于云的负载测试工具。它的工作方式是:你登录后,可以配置测试,让它发送大量请求。你可以安排它在夜间运行。测试完成后,它会生成图表,显示你的应用实际能处理多少流量。它基本上和前面提到的Flask Locust工具做同样的事情:发起大量请求来测试你的应用。


核心原则总结

这不是一个二选一的问题。即使你构建在具有优秀弹性能力的服务之上,你仍然需要验证它。我的建议是:在预发布环境中设置夜间测试,这样你就能始终了解你应用程序的性能能力。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_4.png


https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_6.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_7.png

本节课中我们一起学习了构建专业Web服务的核心检查清单,并探讨了通过自动化工作流程和定期负载测试来“验证而非猜测”服务性能的重要性。掌握这些实践,是确保Web服务具备专业性、可靠性和可扩展性的关键。

http://www.jsqmd.com/news/1364225/

相关文章:

  • HarmonyOS React组件化开发实践指南
  • 2026年AI论文写作工具实测:效率提升3倍
  • 私有化部署Overleaf:解决LaTeX协作与安全痛点
  • Meta外售AI算力:从硬件账本看AI基础设施商业化与工程实践
  • PostGIS栅格数据地理配准实战与核心函数解析
  • Unity光照探针自动生成工具:基于NavMesh的智能放置方案
  • MySQL存储过程开发实战与性能优化指南
  • 呼吸阀在线校验设备客户口碑力荐,高认可度厂家盘点,价格透明服务优 - myqiye
  • 如何在Foobar2000中实现酷狗QQ音乐网易云逐字歌词显示:终极配置指南
  • Unity UI系统深度解析:从UGUI到UI Toolkit的性能优化与实战指南
  • 火山引擎算力驱动广告生产变革:AI生成与云端渲染重塑创意工业
  • RabbitMQ在大数据架构中的核心作用与性能调优
  • 本地AI智能体构建指南:DeepAsk、LifeOS Skill与Agent框架的集成实践
  • 数据库游标原理与分页查询优化实战
  • Kubernetes Deployment核心概念与生产实践指南
  • WinCC与Excel自动化报表实战:VBS脚本实现工业数据高效处理
  • 2026玻璃钢避雷针制造厂行业格局解读,价格透明实力测评,优选不踩雷 - myqiye
  • 电热综合能源系统动态定价与主从博弈优化
  • Docker命令全解析:从基础操作到生产环境实战
  • Cursor AI编程工具:使用/rename-chat高效管理对话历史
  • Dify代码节点中的JSON数据处理与抽取技术详解
  • Flutter跨平台开发:鸿蒙随机点名器实战
  • SpringBoot+Vue.js构建厨艺交流平台全栈方案
  • OpenClaw与飞书集成部署指南:从开发到生产环境
  • 时序智能:从数据存储到实时决策的演进与TimechoAI平台前瞻
  • MySQL CRUD操作入门与性能优化指南
  • Kubernetes Deployment核心概念与实战指南
  • AI编程助手Prompt编写指南:从原理到实战技巧
  • Redis数据类型错误诊断与解决方案
  • SSM+Vue健康健身网站全栈开发实践