public RnnTrainRec(Database db, ObjectId mixtureId, Chromosome chromosome, double trainingSeconds, Vec initialWeights, MRnnSpec rnnSpec, IEnumerable <double> costHistory) : base(db, mixtureId, chromosome, trainingSeconds) { InitialWeights = initialWeights; RnnSpec = rnnSpec; CostHistory = costHistory.ToArray(); Database.Store(this); }
public static RnnTrainRec TrainRnn(Mat input, Vec output, Chromosome chrom, MakeRnnTrainRecFunc makeResult, Func <bool> canceled = null) { Func <int, LayerSpec> logisticSigmoidRecurrent = nodeCount => new LayerSpec(nodeCount, true, ActivationType.LogisticSigmoid); var layers = new List <LayerSpec> { logisticSigmoidRecurrent(chrom.RnnLayer1NodeCount), logisticSigmoidRecurrent(chrom.RnnLayer2NodeCount), new LayerSpec(1, false, ActivationType.Linear) }; var epochMax = chrom.RnnTrainingEpochs; var numInputs = input.RowCount; var rnnWeightCount = RNN.GetWeightCount(layers, numInputs); var initialWeights = RNN.MakeRandomWeights(rnnWeightCount); var trainResult = RNN.TrainSCG(layers, initialWeights, epochMax, input, output, canceled); return(makeResult(initialWeights, MRnnSpec.FromRnnSpec(trainResult.RNNSpec), trainResult.CostHistory)); }