Ошибка «Не найден» столбец функций при использовании ML.net - PullRequest
0 голосов
/ 26 апреля 2020

Я использую ML. net, чтобы создать систему, которая классифицирует эмоции на основе некоторых обучающих данных, она работала, пока я не реализовал перекрестную проверку.

Мой конвейерный код (это также включает перекрестную проверку) код проверки):

var featureVectorName = "Features";
var labelColumnName = "Label";

var pipeline = mlContext.Transforms.Conversion.MapValueToKey(inputColumnName: "label", outputColumnName: labelColumnName)
                .Append(mlContext.Transforms.Concatenate(featureVectorName, "leftEyebrow", "rightEyebrow", "leftLip", "rightLip", "lipHeight", "lipWidth"))
                .AppendCacheCheckpoint(mlContext)
                .Append(mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy(labelColumnName, featureVectorName))
                .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));

var model = pipeline.Fit(split.TrainSet);

#region CrossValidation
IDataView transformedData = model.Transform(split.TrainSet);
IEstimator<ITransformer> sdca = mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy();

var cvResults = mlContext.MulticlassClassification.CrossValidate(transformedData, sdca, numberOfFolds: 5);

ITransformer[] models =
            cvResults
            .OrderByDescending(fold => fold.Metrics.MicroAccuracy)
            .Select(fold => fold.Model)
            .ToArray();

ITransformer topModel = models[0];
#endregion

using (var fileStream = new FileStream("model.zip", FileMode.Create, FileAccess.Write, FileShare.Write))
            { mlContext.Model.Save(topModel, split.TrainSet.Schema, fileStream); }

Затем я загружаю модель и создаю предиктор, в котором происходит ошибка:

DataViewSchema predictionPipelineSchema;
ITransformer model = mlContext.Model.Load(@"model.zip", out predictionPipelineSchema);

//Create predictor using loaded model
var predictor = mlContext.Model.CreatePredictionEngine<TrainingData, OutputData>(model);

Скриншот ошибки:

enter image description here

Загружаемый набор данных (просто небольшой снимок, набор данных содержит 15 000 векторов объектов):

enter image description here

Я не могу понять, почему возникла эта ошибка, поскольку она прекрасно работала до того, как я реализовал код перекрестной проверки. Я не понимаю, почему это повлияет на метку имен элементов в модели.

...