Fit 方法在加载预训练模型(例如从 ONNX 文件)时做什么



我可以摆脱管道吗?如果我加载完全训练的模型(例如从 onnx 文件(,则 Fit(训练数据(方法?

拟合方法到底有什么作用?我在某些来源中读到该方法将执行训练步骤,在其他来源中,我读到它适合管道(无论这应该意味着什么(。我还读到fit方法只是执行之前管道中定义的步骤。

但是,如果我加载完全训练的模型,是否需要管道中的此步骤? 当我从.zip文件加载模型时,我不需要 fit 方法。

为了澄清我的问题,我添加了一些代码... (代码不会在没有错误的情况下运行...我建议一些输入和输出列的命名问题......但这不是问题的一部分。;) ) 我想在没有 .fit 方法的情况下调用 CreatePredictionEngine。 (如前所述,保存.zip模型可以实现(

感谢您提前澄清。 ;)

var pipeline = mlContext.Transforms.LoadImages(outputColumnName: "image", imageFolder: "", inputColumnName: nameof(ImageData.ImagePath))
.Append(mlContext.Transforms.ResizeImages(outputColumnName: "image", imageWidth: ImageNetSettings.imageWidth, imageHeight: ImageNetSettings.imageHeight, inputColumnName: "image"))
.Append(mlContext.Transforms.ExtractPixels(outputColumnName: "inception_v3_input", inputColumnName: "image"))
.Append(mlContext.Transforms.ApplyOnnxModel(modelFile: modelLocation, outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }, inputColumnNames: new[] { TinyYoloModelSettings.ModelInput }))
.Append(mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "LabelKey", inputColumnName: "Label"))
.Append(mlContext.MulticlassClassification.Trainers.LbfgsMaximumEntropy(labelColumnName: "LabelKey", featureColumnName: TinyYoloModelSettings.ModelOutput))
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabelValue", "PredictedLabel"))
.AppendCacheCheckpoint(mlContext);

IDataView trainingData = mlContext.Data.LoadFromTextFile<ImageData>(path: _trainTagsTsv, hasHeader: false);
ITransformer model = pipeline.Fit(trainingData);

var imageData = new ImageData()
{
ImagePath = _url
};
var predictor = mlContext.Model.CreatePredictionEngine<ImageData, ImagePrediction>(model);
var prediction = predictor.Predict(imageData);

我强烈建议您阅读有关 ML.NET 高级概念的文档。作为开发人员,这可能比派生的文档和食谱更能说明您的:)

不幸的是,该文档有点过时了:我在最终确定预测引擎上的 API 之前编写了它,因此"预测函数"中的代码将无法编译。文档的其余部分似乎仍然有效。

在 ML.NET API 设计中,我们遵循了一组 Spark 命名约定。对我们来说不幸的是,sklearn使用相同的名称,但语义完全不同。所以,ML.NET 做的是Spark所做的事情,而不是sklearn所做的事情。


简而言之,"管道"是一个估算器。估计器只有一个操作:Fit,它获取数据并生成一个转换器

另一方面,变压器获取数据并产生数据。保存模型的 ZIP 文件包含转换器。

PredictionEngine是由变压器构成的。

通常,估算器是可训练和不可训练运算符的"管道"或"链",其中包括 ML 算法。但是,这不是必需的:只能使用不可训练的运算符(例如从文件加载 ONNX 模型(生成管道。它仍然是一个估算器(因此您必须调用Fit才能获得变形金刚,即使在这种情况下Fit将是一个无操作(。

MLContextAppend方法,在设计上,只创建估计器。称之为强打字的代价,但Fit是一项要求。


在这个解释中,我故意没有使用术语"模型":不幸的是,它已经变得如此繁重,以至于很难分辨"模型"是指"ML算法",还是"可以自我训练的可变对象",还是"这种训练的结果"。

最新更新