Я использую 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);
Скриншот ошибки:
Загружаемый набор данных (просто небольшой снимок, набор данных содержит 15 000 векторов объектов):
Я не могу понять, почему возникла эта ошибка, поскольку она прекрасно работала до того, как я реализовал код перекрестной проверки. Я не понимаю, почему это повлияет на метку имен элементов в модели.