ML .Net无法重新训练神经网络

时间:2019-09-25 07:19:35

标签: .net ml.net

我正在尝试根据新数据重新训练模型。 神经网络学习算法允​​许根据文档进行再训练。 enter image description here

//формируем данные для обучения из коллекции
var trainingDataView = 
mlContext.Data.LoadFromEnumerable(trainDataFromDb.TrainData);

//формируем данные в формате для обучения
var trainingPipeline = mlContext.Transforms.Conversion.MapValueToKey(inputColumnName: "IdCategory", outputColumnName: "Label")
    .Append(mlContext.Transforms.Text.FeaturizeText(inputColumnName: "DescriptionProduct", outputColumnName: "DescriptionProductFeaturized"))
    .Append(mlContext.Transforms.Concatenate("Features", "DescriptionProductFeaturized"))
    .Append(mlContext.MulticlassClassification.Trainers.LbfgsMaximumEntropy())
    .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));

//обучаем нейросеть
ITransformer trainedModel = trainingPipeline.Fit(trainingDataView);

//используем FileStream
using (var fileStream = new FileStream(FullPathModelNeural, FileMode.Create, FileAccess.Write, FileShare.Write))
{
    //сохраняем обученную модель нейронной сети
    mlContext.Model.Save(trainedModel, trainingDataView.Schema, fileStream);
}

神经网络处理分配给它的任务。

但是,只要我想对其进行重新培训,就使用以下代码:

//загружаем обученную модель
var trainedModelFromFile = mlContext.Model.Load(FullPathModelNeural, out var modelSchema);

//извлекаем параметры обученной модели
var originalModelParameters = ((ISingleFeaturePredictionTransformer<object>)trainedModelFromFile).Model as MaximumEntropyModelParameters;

//формируем данные для обучения из коллекции
var trainingDataView = mlContext.Data.LoadFromEnumerable(trainDataFromDb.TrainData);

//дообучаем модель с учетом новых данных
var retrainedModel = mlContext.MulticlassClassification.Trainers.LbfgsMaximumEntropy().Fit(trainingDataView, originalModelParameters);

//используем FileStream
using (var fileStream = new FileStream(FullPathModelNeural, FileMode.Create, FileAccess.Write, FileShare.Write))
{
    //сохраняем обученную модель нейронной сети
    mlContext.Model.Save(retrainedModel, modelSchema, fileStream);
}

我得到一个例外。无法将对象类型Microsoft.ML.Data.TransformerChain [Microsoft.ML.ITransformer]强制转换为类型Microsoft.ML.ISingleFeaturePredictionTransformer [System.Object] 在这行代码中

var originalModelParameters = ((ISingleFeaturePredictionTransformer<object>)trainedModelFromFile).Model as MaximumEntropyModelParameters;

请帮我了解如何正确地重新训练神经网络

1 个答案:

答案 0 :(得分:1)

问题可能出在保存模型的方式上,即您不仅保存了估算器。

类似的示例可能会有所帮助:

=MEDIAN(IF($A$6:$A$200=$L$5,D6:D200))