Я использовал метод Fit для обучения своей модели, который генерирует исключение «Индекс находился за пределами массива».
Я создал одну библиотеку .Net Core 3.1 и UnitTesting (. Net Core 3.1) где UnitTesting вызывает свойство "Training ()" в моей библиотеке.
Этот код ссылается на пример в Учебное пособие: Автоматическая визуальная проверка с использованием обучения переноса с помощью ML.NET Image ClassificationAPI
public void Training()
{
MLContext mlc = new MLContext();
try
{
IEnumerable<ImageData> images = LoadImagesFromDirectory(folder: AssetsRelativePath, useFolderNameAsLabel: true);
IDataView imageData = mlc.Data.LoadFromEnumerable(images);
IDataView shuffledData = mlc.Data.ShuffleRows(imageData);
var preprocessingPipeline = mlc.Transforms.Conversion.MapValueToKey(inputColumnName: "Label", outputColumnName: "LabelAsKey")
.Append(mlc.Transforms.LoadImages(outputColumnName: "Image", imageFolder: AssetsRelativePath, useImageType: false, inputColumnName: "ImagePath"));
IDataView preProcessedData = preprocessingPipeline.Fit(shuffledData).Transform(shuffledData);
TrainTestData trainSplit = mlc.Data.TrainTestSplit(data: preProcessedData, testFraction: 0.3);
TrainTestData validationTestSplit = mlc.Data.TrainTestSplit(trainSplit.TestSet);
IDataView trainSet = trainSplit.TrainSet;
IDataView validationSet = validationTestSplit.TrainSet;
IDataView testSet = validationTestSplit.TestSet;
var trainingPipeline = mlc.Model.ImageClassification(
featuresColumnName: "Image",
labelColumnName: "LabelAsKey",
arch: ImageClassificationEstimator.Architecture.ResnetV2101,
epoch: 100,
batchSize: 10,
testOnTrainSet: false,
metricsCallback: (metrics) => Logger.Debug(metrics),
validationSet: validationSet,
reuseTrainSetBottleneckCachedValues: true,
reuseValidationSetBottleneckCachedValues: true,
disableEarlyStopping: false
)
.Append(mlc.Transforms.Conversion.MapKeyToValue("PredictedLabel"));
ITransformer trainedModel = trainingPipeline.Fit(trainSet);
}
catch{
}
}
Я получаю исключение: IndexOutOfRangeException