使用ML.NET和Azure Function进行机器学习 - 第2部分
本文是《使用ML.NET和AzureFunction进行机器学习 - 第1部分》的续篇。
像机器一样识别鸢尾花
回顾第1部分,您将使用Visual Studio创建一个新的Azure Function项目。
注意:确保安装了Azure Workload以查看此模板。

从Visual Studio的第1部分打开演示解决方案,并使用名为serverless_ai的Azure Functions项目模板创建新项目。

出现提示时,选择Http触发器选项并将其连接到项目的Azure存储帐户(此帖子的mlnetdemostorage1)。
然后完成以下步骤:
- 使用NuGet将Microsoft.ML包添加到项目中。
- 复制IrisData.cs和IrisPrediction.cs文件从示范项目到serverless_ai项目。你再次需要它们。
将Http触发器类Function1的名称更改为预测并复制以下代码:
using Newtonsoft.Json;
using Microsoft.ML; namespace serverless_ai
{
public static class Predict
{
[FunctionName("Predict")]
public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req,
[Blob("models/model.zip", FileAccess.Read, Connection = "AzureWebJobsStorage")] Stream serializedModel,
TraceWriter log)
{
if (typeof(Microsoft.ML.Runtime.Data.LoadTransform) == null ||
typeof(Microsoft.ML.Runtime.Learners.LinearClassificationTrainer) == null ||
typeof(Microsoft.ML.Runtime.Internal.CpuMath.SseUtils) == null ||
typeof(Microsoft.ML.Runtime.FastTree.FastTree) == null)
{
log.Error("Error loading ML.NET");
return new StatusCodeResult();
} //Read incoming request body
string requestBody = new StreamReader(req.Body).ReadToEnd(); log.Info(requestBody); //Bind request body to IrisData object
IrisData data = JsonConvert.DeserializeObject<IrisData>(requestBody); //Load prediction model
var model = PredictionModel.ReadAsync<IrisData, IrisPrediction>(serializedModel).Result; //Make prediction
IrisPrediction prediction = model.Predict(data); //Return prediction
return (IActionResult)new OkObjectResult(prediction.PredictedLabels);
}
}
}
这些行使用您的模型来评估新的鸢尾花虹据以进行预测。您的应用已准备好进行测试。
在部署之前在本地测试
要测试本地计算机上的Azure Function应用程序,请检查local.settings.json文件以确保AzureWebJobsStorage具有与之关联的值。这是您的本地应用程序将在Azure存储帐户上找到您上载的模型的方式。如果有一个值(它应该会在您绑定的项目到您的帐户创建时),你可以F5的serverless_ai为了项目来运行它。现在打开Postman (或类似的REST API工具)并使用以下正文发送POST调用到http://localhost:7071/api/Predict:
{
"SepalLength": 3.3,
"SepalWidth": 1.6,
"PetalLength": 0.2,
"PetalWidth": 5.1
}
如果一切顺利,分类程序将返回“Iris-verginica”。
部署Skynet
...或者您从Visual Studio部署的任何AI,转到工具栏中的构建设置。

选择“发布serverless_ai”以部署Azure Function应用程序。

要在Azure门户中测试应用程序部署,请选择mlnetdemo下的Azure Function应用程序(或者您将其命名),然后选择其下的Predict功能。使用屏幕右侧的“ 测试”面板查看已部署的应用程序。
结尾
这会将您的鸢尾花分类程序放在Azure上供其他人尝试吧。恭喜!您现在将人工智能应用成功部署到云端了。
使用ML.NET和Azure Function进行机器学习 - 第2部分的更多相关文章
- 使用ML.NET和Azure Function进行机器学习 - 第1部分
介绍 一提到机器学习,总是让人望而生畏.幸运的是,Azure正在想方设法让开发人员更容易进入机器学习.ML.NET是Microsoft Research专为.NET开发人员开发的机器学习框架,因此您可 ...
- 创建Azure Function
azure function的用途在于运行一些逻辑简单的执行逻辑,比如batch job,定时任务,webhook等等.1. 创建azure function创建完毕后,进入app service,选 ...
- 使用Azure Function玩转Serverless
Serverless&Azure Functions 通过无服务器计算,开发者无需管理基础结构,从而可以更快构建应用程序.通过无服务器应用程序,将由云服务提供商自动预配.缩放和管理运行代码所需 ...
- 【Azure Application Insights】在Azure Function中启用Application Insights后,如何配置不输出某些日志到AI 的Trace中
问题描述 基于.NET Core的Function App如果配置了Application Insights之后,每有一个函数被执行,则在Application Insights中的Logs中的tra ...
- 【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
问题描述 当需要在应用中有大量的出站连接时候,就会涉及到SNAT(源地址网络转换)耗尽的问题.而通过Azure App Service/Function的默认监控指标图表中,却没有可以直接查看到SNA ...
- 【Azure 应用服务】Azure Function集成虚拟网络,设置被同在虚拟网络中的Storage Account触发,遇见Function无法触发的问题
一切为了安全,所有的云上资源如支持内网资源访问,则都可以加入虚拟网络 问题描述 使用Azure Function处理Storage Account中Blob 新增,更新,删除等情况.Storage A ...
- 【Azure 应用服务】Azure Function App 执行PowerShell指令[Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt]错误
问题描述 使用PowerShell脚本执行获取Azure订阅列表的指令(Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt).在本地 ...
- 【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码逐步最终源端
问题描述 在使用Azure Function App的SendGrid Binging功能,调用SendGrid服务器发送邮件功能时,有时候遇见间歇性,偶发性异常.在重新触发SendGrid部分的Fu ...
- 【Azure 应用服务】Azure Function HTTP 触发后, 230秒就超时。而其他方式触发的Function, 执行5分钟后也超时,如何调整超时时间?
问题描述 Azure Function HTTP 触发后, 230秒就超时,而其他方式触发的Function, 执行5分钟后也超时,如何调整超时时间? 问题分析 查阅官方文档,对函数应用超时持续时间有 ...
随机推荐
- Vue-Router嵌套路由
1:查看router-view所对应的位置,是属于顶级出口还是存在于某个组件当中 2:当router-view存在于某个组件当中时 const User = { template: ` <div ...
- java 堆、栈、方法区/ 类变量、成员变量、局部变量
方法区:类信息.类变量(静态变量和常量).方法 堆:对象.成员变量 栈:局部变量 (1)当程序运行时,首先通过类装载器加载字节码文件,经过解析后装入方法区!在方法区中存了类的各种信息,包括类变量.类常 ...
- XAML控件不可访问,它具有一定的保护级别
其它namespace的代码访问控件时会出现这个问题 需要把控件状态由protected改为public <TextBlock x:FieldModifier="public" ...
- vue中 v-show和v-if的区别?
v-show的操作元素的属性是display v-if的操作元素的移除和新建 还有一个就是权限的时候,v-show普通用户能看到,用v-if的时候普通用户看不到.
- 2018-4-5-cadence skill
skill 是 Cadence 提供的二次开发语言,可以做很多有用的二次开发. 开发参考手册:<algroskill><sklangref><sklanguser> ...
- Android EventBus技能点梳理
EventBus为Github上的开源项目,地址:https://github.com/greenrobot/EventBus 疑问:1. 现在都是Android Studio创建的项目,如何导入这些 ...
- Dagger2 notes
Android:dagger2让你爱不释手-基础依赖注入框架篇 Android Dagger2 MVP架构 一看就明白 Dagger2教程六之Component的组织方法(原) Dagger 2从浅到 ...
- C++的编译预处理
C++中,在编译器对源程序进行编译之前,首先要由预处理对程序文本进行预处理.预处理器提供了一组预编译处理指令和预处理操作符.预处理指令实际上不是C++语言的一部分,它只是用来扩充C++程序设计的环境. ...
- laravel 邮件配置
.env的配置 MAIL_DRIVER=smtpMAIL_HOST=smtp.163.comMAIL_PORT=465MAIL_USERNAME=你的163邮箱地址MAIL_PASSWORD=你的16 ...
- 为bootstrap+angularJs打造的表格代码生成器
private void btnCreateCode_Click(object sender, EventArgs e) { string objName = txtObjName.Text; if ...