我是F#/ .NET的新手,我正在尝试运行如何将介绍ML.Net演示转换为F#的接受答案中提供的F#示例?使用ML.NET库,在Visual Studio上使用F#,使用Microsoft.ML(0.2.0).
在构建它时,我得到了错误 error FS0039: The type 'TextLoader' is not defined.
为了避免这种情况,我添加了这一行
open Microsoft.ML.Data
Run Code Online (Sandbox Code Playgroud)
来源.然而,然而,线
pipeline.Add(new TextLoader<IrisData>(dataPath,separator = ","))
Run Code Online (Sandbox Code Playgroud)
触发:
error FS0033: The non-generic type 'Microsoft.ML.Data.TextLoader' does not expect any type arguments, but here is given 1 type argument(s)
改为:
pipeline.Add(new TextLoader(dataPath,separator = ","))
Run Code Online (Sandbox Code Playgroud)
收益率:
error FS0495: The object constructor 'TextLoader' has no argument or settable return property 'separator'. The required signature is TextLoader(filePath: string) : TextLoader.
改为:
pipeline.Add(new TextLoader(dataPath))
Run Code Online (Sandbox Code Playgroud)
使构建成功,但代码在运行时失败
ArgumentOutOfRangeException: Column …
我正在尝试创建一个应用程序,它根据用户的生活方式和药物的限制来预测服药的时间。
我的意思是:
我从患者那里得到的信息包括:
• 他/她吃他/她的饭菜的次数和时间
• 他/她什么时候醒来和入睡
• 他/她必须服用多少药片
从药物的限制来看:
• 药物是否应空腹食用
• 药物是否应随餐或不随餐食用
• 患者是否需要在进餐和服药之间休息(尚未显示在下面的屏幕上) )
• 等
示例数据集:https :
//ibb.co/Gvry945
我应该使用什么类型的模型/力学/算法来预测服药时间?回归是正确的吗?我需要预测 1,2,3,4 有时是 5 列。
我根据以下内容编写了一个简单的代码:
https
://docs.microsoft.com/pl-pl/dotnet/machine-learning/tutorials/predict-prices 如何使用回归任务使用 ML.NET 预测多个标签?
它工作正常,我可以预测超过 1 列。但是,我的问题仍然是空白单元格。当我试图从该数据中预测某些内容时,它总是显示错误的值,并且只有在所有单元格都完成后才能正常工作。
那么,我应该将我的数据集分散到更少的数据集(所有单元格都完整)吗?例如:
https
:
//ibb.co/m8HVPvb 当我只预测 TimeToTakeMedicine1
https://ibb.co/qNk9xQL
当我预测 TimeToTakeMedicine1 和 TimeToTakeMedicine2 时
https://ibb.co/GnRc1c0
当我预测 TimeToTakeMedicine1、TimeToTakeMedicine2、TimeToTakeMedicine3 等时。
有没有更简单更好的方法来解决这个问题?
预测 TimeToTakeMedicine1、TimeToTakeMedicine2、TimeToTakeMedicine3 的工作代码(为了简单起见,我去掉了 OnEmptyStomach、WithMeal 和 IsPossible)
using System;
using System.IO;
using Microsoft.ML;
using Microsoft.ML.Trainers;
namespace NextTry
{
class Program
{
static readonly string _trainDataPath = Path.Combine(Environment.CurrentDirectory, …
Run Code Online (Sandbox Code Playgroud) 总的来说,我对机器学习非常陌生,尤其是 Microsoft ML.NET。我想做的是为文本分类创建一个可重新训练的模型。假设我有一篇文章(用于训练)和一篇文章预测(用于分类):
public class Article
{
public string Text { get; set; }
public string Topic { get; set; }
}
public class ArticlePrediction
{
public float[] Score { get; set; }
public uint PredictedLabel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
根据可重新训练模型的文档和此 GitHub 问题,我得出结论,我将需要两个管道 - 准备管道和训练管道。并为“准备好的”数据创建一个单独的中间模型,以便进行重新训练:
public class ArticlePrepared : Article
{
[VectorType(???)]
public float[] Features { get; set; }
public uint Label { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
模型的实际训练是微不足道的:
public static void Train(MLContext ctx, IDataView data) …
Run Code Online (Sandbox Code Playgroud) 我有一个用于图像分类的 .NET Core 3 应用程序,使用 Microsoft 的 ML.NET 框架。
在我的开发机器上,我可以运行代码并且一切正常。
但是,当我将它部署到我的登台服务器时,我在运行时收到此错误:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
System.DllNotFoundException: Unable to load DLL 'tensorflow' or one of its dependencies: The specified module could not be found. (0x8007007E)
at Tensorflow.c_api.TF_NewGraph()
at Tensorflow.Graph..ctor()
at Microsoft.ML.Transforms.Dnn.DnnUtils.LoadTFSession(IExceptionContext ectx, Byte[] modelBytes, String modelFile)
...
Run Code Online (Sandbox Code Playgroud)
我试过在部署过程中将 tensorflow.dll 复制到 bin 文件夹中;我试过构建为 x64、x86 或 AnyCPU。我已经验证包含 SciSharp.TensorFlow.Redist 和 Microsoft.ML.Tensorflow.Redist NuGet 包。到目前为止,一切都没有奏效。
知道为什么它找不到 DLL 文件,或者我如何让它工作?
我正在使用 NuGet 包 Microsoft.ML (1.4.0) 和 SciSharp.TensorFlow.Redist (1.15.0)
初始训练和保存模型工作正常
var options = new Microsoft.ML.Vision.ImageClassificationTrainer.Options()
{
FeatureColumnName = "Image",
LabelColumnName = "LabelAsKey",
Arch = Microsoft.ML.Vision.ImageClassificationTrainer.Architecture.InceptionV3,
Epoch = 50,
BatchSize = 10,
LearningRate = 0.01f,
MetricsCallback = (metrics) => Console.WriteLine(metrics),
ValidationSet = testDataView
};
var pipeline = mlContext.MulticlassClassification.Trainers.ImageClassification(options)
.Append(mlContext.Transforms.Conversion.MapKeyToValue(
outputColumnName: "PredictedLabel",
inputColumnName: "PredictedLabel"));
ITransformer trainedModel = pipeline.Fit(trainDataView);
mlContext.Model.Save(trainedModel, trainDataView.Schema, "C:/Temp/model.zip")
Run Code Online (Sandbox Code Playgroud)
并使用模型进行预测工作正常
var loadModel = mlContext.Model.Load("C/Temp/Model.zip", out var modelInputSchema)
var PredictionEngine = mlContext.Model.CreatePredictionEngine<InMemoryImageData, ImagePrediction>(loadModel);
prediction = PredictionEngine.Predict(image);
Run Code Online (Sandbox Code Playgroud)
但是,如果我想继续用更多图像训练 model.zip 文件而不从头开始重新训练基线模型,我该怎么做?
有没有办法可以.Fit()
再次调用使用加载的模型?
Microsoft.ML 在 Xamarin 中工作吗?
我关注了https://dotnet.microsoft.com/learn/ml-dotnet 上的许多教程和视频。简单教程(此处)列出了我遵循的核心流程(在 Xamarin 项目中),但我无法使用 iOS(或 Android)Xamarin 应用程序查看MLModel.zip
从模型生成器生成的文件。它设置为“始终复制”。
我可以这样做,还是 Microsoft.ML 与 Xamarin(用于 ARM)不兼容?
ML NET 1.4 的发行说明(https://devblogs.microsoft.com/dotnet/announcing-ml-net-1-4-global-availability-machine-learning-for-net/)表明它将作为 .NET 运行Core 3.0 等应该可用于 ARM 处理器,但我无法确认或否认 ML.NET 在 Xamarin 跨平台开发方面的状态。
我有一个关于训练 ML.NET 的问题,它可以预测一个名字是否是女性。可以使用如下管道训练模型:
var mlContext = new MLContext();
IDataView trainingDataView = mlContext.Data.LoadFromEnumerable(trainingData);
var dataPrepPipeline = mlContext
.Transforms
.Text
.FeaturizeText("FirstNameFeaturized", "FirstName")
.Append(mlContext.Transforms.Text.FeaturizeText("MiddleNameFeaturized", "MiddleName"))
.Append(mlContext.Transforms.Text.FeaturizeText("LastNameFeaturized", "LastName"))
.Append(mlContext.Transforms.Concatenate(
"Features",
"FirstNameFeaturized",
"MiddleNameFeaturized",
"LastNameFeaturized"))
.Append(mlContext.Transforms.NormalizeMinMax("Features", "Features"))
.AppendCacheCheckpoint(mlContext);
var prepPipeline = dataPrepPipeline.Fit(trainingDataView);
var preprocessedData = prepPipeline.Transform(trainingDataView);
var trainer = dataPrepPipeline.Append(mlContext
.BinaryClassification
.Trainers
.AveragedPerceptron(labelColumnName: "IsFemale", numberOfIterations: 10, featureColumnName: "Features"));
ITransformer trainedModel = trainer.Fit(preprocessedData);
Run Code Online (Sandbox Code Playgroud)
我trainingData
从代码中遗漏了。该模型如下所示:
public class Person
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName …
Run Code Online (Sandbox Code Playgroud) 使用 ML.Net,我使用分类器进行文本解释。预测有一个作为 float[] 的分数列和一个预测标签。这是因为最高分数与预测标签相关,但其他分数只是没有特定顺序的浮点数。我怎么知道哪个分数与哪个标签相关?我怎样才能看到权重第二高的标签是什么?
例如,我得到这个: 0.00005009 0.00893076 0.1274763 0.6209787 0.2425644
0.6 是我预测的标签,但我还需要查看 0.24 是哪个标签,这样我才能明白为什么它会被混淆。
标签是诸如“Greeting”或“Joke”之类的文本字符串,它们在管道中被字典化,所以也许这就是为什么它们的顺序不正确的原因?
ML.Net 有没有办法将两者联系在一起?显示哪个分数与哪个标签相关?
我有一个用 Keras 用 Python 实现的神经网络。一旦我训练了它,我就导出了模型,我得到了两个文件:model.js 和 model.h5。现在我想在 .NET 项目中实时分类,我想使用经过训练的神经网络。
在 ML.NET 中有没有办法将模型和用 python 导出的训练权重加载到模型对象中?
我在文档 [1] 中看到可以加载以前保存的模型,但显然存储在 .zip 中,我找不到格式(也许制作一个脚本,从 python 中获取模型并“翻译”它到 ML.NET 模型。
显然 hdf5 格式是标准 [2],有没有办法用 ML.NET 加载它?
[1] https://docs.microsoft.com/en-us/dotnet/machine-learning/how-to-guides/sumption-model-ml-net
[2] https://support.hdfgroup.org/HDF5/doc1.6/UG/10_Datasets.html
在 中ML.net
,我想查看 中的数据IDataView
以验证是否加载了正确的数据。我看不到任何可视化工具/调试工具来查看它们,就像我们以System.Data.DataTable
表格形式查看一样
var mlContext = new MLContext();
IDataView trainData = mlContext.Data.LoadFromTextFile<TaxiTrip>(GetAbsolutePath("../../taxi-fare-test.csv"), hasHeader: true);
Run Code Online (Sandbox Code Playgroud)