如何将介绍性的 ML.Net 演示翻译成 F#?

编程入门 行业动态 更新时间:2024-10-27 12:41:04
本文介绍了如何将介绍性的 ML.Net 演示翻译成 F#?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在查看这里的 cs 文件:www.microsoft/net/learn/apps/machine-learning-and-ai/ml-dotnet/get-started/windows在我尝试将其转换为 F# 时,它编译得很好,但在运行时抛出 System.Reflection.TargetInvocationException:FormatException:其中一个标识的项目格式无效.我错过了什么?

I'm looking at a the cs file here: www.microsoft/net/learn/apps/machine-learning-and-ai/ml-dotnet/get-started/windows and in my attempt to translate it to F# it compiles just fine but throws a System.Reflection.TargetInvocationException when run: FormatException: One of the identified items was in an invalid format. What am I missing?

open Microsoft.ML open Microsoft.ML.Runtime.Api open Microsoft.ML.Trainers open Microsoft.ML.Transforms open System type IrisData = [<Column("0")>] val mutable SepalLength : float [<Column("1")>] val mutable SepalWidth : float [<Column("2")>] val mutable PetalLength : float [<Column("3")>] val mutable PetalWidth : float [<Column("4");ColumnName("Label")>] val mutable Label : string new(sepLen, sepWid, petLen, petWid, label) = { SepalLength = sepLen SepalWidth = sepWid PetalLength = petLen PetalWidth = petWid Label = label } type IrisPrediction = [<ColumnName("PredictedLabel")>] val mutable PredictedLabels : string new() = { PredictedLabels = "Iris-setosa" } [<EntryPoint>] let main argv = let pipeline = new LearningPipeline() let dataPath = "iris.data.txt" pipeline.Add(new TextLoader<IrisData>(dataPath,separator = ",")) pipeline.Add(new Dictionarizer("Label")) pipeline.Add(new ColumnConcatenator("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")) pipeline.Add(new StochasticDualCoordinateAscentClassifier()) pipeline.Add(new PredictedLabelColumnOriginalValueConverter(PredictedLabelColumn = "PredictedLabel") ) let model = pipeline.Train<IrisData, IrisPrediction>() let prediction = model.Predict(IrisData(3.3, 1.6, 0.2, 5.1,"")) Console.WriteLine("Predicted flower type is: {prediction.PredictedLabels}") 0 // return an integer exit code

推荐答案

您可以在下面找到 ML 教程,使用 Microsoft.ML 0.1.0(可能会因更新版本而中断).使示例工作的代码与您的代码的两个主要区别在于 IrisData 和 IrisPrediction 类型定义:

You may find below a working F# version of code for the ML tutorial, using Microsoft.ML 0.1.0 (might break with newer versions). Two major differences from your code that make the sample work are both within IrisData and IrisPredictiontype definitions:

  • 在 F# 中准确表示 C# POCO 具有无参数构造函数和对字段的公共访问
  • 将 C# float 正确移植到 F#,即 float32
  • Accurate presentation of C# POCO in F# having parameterless constructor and public access to the fields
  • Correct porting of C# float to F#, which is float32

这是代码

open Microsoft.ML open Microsoft.ML.Runtime.Api open Microsoft.ML.Trainers open Microsoft.ML.Transforms open System type IrisData() = [<Column("0")>] [<DefaultValue>] val mutable public SepalLength: float32 [<DefaultValue>] [<Column("1")>] val mutable public SepalWidth: float32 [<DefaultValue>] [<Column("2")>] val mutable public PetalLength:float32 [<DefaultValue>] [<Column("3")>] val mutable public PetalWidth:float32 [<DefaultValue>] [<Column("4")>] [<ColumnName("Label")>] val mutable public Label:string type IrisPrediction() = [<ColumnName("PredictedLabel")>] [<DefaultValue>] val mutable public PredictedLabel : string [<EntryPoint>] let main argv = let pipeline = new LearningPipeline() let dataPath = "iris.data.txt" let a = IrisPrediction() pipeline.Add(new TextLoader<IrisData>(dataPath,separator = ",")) pipeline.Add(new Dictionarizer("Label")) pipeline.Add(new ColumnConcatenator("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")) pipeline.Add(new StochasticDualCoordinateAscentClassifier()) pipeline.Add(new PredictedLabelColumnOriginalValueConverter(PredictedLabelColumn = "PredictedLabel") ) let model = pipeline.Train<IrisData, IrisPrediction>() let x = IrisData() x.SepalLength <- 3.3f x.SepalWidth <- 1.6f x.PetalLength <- 0.2f x.PetalWidth <- 5.1f let prediction = model.Predict(x) printfn "Predicted flower type is: %s" prediction.PredictedLabel 0

及其产生的输出:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off. Using 4 threads to train. Automatically choosing a check frequency of 4. Auto-tuning parameters: maxIterations = 9996. Auto-tuning parameters: L2 = 2.668802E-05. Auto-tuning parameters: L1Threshold (L1/L2) = 0. Using best model from iteration 892. Not training a calibrator because it is not needed. Predicted flower type is: Iris-virginica Press any key to continue . . .

更多推荐

如何将介绍性的 ML.Net 演示翻译成 F#?

本文发布于:2023-11-09 10:41:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1572160.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何将   翻译成   演示   Net   ML

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!