如何将ML.Net演示演示转换为F#? [英] How to translate the intro ML.Net demo to F#?
问题描述
我正在这里查看一个cs文件:
https://www.microsoft.com/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:
https://www.microsoft.com/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 IrisPrediction
type 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 isfloat32
这里是代码
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#?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!