private ActionResult plot(IFunctionWithDerivative f, PlotViewModel model) { List <Tuple <Color, List <Vector <double> > > > points = new List <Tuple <Color, List <Vector <double> > > >(); double minDeriv = model.MinDerivCompMaxMagn; var result = new DenseVector(f.DimensionsCount); { result[0] = model.InitialX; result[1] = model.InitialY; var ps = new List <Vector <double> >(); points.Add(new Tuple <Color, List <Vector <double> > >(Color.Lime, ps)); var sdImpl = new SteepestDescentBasicOptmizer(model.BasicStep, model.MaxIters); sdImpl.Optimize(result, f, model.MinDerivCompMaxMagn, (i, pFunc) => ps.Add(pFunc()), CancellationToken.None); } { result[0] = model.InitialX; result[1] = model.InitialY; var ps = new List <Vector <double> >(); points.Add(new Tuple <Color, List <Vector <double> > >(Color.Red, ps)); var sdImpl = new SteepestDescentBasicOptmizer(model.MomentumStep, model.MomentumStart, model.MomentumEnd, model.MaxIters); sdImpl.Optimize(result, f, model.MinDerivCompMaxMagn, (i, pFunc) => ps.Add(pFunc()), CancellationToken.None); } { result[0] = model.InitialX; result[1] = model.InitialY; var ps = new List <Vector <double> >(); points.Add(new Tuple <Color, List <Vector <double> > >(Color.Blue, ps)); var sdImpl = new SteepestDescentAdvancedOptmizer(model.MomentumStep, model.MomentumStart, model.MomentumEnd, model.MaxIters); sdImpl.Optimize(result, f, model.MinDerivCompMaxMagn, (i, pFunc) => ps.Add(pFunc()), CancellationToken.None); } { result[0] = model.InitialX; result[1] = model.InitialY; var ps = new List <Vector <double> >(); points.Add(new Tuple <Color, List <Vector <double> > >(Color.Magenta, ps)); var sdImpl = new RpropPlusOptmizer(model.BasicStep, 10, 1.2, 0.5, model.MaxIters); sdImpl.Optimize(result, f, model.MinDerivCompMaxMagn, (i, pFunc) => ps.Add(pFunc()), CancellationToken.None); } { result[0] = model.InitialX; result[1] = model.InitialY; var ps = new List <Vector <double> >(); points.Add(new Tuple <Color, List <Vector <double> > >(Color.Cyan, ps)); var sdImpl = new ImprovedRpropMinusOptmizer(model.BasicStep, 10, 1.2, 0.5, model.MaxIters); sdImpl.Optimize(result, f, model.MinDerivCompMaxMagn, (i, pFunc) => ps.Add(pFunc()), CancellationToken.None); } var fp = new FunctionPlotter(); var img = fp.AutoContourPlot(f, points, 0.1f, 0, 1, model.Width, model.Height, model.ContoursCount, model.ScalePower); var ms = new MemoryStream(); img.Save(ms, ImageFormat.Png); ms.Seek(0, SeekOrigin.Begin); return(File(ms, "image/png")); }
private void performTrainTest(Net net, Matrix <double> inputs, int[] outputIndices, double learningRate, double regularizationLambda, int maxIters) { var optimizer = new SteepestDescentAdvancedOptmizer(learningRate, 0.6, 0.99, maxIters); var trainer = new NetTrainer(net, optimizer, regularizationLambda); bool converged = trainer.Train(inputs, outputIndices, 1e-4, 1, null, CancellationToken.None); var actualOutputIndices = trainer.Predict(inputs); CollectionAssert.AreEqual(outputIndices, actualOutputIndices.Select(x => x.OutputId).ToArray()); }
public void OptimizeNoMomentumTest() { var instance = new SteepestDescentAdvancedOptmizer(0.05, 0, 0, 256); OptimizerTestsHelper.PerformOptimizerTestOnSinCosCrazyFunction(instance); }