介绍

一提到机器学习,总是让人望而生畏。幸运的是,Azure正在想方设法让开发人员更容易进入机器学习。ML.NET是Microsoft Research专为.NET开发人员开发的机器学习框架,因此您可以在Visual Studio中完成所有工作。如果你还没有玩过它,我想你会爱上它。当您准备好部署ML.NET算法时,您可以通过Azure Function使用无服务器架构- 而不必担心运行时会把服务器和容器弄得一团糟。

无服务器机器学习

受到Luis Quintanilla的文章启发,有关ML.NETAzure Function,我们尝试把二者结合起来使用。您将在本地使用ML.NET来训练您的机器学习模型。然后,您将创建一个Azure环境,其中包含存储帐户和Azure Function,以托管您的机器学习应用程序。使用您的模型构建应用程序的最后一步将在下一篇文章中介绍。

创建您的模型

对于这个快速项目的ML.NET部分,让我们从ML.NET10分钟入门教程中构建鸢尾花分类模型。作为先决条件,您需要安装Azure CLI 2.0, Azure Function Core Tools和最新版本的.NET Core

打开命令提示符并为ML.NET项目创建一个新文件夹。

> mkdir demo
> cd demo

接下来,创建一个新的解决方案以及一个新的控制台项目并安装ML.NET包。

> dotnet new solution
> dotnet new console -o model
> dotnet sln add model/model.csproj
> cd model
> dotnet add package Microsoft.ML --version 0.4.
> dotnet restore

在模型下创建数据目录。

> mkdir data

打开UCI机器学习库:Iris数据集,将数据复制并粘贴到VS Code或TextEdit或Notepad中,并将其保存为数据目录中的iris-data.txt。现在是时候写一些代码了。在Visual Studio Code中打开项目并创建几个数据结构类:IrisData.csIrisPrediction.cs

using Microsoft.ML.Runtime.Api;

        public class IrisData
{
[Column("")]
public float SepalLength; [Column("")]
public float SepalWidth; [Column("")]
public float PetalLength; [Column("")]
public float PetalWidth; [Column("")]
[ColumnName("Label")]
public string Label;
} public class IrisPrediction
{
[ColumnName("PredictedLabel")]
public string PredictedLabels;
}

添加模型类以执行机器学习训练。

using System.Threading.Tasks;
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Trainers;
using Microsoft.ML.Transforms; class Model
{
public static async Task<PredictionModel<IrisData, IrisPrediction>> Train(LearningPipeline pipeline, string dataPath, string modelPath)
{
// Load Data
pipeline.Add(new TextLoader(dataPath).CreateFrom<IrisData>(separator: ',')); // Transform Data
// Assign numeric values to text in the "Label" column, because
// only numbers can be processed during model training
pipeline.Add(new Dictionarizer("Label")); // Vectorize Features
pipeline.Add(new ColumnConcatenator("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")); // Add Learner
pipeline.Add(new StochasticDualCoordinateAscentClassifier()); // Convert Label back to text
pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" }); // Train Model
var model = pipeline.Train<IrisData, IrisPrediction>(); // Persist Model
await model.WriteAsync(modelPath); return model;
}
}

将您的逻辑放在Program.cs文件中以运行该过程:

 class Program
{
static void Main(string[] args)
{
string dataPath = "/Users/mbcrump/Documents/demo/model/data/iris-data.txt"; string modelPath = "/Users/mbcrump/Documents/demo/model/model.zip"; var model = Model.Train(new LearningPipeline(), dataPath, modelPath).Result; // Test data for prediction
var prediction = model.Predict(new IrisData()
{
SepalLength = 3.3f,
SepalWidth = 1.6f,
PetalLength = 0.2f,
PetalWidth = 5.1f
}); Console.WriteLine($"Predicted flower type is: {prediction.PredictedLabels}"); }
}

运行模型项目以在根目录中创建新的model.zip文件。以下是我得到的结果。

Michaels-MacBook-Pro:model mbcrump$ dotnet run
Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Using threads to train.
Automatically choosing a check frequency of .
Auto-tuning parameters: maxIterations = .
Auto-tuning parameters: L2 = 2.668802E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = .
Using best model from iteration .
Not training a calibrator because it is not needed.
Predicted flower type is: Iris-virginica

恭喜!您已经使用ML.NET对机器学习模型进行了培训,对鸢尾花进行了分类。

使用Cloud Shell设置Azure环境

我们将使用Azure Cloud Shell,它使用Azure CLI来设置我们的Azure环境。最简单的方法是登录Azure门户帐户,然后单击下面显示的Cloud Shell图标以打开bash shell或转到shell.azure.com

登录后,在bash shell中为此项目创建一个新资源组(并用您自己的一个替换“mlnetdemo”以及该位置)。

$ az group create --name mlnetdemo --location westus

将存储添加到此资源组。

注意:您必须将以下名称更改为唯一的名称

$ az storage account create --name mlnetdemostorage --location westus --resource-group mlnetdemo --sku Standard_LRS

创建Azure Function并将其配置为使用支持.NET Core的beta运行时。

注意:您必须将以下名称更改为唯一的名称

 $ az functionapp create --name mlnetdemoazfunction1 --storage-account mlnetdemostorage1 --consumption-plan-location westus --resource-group mlnetdemo 

 $ az functionapp config appsettings set --name mlnetdemoazfunction1 --resource-group mlnetdemo --settings FUNCTIONS_EXTENSION_VERSION=beta 

部署您的机器学习模型

要将模型部署到服务器,您需要获取存储帐户的密钥。在bash窗口中使用以下命令来获取它。

$ az storage account keys list --account-name mlnetdemostorage1 --resource-group mlnetdemo 

你会看到以下内容:

[
{
"keyName": "key1",
"permissions": "Full",
"value": "YOURKEY"
},
{
"keyName": "key2",
"permissions": "Full",
"value": "NONEYOBUSINESS"
}
]

使用以下命令基于您的帐户密钥创建一个名为models的新目录,用于放入模型(可以在设置|访问键下的导航窗口中找到)。

$ az storage container create --name models --account-key YOURKEY --account-name mlnetdemostorage1

由于我们使用的是Cloud Shell,因此在此步骤中使用Azure Portal会更容易。如果您愿意,也可以使用Azure CLI。浏览到您的mlnetdemo资源组版本,并深入查看您之前创建的存储资源。以这些blob进行训练前,您会看到models文件夹下新的子目录,在硬盘上找到model.zip上传到这里。

第2部分中,我们将介绍构建由Azure Function托管的应用程序,该应用程序将针对您的鸢尾花图像进行分类。

使用ML.NET和Azure Function进行机器学习 - 第1部分的更多相关文章

  1. 使用ML.NET和Azure Function进行机器学习 - 第2部分

    本文是<使用ML.NET和AzureFunction进行机器学习 - 第1部分>的续篇. 像机器一样识别鸢尾花 回顾第1部分,您将使用Visual Studio创建一个新的Azure Fu ...

  2. 创建Azure Function

    azure function的用途在于运行一些逻辑简单的执行逻辑,比如batch job,定时任务,webhook等等.1. 创建azure function创建完毕后,进入app service,选 ...

  3. 使用Azure Function玩转Serverless

    Serverless&Azure Functions 通过无服务器计算,开发者无需管理基础结构,从而可以更快构建应用程序.通过无服务器应用程序,将由云服务提供商自动预配.缩放和管理运行代码所需 ...

  4. 【Azure Application Insights】在Azure Function中启用Application Insights后,如何配置不输出某些日志到AI 的Trace中

    问题描述 基于.NET Core的Function App如果配置了Application Insights之后,每有一个函数被执行,则在Application Insights中的Logs中的tra ...

  5. 【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)

    问题描述 当需要在应用中有大量的出站连接时候,就会涉及到SNAT(源地址网络转换)耗尽的问题.而通过Azure App Service/Function的默认监控指标图表中,却没有可以直接查看到SNA ...

  6. 【Azure 应用服务】Azure Function集成虚拟网络,设置被同在虚拟网络中的Storage Account触发,遇见Function无法触发的问题

    一切为了安全,所有的云上资源如支持内网资源访问,则都可以加入虚拟网络 问题描述 使用Azure Function处理Storage Account中Blob 新增,更新,删除等情况.Storage A ...

  7. 【Azure 应用服务】Azure Function App 执行PowerShell指令[Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt]错误

    问题描述 使用PowerShell脚本执行获取Azure订阅列表的指令(Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt).在本地 ...

  8. 【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码逐步最终源端

    问题描述 在使用Azure Function App的SendGrid Binging功能,调用SendGrid服务器发送邮件功能时,有时候遇见间歇性,偶发性异常.在重新触发SendGrid部分的Fu ...

  9. 【Azure 应用服务】Azure Function HTTP 触发后, 230秒就超时。而其他方式触发的Function, 执行5分钟后也超时,如何调整超时时间?

    问题描述 Azure Function HTTP 触发后, 230秒就超时,而其他方式触发的Function, 执行5分钟后也超时,如何调整超时时间? 问题分析 查阅官方文档,对函数应用超时持续时间有 ...

随机推荐

  1. 业务线B/C端业务组件总结

    /** * 业务线组件总结 * */ /* B端组件的总结 1.组件cssBase的总结 1像素底部边框 */ @mixin border - 1px - b($background: $gray - ...

  2. JS实现快速排序,冒泡排序

    JS-排序详解-冒泡排序   说明 时间复杂度指的是一个算法执行所耗费的时间 空间复杂度指运行完一个程序所需内存的大小 稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面 不稳定指,如果a=b, ...

  3. 【转发】如何使用NPM?CNPM又是什么?

    转发:https://www.jianshu.com/p/f581cf9360a2 背景介绍 什么是npm? npm(node package manager)是nodejs的包管理器,用于node插 ...

  4. windows下编译Boost

    当前boost最新版本为1.55,下载地址:http://sourceforge.net/projects/boost/files/boost/1.55.0/或者从官网(www.boost.org)下 ...

  5. VB生成条形码(EAN-13)

    14年给别人写的一个库存软件,用到扫码枪,所以就有了这个类. 编码规则相对简单,详见百度百科EAN-13 示例运行效果如下: 类模块:cEAN13.cls Option Explicit '★━┳━━ ...

  6. vue 实现图片上传与预览,以及清除图片

    vue写原生的上传图片并预览以及清除图片的效果,下面是demo,其中里面有vue获取input框value值的方法以及vue中函数之间的调用 <!DOCTYPE html> <htm ...

  7. LINUX监控-spotlight

    这里连接的user不能是root(spotlight需要一个具有root权限的用户,但是又不允许是root),所以需要给要连接的linux端创建一个有root权限的用户,在linux主机创建了root ...

  8. 使用IDEA时跳转到.class的解决办法

    项目背景:jdk1.8 软件环境:IDEA 问题: 1. 两个不同的项目,在A项目中写了一个实体类.B项目中引用.在B项目中CTRL+鼠标左键点击进入,正常情况下是进入了源码文件,也就是.JAVA文件 ...

  9. JS跨域两三事

    今日,前端开发要求新的Web服务需要支持跨域,因为要发起 Ajax 到后端web 服务域名请求数据: 前端application域名是 other.abc.com (举个栗子)  api接口域名是 a ...

  10. js高级3

    1.解决函数内this的指向 可以在函数外提前声明变量_this/that=this 通过apply和call来修改函数内的this指向 (1)二者区别 用法是一样的,就是参数形式不一样        ...