前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用CDSW/CML构建交互式机器学习应用程序

使用CDSW/CML构建交互式机器学习应用程序

作者头像
大数据杂货铺
发布2020-03-10 21:31:45
1.7K0
发布2020-03-10 21:31:45
举报
文章被收录于专栏:大数据杂货铺大数据杂货铺

除了发现隐藏在大量数据中的有洞察力的趋势和模式之外,还有什么比这更有趣?能够轻松地与同事和其他业务团队共享并向他们解释!新的Cloudera 的机器学习( CML 1.2 ,我们非常高兴地宣布托管持久的基于Web的应用程序和使用Flash、仪表板和Shiny到共享分析结果及洞察力与企业利益相关者框架仪表盘的支持。跟随本文中的演示,立即开始使用CML的新分析应用程序功能获得更多乐趣。(注意:CDSW 1.7中也提供此功能)。

一个简单但引人入胜的演示总是会击败一个复杂但乏味的演示。这篇博客文章将帮助您使用CML 1.2中可用的新应用程序 功能构建一个简单但有趣的交互式机器学习应用程序。您将使用手机连接到应用程序,在屏幕上的一个方框中画一个数字,并在CML上运行经过训练的模型来预测绘制的内容。可以在github repo找到此代码。

建立模型来预测手绘数字是机器学习的“世界”。它基于MNIST 数据集,并且有一些很棒的教程 详细介绍了它的工作方式。这篇博客文章的重点是将所有内容与一个实际示例结合在一起。它有望为您提供构建块,以对其进行修改并将其扩展到您自己的应用程序和机器学习项目中。

总体系统概述

该项目分为三个主要部分:

1. 建立和训练模型

2. 服务模型

3. 交付交互式Web应用程序

实际的端到端过程相当简单:

从移动设备,您可以连接到在提供内容的CML应用程序中运行的Web服务器。现在,您的手机上具有Web应用程序界面。您用手指在黑色正方形中绘制图像,然后单击“预测”。

该Web应用程序提取图像数据,并对CML服务器的模型API进行REST调用。

CML模型API接收图像数据,并使用经过训练的模型对图像最有可能在哪个数字上进行预测,并返回结果。

移动设备上的Web应用程序更新显示内容以显示预测结果。

如您所见,部署起来并不难,机器学习的魔力在于在CML中训练和提供模型以进行准确的预测。

训练模型

对于此演示,我研究了如何使用由PyTorch构建的卷积神经网络训练和提供模型。与所有数据科学和机器学习项目一样,困难的部分是将数据转换为正确的格式并放入有用的位置。

MNIST数据集是70,000张手绘数字[0-9]图像的集合,每个图像都标有其实际值。

根据现代互联网图像标准,图像尺寸为28 x 28像素,非常小。它也是一个灰度图像,每个像素代表从白色到黑色的255个阴影。

在Jupyter Notebook中完成模型的建立和训练过程,以提供一些使用的数据结构和转换的想法。

要在CML上进行模型训练,您将需要安装3个库:torch,torchvision和Pillow。在项目中打开一个Python 3工作台并运行:

代码语言:javascript
复制
> !pip3 install –upgrade torch torchvision Pillow

PyTorch模型

要查看模型训练过程,请在CML中打开一个新的Jupyter Notebook编辑器会话,然后打开train_model.ipynb 文件。

使用PyTorch可以轻松做到这一点,因为该库包含MNIST数据集和在数据集上训练卷积神经网络的完整示例。用于该项目的原始文件来自PyTorch github 页面。获取数据集非常简单:

该训练数据用于训练和测试模型。PyTorch MNIST数据集返回可用于训练模型的一组标准化张量。

训练模型的代码的主要部分是nn 模型构造函数:

和训练循环:

运行的速度取决于您的CML服务器以及是否具有GPU。使用GPU使模型训练的运行速度提高了约10倍。

最后,我们保存模型以供模型服务API使用。

在项目示例代码中,我提供了模型的预训练版本。请注意,如果没有GPU,就无法加载在GPU上训练的模型。

要训练模型,请打开Jupyter笔记本并检查您的引擎是否具有cuDNN / CUDA(如果要使用GPU进行训练)以及配置了至少4GB RAM和1个GPU的配置文件。

打开train_model.ipynb 文件,然后重新运行所有单元。这将在您的本地模型CML目录中创建torch_model.pkl 文件的新版本。

我在这里掩盖了很多细节,因为这比对深度学习技术的详细回顾更快速,但是幸运的是,Internet上更好的部分充满了有关如何创建神经网络的详细教程和描述。使用MNIST数据集。这机器学习的“世界”。

服务模型

与前面的部分一样,将掩盖很多细节。有关模型如何在CML上工作的详细概述,请参阅Cloudera官方文档

PyTorch模型

该项目包含构建和部署PyTorch模型所需的所有文件。该CML-build.sh 和requirements.txt 文件管理库的依赖关系,当模型部署。对于PyTorch模型,使用以下详细信息创建一个新模型:

输入模型的示例是手绘图像的base64编码版本。下一节将对此进行详细说明。图像字符串中通常会有明显更多的字符,但这会使模型测试有点难以阅读。此处使用的示例是5×5黑色块的字符序列。

运行模型的文件是model_torch.py 。由于该项目可同时使用PyTorch nn 模型的GPU版本和非GPU版本,因此您可以为模型提供服务,而无需占用CML群集上的任何GPU资源。我没有注意到用于模型服务的GPU和基于非GPU的模型之间的任何显着性能差异,但是我没有运行任何时序测试。

文件的第一部分创建类并加载先前训练的模型。将图像转换为PyTorch模型期望的形式的图像处理使用Pillow 库。

CML中的模型API使用的预测函数将获取图像数据并进行一些图像处理,以获取PyTorch模型进行预测所需的形式的图像数据。

这些图像是:

• 基于base64解码

• 边缘略微模糊,看起来更像MNIST样本

• 调整为28×28

• 转换为8位灰度

• 转换为numpy数组并重整为MNIST格式

• 转换为浮点并从0-255缩放为0-1

然后,模型对输入数据进行预测,并返回最可能的预测数字值(即0-9)作为JSON字符串。

交互站点

该项目的最后一部分是托管Web应用程序,在这里我们将使用CML 1.2中的新应用程序功能。需求是非常基本的:我们需要某种可以将html文件传送到客户端的Web服务器。特别是flask 目录中的index.html 文件。

应用程序文件服务

这是新的CML应用程序功能出现的地方。这些应用程序将运行并为具有永久URL的长期运行的基于Web的应用程序提供服务。设置此应用程序后,可以通过网络访问CML实例的任何用户都可以访问该应用程序。这对于创建供非CML用户使用的仪表板或数据浏览工具很有用。

在这种情况下,我们将使用Python Flask 框架从CML服务器提供index.html 。打开Python 3工作台并运行flask_app.py 文件。该应用程序不需要很多资源,因此可以使用一个很小的资源(0.5 vCPU 1 GB)。如您所见,flask_app.py 文件提供了一种将index.html 文件发送给用户的方法。您可以在烧瓶路径中向该文件添加更复杂的处理,但是现在我们只需要它来传递一个文件。

要创建应用程序,请使用主菜单上的新应用程序功能。

创建一个名为MNIST App和mnistapp的新应用程序作为子域,然后复制以下设置。

Web应用程序

既然我们已经有了提供index.html文件的简单方法,就让我们看看它的作用。该文件包含完整的Web应用程序,并加载Javascript库,样式表,并使Javascript调用CML模型API。

目前只有两个所使用的JavaScript库p5.js 和d3.js 。

黑色绘图块是由p5库创建的<canvas> 元素。由于p5可以完成所有复杂的工作,因此非常简单。您可以根据需要在html文件中的这些功能中更改背景和笔触颜色。

绘制图像后,需要将其传递到CML模型API接口。您需要对index.html 文件中的javascript进行一些更改才能使其正常工作。在CML模型概述页面上,您将在示例代码中找到所需的URL和accessKey信息。

替换index.html 文件中的相应值。

这使用fetch 方法对CML模型API进行POST。使用toDataURL () 调用从<canvas> 元素中提取图像数据,这将创建基于字符串的图像PNG版本的数据表示形式。这是将传递给CML模型API的数据。一旦CML模型API计算并返回了预测结果,便会有一个d3.select 函数更新Web应用程序上的文本以向最终用户显示该结果。

运行应用程序

现在一切就绪,您可以运行应用程序并对其进行测试。启动您的应用程序,然后单击启动应用程序链接。这将为您提供永久性URL,任何人都可以使用该URL来访问该应用程序。它看起来像这样: https://mnistapp.[your.CML.url]/

注意:在正常的PC浏览器窗口中,这看起来不太好,因为可以在手机或平板电脑上查看。

浏览到手机上的链接,您将看到初始屏幕。用手指在块中画一个数字,单击预测,应用程序会将数据发送到模型API,该API服务于我们之前训练的模型。然后,模型将预测这是什么数字,并将结果返回给应用程序。

结论

希望这将为您提供一个框架,以了解并开始构建自己的交互式机器学习应用程序。CML具有构建此基本演示所需的所有工具,但真正的好处是从整个平台开始引入其他组件。

您可以实现的目标几乎没有任何限制。

原文链接:https://blog.cloudera.com/building-an-interactive-machine-learning-application-with-cml/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档