1. Test Modules
  2. Training Characteristics
    1. Input Learning
      1. Gradient Descent
      2. Conjugate Gradient Descent
      3. Limited-Memory BFGS
    2. Model Learning
      1. Gradient Descent
      2. Conjugate Gradient Descent
      3. Limited-Memory BFGS
    3. Composite Learning
      1. Gradient Descent
      2. Conjugate Gradient Descent
      3. Limited-Memory BFGS
    4. Results
  3. Results

Subreport: Logs for com.simiacryptus.ref.lang.ReferenceCountingBase

Test Modules

Using Seed 6333077177856787456

Training Characteristics

Input Learning

In this apply, we use a network to learn this target input, given it's pre-evaluated output:

TrainingTester.java:332 executed in 0.00 seconds (0.000 gc):

    return RefArrays.stream(RefUtil.addRef(input_target)).flatMap(RefArrays::stream).map(x -> {
      try {
        return x.prettyPrint();
      } finally {
        x.freeRef();
      }
    }).reduce((a, b) -> a + "\n" + b).orElse("");

Returns

    [ -0.128, 0.7, 0.08 ]
    [ 0.08, -0.128, 0.7 ]
    [ 0.7, 0.08, -0.128 ]
    [ 0.08, 0.7, -0.128 ]
    [ -0.128, 0.7, 0.08 ]

Gradient Descent

First, we train using basic gradient descent method apply weak line search conditions.

TrainingTester.java:480 executed in 0.37 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new ArmijoWolfeSearch());
      iterativeTrainer.setOrientation(new GradientDescent());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 2572940588623
BACKPROP_AGG_SIZE = 3
THREADS = 64
SINGLE_THREADED = false
Initialized CoreSettings = {
"backpropAggregationSize" : 3,
"jvmThreads" : 64,
"singleThreaded" : false
}
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Reset training subject: 2572971730178
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Constructing line search parameters: GD
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
th(0)=5.64613875236975;dx=-2.0112E22
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 5.64613875236975 > 0.02611046759081444
Armijo: th(2.154434690031884)=0.02611046759081444; dx=-2.011200000055901E10 evalInputDelta=5.620028284778936
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.077217345015942)=0.06890763467087782; dx=-2.0112000000573338E10 evalInputDelta=5.577231117698872
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.3590724483386473)=0.23490462063141168; dx=-2.0112000000806946E10 evalInputDelta=5.411234131738339
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.08976811208466183)=0.5757857847905579; dx=-2.0112000002210545E10 evalInputDelta=5.0703529675791925
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.017953622416932366)=0.7980005933551586; dx=-2.0112000004554497E10 evalInputDelta=4.848138159014591
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.002992270402822061)=0.8753710040218566; dx=-2.011200000590857E10 evalInputDelta=4.770767748347893
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(4.2746720040315154E-4)=0.8909284516773821; dx=-2.011200000622868E10 evalInputDelta=4.755210300692368
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(5.343340005039394E-5)=0.893267455035011; dx=-2.0112000006278355E10 evalInputDelta=4.752871297334739
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(5.9370444500437714E-6)=0.8935658053689666; dx=-2.011200000628472E10 evalInputDelta=4.752572947000783
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(5.937044450043771E-7)=0.8935993887110761; dx=-2.011200000628544E10 evalInputDelta=4.752539363658674
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(5.397313136403428E-8)=0.8936027811809071; dx=-2.011200000628551E10 evalInputDelta=4.752535971188843
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(4.4977609470028565E-9)=0.8936030921592645; dx=-2.0112000006285515E10 evalInputDelta=4.752535660210485
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(3.4598161130791205E-10)=0.8936031182553652; dx=-2.011200000628552E10 evalInputDelta=4.752535634114385
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(2.4712972236279432E-11)=0.9358105237384515; dx=-2.151468038435355E10 evalInputDelta=4.710328228631298
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.6475314824186289E-12)=2.096490003975083; dx=-5.120000001909319E20 evalInputDelta=3.549648748394667
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.029707176511643E-13)=5.646138752369103; dx=-2.0112E22 evalInputDelta=6.474820679613913E-13
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(6.057101038303783E-15)=5.646138752369712; dx=-2.0112E22 evalInputDelta=3.8191672047105385E-14
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
MIN ALPHA (3.3650561323909904E-16): th(2.154434690031884)=0.02611046759081444
Fitness changed from 5.64613875236975 to 0.02611046759081444
Iteration 1 complete. Error: 0.02611046759081444 Total: 0.1522; Orientation: 0.0025; Line Search: 0.1100
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
th(0)=0.02611046759081444;dx=-0.10092967449592949
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.02611046759081444 > 0.026110467590814434
WOLFE (weak): th(2.154434690031884E-15)=0.026110467590814434; dx=-0.10092967449592949 evalInputDelta=6.938893903907228E-18
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.026110467590814434 > 0.02611046759081443
WOLFE (weak): th(4.308869380063768E-15)=0.02611046759081443; dx=-0.10092967449592949 evalInputDelta=1.0408340855860843E-17
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.02611046759081443 > 0.026110467590814406
WOLFE (weak): th(1.2926608140191303E-14)=0.026110467590814406; dx=-0.10092967449592949 evalInputDelta=3.469446951953614E-17
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.026110467590814406 > 0.026110467590814312
WOLFE (weak): th(5.1706432560765214E-14)=0.026110467590814312; dx=-0.10092967449592949 evalInputDelta=1.2836953722228372E-16
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.026110467590814312 > 0.026110467590813813
WOLFE (weak): th(2.5853216280382605E-13)=0.026110467590813813; dx=-0.10092967449592946 evalInputDelta=6.279698983036042E-16
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.026110467590813813 > 0.026110467590810683
WOLFE (weak): th(1.5511929768229563E-12)=0.026110467590810683; dx=-0.10092967449592928 evalInputDelta=3.757411048965764E-15
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.026110467590810683 > 0.026110467590788188
WOLFE (weak): th(1.0858350837760695E-11)=0.026110467590788188; dx=-0.10092967449592805 evalInputDelta=2.6253305085433E-14
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Mini

...skipping 4117 bytes...

+ 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(2421586.1595451618)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1265829.1288531527)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(687950.6135071482)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(399011.355834146)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
WOLFE (weak): th(254541.72699764484)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(326776.5414158954)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(290659.1342067701)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(272600.4306022075)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(263571.07879992615)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(259056.40289878548)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
WOLFE (weak): th(256799.06494821515)=0.0; dx=-0.09985585632905336 evalInputDelta=0.02611046759081444
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
mu ~= nu (256799.06494821515): th(262.07642419319933)=0.0
Fitness changed from 0.02611046759081444 to 0.0
Iteration 2 complete. Error: 0.0 Total: 0.1468; Orientation: 0.0010; Line Search: 0.1412
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
th(0)=0.0;dx=-0.09927999999999998
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(555688.4574861026)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(277844.2287430513)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(92614.74291435043)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(23153.685728587607)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(4630.737145717521)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(771.7895242862536)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(110.25564632660766)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(13.781955790825958)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.5313284212028841)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.1531328421202884)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.013921167465480765)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.0011600972887900638)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(8.923825298385106E-5)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(6.374160927417933E-6)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(4.249440618278622E-7)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(2.655900386424139E-8)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.5622943449553759E-9)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(8.679413027529866E-11)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(4.568112119752561E-12)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(2.2840560598762807E-13)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.0876457427982288E-14)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
MIN ALPHA (4.943844285446495E-16): th(0.0)=0.0
Fitness changed from 0.0 to 0.0
Static Iteration Total: 0.0587; Orientation: 0.0008; Line Search: 0.0557
Iteration 3 failed. Error: 0.0
Previous Error: 0.0 -> 0.0
Optimization terminated 3
Final threshold in iteration 3: 0.0 (> 0.0) after 0.358s (< 30.000s)

Returns

    0.0

Training Converged

Conjugate Gradient Descent

First, we use a conjugate gradient descent method, which converges the fastest for purely linear functions.

TrainingTester.java:452 executed in 0.13 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new QuadraticSearch());
      iterativeTrainer.setOrientation(new GradientDescent());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 2573306620031
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Reset training subject: 2573309182170
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Constructing line search parameters: GD
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(0.0) = LineSearchPoint{point=PointSample{avg=5.64613875236975}, derivative=-2.0112E22}
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 5.64613875236975 > 0.8936031198014881
F(1.0E-10) = LineSearchPoint{point=PointSample{avg=0.8936031198014881}, derivative=-2.011200000628552E10}, evalInputDelta = -4.752535632568262
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.8936031198014881 > 0.8936031160301747
F(7.000000000000001E-10) = LineSearchPoint{point=PointSample{avg=0.8936031160301747}, derivative=-2.0112000006285522E10}, evalInputDelta = -4.752535636339576
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.8936031160301747 > 0.893603089630982
F(4.900000000000001E-9) = LineSearchPoint{point=PointSample{avg=0.893603089630982}, derivative=-2.011200000628552E10}, evalInputDelta = -4.752535662738768
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.893603089630982 > 0.8936029048366994
F(3.430000000000001E-8) = LineSearchPoint{point=PointSample{avg=0.8936029048366994}, derivative=-2.011200000628551E10}, evalInputDelta = -4.752535847533051
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.8936029048366994 > 0.8936016112799688
F(2.4010000000000004E-7) = LineSearchPoint{point=PointSample{avg=0.8936016112799688}, derivative=-2.011200000628549E10}, evalInputDelta = -4.752537141089781
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.8936016112799688 > 0.8935925565420069
F(1.6807000000000003E-6) = LineSearchPoint{point=PointSample{avg=0.8935925565420069}, derivative=-2.011200000628529E10}, evalInputDelta = -4.752546195827743
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.8935925565420069 > 0.8935291811733949
F(1.1764900000000001E-5) = LineSearchPoint{point=PointSample{avg=0.8935291811733949}, derivative=-2.011200000628394E10}, evalInputDelta = -4.752609571196356
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.8935291811733949 > 0.893085935195845
F(8.235430000000001E-5) = LineSearchPoint{point=PointSample{avg=0.893085935195845}, derivative=-2.0112000006274487E10}, evalInputDelta = -4.753052817173905
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.893085935195845 > 0.8900017568723084
F(5.764801000000001E-4) = LineSearchPoint{point=PointSample{avg=0.8900017568723084}, derivative=-2.0112000006209114E10}, evalInputDelta = -4.7561369954974415
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.8900017568723084 > 0.8692712554067793
F(0.004035360700000001) = LineSearchPoint{point=PointSample{avg=0.8692712554067793}, derivative=-2.0112000005787807E10}, evalInputDelta = -4.7768674969629705
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.8692712554067793 > 0.7544354084262086
F(0.028247524900000005) = LineSearchPoint{point=PointSample{avg=0.7544354084262086}, derivative=-2.011200000394034E10}, evalInputDelta = -4.891703343943542
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.7544354084262086 > 0.39696178293639
F(0.19773267430000002) = LineSearchPoint{point=PointSample{avg=0.39696178293639}, derivative=-2.011200000127992E10}, evalInputDelta = -5.2491769694333605
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.39696178293639 > 0.04454093525685814
F(1.3841287201) = LineSearchPoint{point=PointSample{avg=0.04454093525685814}, derivative=-2.011200000056576E10}, evalInputDelta = -5.601597817112892
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.04454093525685814 > 0.0013087242296571406
F(9.688901040700001) = LineSearchPoint{point=PointSample{avg=0.0013087242296571406}, derivative=-2.011200000055279E10}, evalInputDelta = -5.644830028140093
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.0013087242296571406 > 0.0
F(67.8223072849) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(474.7561509943) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(3323.2930569601003) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(23263.0513987207) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(162841.3597910449) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(1139889.5185373144) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(7979226.6297612) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(5.58545864083284E7) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(3.909821048582988E8) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(2.7368747340080914E9) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(1.915812313805664E10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
0.0 <= 5.64613875236975
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(1.0E10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.011200000055276E10}, evalInputDelta = -5.64613875236975
Right bracket at 1.0E10
Converged to right
Fitness changed from 5.64613875236975 to 0.0
Iteration 1 complete. Error: 0.0 Total: 0.0788; Orientation: 0.0005; Line Search: 0.0714
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(0.0) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(1.0E10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
0.0 <= 0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(5.0E9) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 5.0E9
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(2.5E9) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 2.5E9
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(1.25E9) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 1.25E9
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(6.25E8) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 6.25E8
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(3.125E8) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 3.125E8
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(1.5625E8) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 1.5625E8
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(7.8125E7) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 7.8125E7
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(3.90625E7) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 3.90625E7
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(1.953125E7) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 1.953125E7
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(9765625.0) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 9765625.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(4882812.5) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Right bracket at 4882812.5
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
F(2441406.25) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.09927999999999998}, evalInputDelta = 0.0
Loops = 12
Fitness changed from 0.0 to 0.0
Static Iteration Total: 0.0529; Orientation: 0.0006; Line Search: 0.0505
Iteration 2 failed. Error: 0.0
Previous Error: 0.0 -> 0.0
Optimization terminated 2
Final threshold in iteration 2: 0.0 (> 0.0) after 0.132s (< 30.000s)

Returns

    0.0

Training Converged

Limited-Memory BFGS

Next, we apply the same optimization using L-BFGS, which is nearly ideal for purely second-order or quadratic functions.

TrainingTester.java:509 executed in 0.65 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new ArmijoWolfeSearch());
      iterativeTrainer.setOrientation(new LBFGS());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setIterationsPerSample(100);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 2573444111337
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Reset training subject: 2573445357020
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Adding measurement 22d97307 to history. Total: 0
LBFGS Accumulation History: 1 points
Constructing line search parameters: GD
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 5.64613875236975 < 5.64613875236975. Total: 1
th(0)=5.64613875236975;dx=-2.0112E22
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Adding measurement 53a6ba74 to history. Total: 1
New Minimum: 5.64613875236975 > 0.02611046759081444
Armijo: th(2.154434690031884)=0.02611046759081444; dx=-2.011200000055901E10 evalInputDelta=5.620028284778936
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.06890763467087782 < 0.02611046759081444. Total: 2
Armijo: th(1.077217345015942)=0.06890763467087782; dx=-2.0112000000573334E10 evalInputDelta=5.577231117698872
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.23490462063141168 < 0.02611046759081444. Total: 2
Armijo: th(0.3590724483386473)=0.23490462063141168; dx=-2.0112000000806946E10 evalInputDelta=5.411234131738339
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.5757857847905579 < 0.02611046759081444. Total: 2
Armijo: th(0.08976811208466183)=0.5757857847905579; dx=-2.0112000002210545E10 evalInputDelta=5.0703529675791925
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.7980005933551586 < 0.02611046759081444. Total: 2
Armijo: th(0.017953622416932366)=0.7980005933551586; dx=-2.0112000004554493E10 evalInputDelta=4.848138159014591
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.8753710040218566 < 0.02611046759081444. Total: 2
Armijo: th(0.002992270402822061)=0.8753710040218566; dx=-2.011200000590857E10 evalInputDelta=4.770767748347893
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.8909284516773821 < 0.02611046759081444. Total: 2
Armijo: th(4.2746720040315154E-4)=0.8909284516773821; dx=-2.011200000622868E10 evalInputDelta=4.755210300692368
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.893267455035011 < 0.02611046759081444. Total: 2
Armijo: th(5.343340005039394E-5)=0.893267455035011; dx=-2.0112000006278355E10 evalInputDelta=4.752871297334739
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.8935658053689666 < 0.02611046759081444. Total: 2
Armijo: th(5.9370444500437714E-6)=0.8935658053689666; dx=-2.011200000628472E10 evalInputDelta=4.752572947000783
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.8935993887110761 < 0.02611046759081444. Total: 2
Armijo: th(5.937044450043771E-7)=0.8935993887110761; dx=-2.011200000628544E10 evalInputDelta=4.752539363658674
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.8936027811809071 < 0.02611046759081444. Total: 2
Armijo: th(5.397313136403428E-8)=0.8936027811809071; dx=-2.0112000006285515E10 evalInputDelta=4.752535971188843
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.8936030921592645 < 0.02611046759081444. Total: 2
Armijo: th(4.4977609470028565E-9)=0.8936030921592645; dx=-2.011200000628552E10 evalInputDelta=4.752535660210485
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.8936031182553652 < 0.02611046759081444. Total: 2
Armijo: th(3.4598161130791205E-10)=0.8936031182553652; dx=-2.011200000628552E10 evalInputDelta=4.752535634114385
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.9358105237384515 < 0.02611046759081444. Total: 2
Armijo: th(2.4712972236279432E-11)=0.9358105237384515; dx=-2.151468038435355E10 evalInputDelta=4.710328228631298
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 2.096490003975083 < 0.02611046759081444. Total: 2
Armijo: th(1.6475314824186289E-12)=2.096490003975083; dx=-5.120000001909319E20 evalInputDelta=3.549648748394667
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 5.646138752369103 < 0.02611046759081444. Total: 2
Armijo: th(1.029707176511643E-13)=5.646138752369103; dx=-2.0112E22 evalInputDelta=6.474820679613913E-13
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 5.646138752369712 < 0.02611046759081444. Total: 2
Armijo: th(6.057101038303783E-15)=5.646138752369712; dx=-2.0112E22 evalInputDelta=3.8191672047105385E-14
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.02611046759081444 < 0.02611046759081444. Total: 2
MIN ALPHA (3.3650561323909904E-16): th(2.154434690031884)=0.02611046759081444
Fitness changed from 5.64613875236975 to 0.02611046759081444
Iteration 1 complete. Error: 0.02611046759081444 Total: 0.0494; Orientation: 0.0062; Line Search: 0.0392
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.02611046759081444 < 0.02611046759081444. Total: 2
LBFGS Accumulation History: 2 points
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.02611046759081444 < 0.02611046759081444. Total: 2
th(0)=0.02611046759081444;dx=-0.10092967449592949
Feedback Input for key == x + 0

...skipping 24075 bytes...

ion rejected. Popping history element from 0.0, 0.0018823644871977182, 0.024295791456069585, 0.02600162173873294
LBFGS Accumulation History: 3 points
Removed measurement 451d9402 to history. Total: 20
Removed measurement 5308753a to history. Total: 19
Removed measurement 27150d83 to history. Total: 18
Removed measurement 1bbcee75 to history. Total: 17
Removed measurement c42915d to history. Total: 16
Removed measurement 2f840452 to history. Total: 15
Removed measurement d041ac0 to history. Total: 14
Removed measurement 16e47cf8 to history. Total: 13
Removed measurement 7c1bffc8 to history. Total: 12
Removed measurement 5903d1c6 to history. Total: 11
Removed measurement 1fdd3e13 to history. Total: 10
Removed measurement 7bab4619 to history. Total: 9
Removed measurement 4f82b0e9 to history. Total: 8
Removed measurement 5b1061d0 to history. Total: 7
Removed measurement 31910ec6 to history. Total: 6
Removed measurement 2a351398 to history. Total: 5
Removed measurement 31c61d31 to history. Total: 4
Removed measurement 3408ce01 to history. Total: 3
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Adding measurement 72f7ceb to history. Total: 3
th(0)=0.0;dx=-0.09927999999999998
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(555688.4574861026)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(277844.2287430513)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(92614.74291435043)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(23153.685728587607)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(4630.737145717521)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(771.7895242862536)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(110.25564632660766)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(13.781955790825958)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(1.5313284212028841)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(0.1531328421202884)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(0.013921167465480765)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(0.0011600972887900638)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(8.923825298385106E-5)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(6.374160927417933E-6)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(4.249440618278622E-7)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(2.655900386424139E-8)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(1.5622943449553759E-9)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(8.679413027529866E-11)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(4.568112119752561E-12)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(2.2840560598762807E-13)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(1.0876457427982288E-14)=0.0; dx=-0.09927999999999998 evalInputDelta=0.0
Input 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key == x + 0.0e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
MIN ALPHA (4.943844285446495E-16): th(0.0)=0.0
Fitness changed from 0.0 to 0.0
Static Iteration Total: 0.5314; Orientation: 0.4832; Line Search: 0.0425
Iteration 3 failed. Error: 0.0
Previous Error: 0.0 -> 0.0
Optimization terminated 3
Final threshold in iteration 3: 0.0 (> 0.0) after 0.650s (< 30.000s)

Returns

    0.0

Training Converged

TrainingTester.java:432 executed in 0.10 seconds (0.000 gc):

    return TestUtil.compare(title + " vs Iteration", runs);
Logging
Plotting range=[1.0, -2.583185350685973], [2.0, -0.583185350685973]; valueStats=DoubleSummaryStatistics{count=2, sum=0.052221, min=0.026110, average=0.026110, max=0.026110}
Plotting 2 points for GD
Only 1 points for CjGD
Plotting 2 points for LBFGS

Returns

Result

TrainingTester.java:435 executed in 0.01 seconds (0.000 gc):

    return TestUtil.compareTime(title + " vs Time", runs);
Logging
Plotting range=[0.0, -2.583185350685973], [0.146, -0.583185350685973]; valueStats=DoubleSummaryStatistics{count=2, sum=0.052221, min=0.026110, average=0.026110, max=0.026110}
Plotting 2 points for GD
Only 1 points for CjGD
Plotting 2 points for LBFGS

Returns

Result

Model Learning

In this apply, attempt to train a network to emulate a randomized network given an example input/output. The target state is:

TrainingTester.java:370 executed in 0.00 seconds (0.000 gc):

    RefList<double[]> temp_18_0042 = network_target.state();
    assert temp_18_0042 != null;
    String temp_18_0041 = temp_18_0042.stream().map(RefArrays::toString).reduce((a, b) -> a + "\n" + b).orElse("");
    temp_18_0042.freeRef();
    return temp_18_0041;

Returns

    [0.0, 1.0]

Gradient Descent

First, we train using basic gradient descent method apply weak line search conditions.

TrainingTester.java:480 executed in 0.00 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new ArmijoWolfeSearch());
      iterativeTrainer.setOrientation(new GradientDescent());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 2574374665194
Input 0 for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Final threshold in iteration 0: 0.0 (> 0.0) after 0.001s (< 30.000s)

Returns

    0.0

This training apply resulted in the following configuration:

TrainingTester.java:610 executed in 0.00 seconds (0.000 gc):

    RefList<double[]> state = network.state();
    assert state != null;
    String description = state.stream().map(RefArrays::toString).reduce((a, b) -> a + "\n" + b)
        .orElse("");
    state.freeRef();
    return description;

Returns

    [0.0, 1.0]

To produce the following output:

TrainingTester.java:633 executed in 0.00 seconds (0.000 gc):

    Result[] array = ConstantResult.batchResultArray(pop(RefUtil.addRef(data)));
    @Nullable
    Result eval = layer.eval(array);
    assert eval != null;
    TensorList tensorList = Result.getData(eval);
    String temp_18_0016 = tensorList.stream().limit(1).map(x -> {
      String temp_18_0017 = x.prettyPrint();
      x.freeRef();
      return temp_18_0017;
    }).reduce((a, b) -> a + "\n" + b).orElse("");
    tensorList.freeRef();
    return temp_18_0016;
Logging
Input 0 for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]

Returns

    [ 1.0, 1.0, 1.0 ]

Conjugate Gradient Descent

First, we use a conjugate gradient descent method, which converges the fastest for purely linear functions.

TrainingTester.java:452 executed in 0.00 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new QuadraticSearch());
      iterativeTrainer.setOrientation(new GradientDescent());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 2574384761811
Input 0 for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Final threshold in iteration 0: 0.0 (> 0.0) after 0.001s (< 30.000s)

Returns

    0.0

This training apply resulted in the following configuration:

TrainingTester.java:610 executed in 0.00 seconds (0.000 gc):

    RefList<double[]> state = network.state();
    assert state != null;
    String description = state.stream().map(RefArrays::toString).reduce((a, b) -> a + "\n" + b)
        .orElse("");
    state.freeRef();
    return description;

Returns

    [0.0, 1.0]

To produce the following output:

TrainingTester.java:633 executed in 0.00 seconds (0.000 gc):

    Result[] array = ConstantResult.batchResultArray(pop(RefUtil.addRef(data)));
    @Nullable
    Result eval = layer.eval(array);
    assert eval != null;
    TensorList tensorList = Result.getData(eval);
    String temp_18_0016 = tensorList.stream().limit(1).map(x -> {
      String temp_18_0017 = x.prettyPrint();
      x.freeRef();
      return temp_18_0017;
    }).reduce((a, b) -> a + "\n" + b).orElse("");
    tensorList.freeRef();
    return temp_18_0016;
Logging
Input 0 for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]

Returns

    [ 1.0, 1.0, 1.0 ]

Limited-Memory BFGS

Next, we apply the same optimization using L-BFGS, which is nearly ideal for purely second-order or quadratic functions.

TrainingTester.java:509 executed in 0.00 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new ArmijoWolfeSearch());
      iterativeTrainer.setOrientation(new LBFGS());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setIterationsPerSample(100);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 2574392295571
Feedback Input for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Final threshold in iteration 0: 0.0 (> 0.0) after 0.001s (< 30.000s)

Returns

    0.0

This training apply resulted in the following configuration:

TrainingTester.java:610 executed in 0.00 seconds (0.000 gc):

    RefList<double[]> state = network.state();
    assert state != null;
    String description = state.stream().map(RefArrays::toString).reduce((a, b) -> a + "\n" + b)
        .orElse("");
    state.freeRef();
    return description;

Returns

    [0.0, 1.0]

To produce the following output:

TrainingTester.java:633 executed in 0.00 seconds (0.000 gc):

    Result[] array = ConstantResult.batchResultArray(pop(RefUtil.addRef(data)));
    @Nullable
    Result eval = layer.eval(array);
    assert eval != null;
    TensorList tensorList = Result.getData(eval);
    String temp_18_0016 = tensorList.stream().limit(1).map(x -> {
      String temp_18_0017 = x.prettyPrint();
      x.freeRef();
      return temp_18_0017;
    }).reduce((a, b) -> a + "\n" + b).orElse("");
    tensorList.freeRef();
    return temp_18_0016;
Logging
Input 0 for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 0.0e+00 x + 1.0e+00: 
[3]
[3]
[3]
[3]
[3]

Returns

    [ 1.0, 1.0, 1.0 ]

TrainingTester.java:432 executed in 0.00 seconds (0.000 gc):

    return TestUtil.compare(title + " vs Iteration", runs);
Logging
No Data

TrainingTester.java:435 executed in 0.00 seconds (0.000 gc):

    return TestUtil.compareTime(title + " vs Time", runs);
Logging
No Data

Composite Learning

In this apply, attempt to train a network to emulate a randomized network given an example input/output. The target state is:

TrainingTester.java:279 executed in 0.00 seconds (0.000 gc):

    RefList<double[]> temp_18_0037 = temp_18_0035.state();
    assert temp_18_0037 != null;
    String temp_18_0036 = temp_18_0037.stream().map(RefArrays::toString).reduce((a, b) -> a + "\n" + b).orElse("");
    temp_18_0037.freeRef();
    return temp_18_0036;

Returns

    [1.0, 0.0]

We simultaneously regress this target input:

TrainingTester.java:287 executed in 0.00 seconds (0.000 gc):

    return RefArrays.stream(RefUtil.addRef(input_target)).flatMap(x -> {
      RefStream<Tensor> temp_18_0006 = RefArrays.stream(RefUtil.addRef(x));
      if (null != x)
        RefUtil.freeRef(x);
      return temp_18_0006;
    }).map(x -> {
      String temp_18_0007 = x.prettyPrint();
      x.freeRef();
      return temp_18_0007;
    }).reduce((a, b) -> a + "\n" + b).orElse("");

Returns

    [ 0.08, -0.128, 0.7 ]
    [ 0.08, -0.128, 0.7 ]
    [ 0.08, -0.128, 0.7 ]
    [ 0.7, 0.08, -0.128 ]
    [ 0.08, 0.7, -0.128 ]

Which produces the following output:

TrainingTester.java:308 executed in 0.00 seconds (0.000 gc):

    return RefStream.of(RefUtil.addRef(output_target)).map(x -> {
      String temp_18_0008 = x.prettyPrint();
      x.freeRef();
      return temp_18_0008;
    }).reduce((a, b) -> a + "\n" + b).orElse("");

Returns

    [ 0.08, -0.128, 0.7 ]
    [ 0.08, -0.128, 0.7 ]
    [ 0.08, -0.128, 0.7 ]
    [ 0.7, 0.08, -0.128 ]
    [ 0.08, 0.7, -0.128 ]

Gradient Descent

First, we train using basic gradient descent method apply weak line search conditions.

TrainingTester.java:480 executed in 0.04 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new ArmijoWolfeSearch());
      iterativeTrainer.setOrientation(new GradientDescent());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 2574409143377
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Reset training subject: 2574410567044
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Constructing line search parameters: GD
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
th(0)=5.880396552009659;dx=-5.018070425787161E22
Input 0 for key => -4.7e+10 x + 3.7e+11: 
[3]
[3]
[3]
[3]
[3]
Output for key => -4.7e+10 x + 3.7e+11: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -4.7e+10 x + 3.7e+11: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -4.7e+10 x + 3.7e+11: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 5.880396552009659 > 4.752535631939709
Armijo: th(2.154434690031884)=4.752535631939709; dx=1.9079061409732146E33 evalInputDelta=1.1278609200699492
Feedback Input for key => -2.4e+10 x + 1.9e+11: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -2.4e+10 x + 1.9e+11: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.077217345015942)=4.752535631939709; dx=9.539530704615169E32 evalInputDelta=1.1278609200699492
Feedback Input for key => -7.9e+09 x + 6.2e+10: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -7.9e+09 x + 6.2e+10: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.3590724483386473)=4.752535631939709; dx=3.1798435678705182E32 evalInputDelta=1.1278609200699492
Feedback Input for key => -2.0e+09 x + 1.5e+10: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -2.0e+09 x + 1.5e+10: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.08976811208466183)=4.752535631939709; dx=7.949608915912743E31 evalInputDelta=1.1278609200699492
Feedback Input for key => -4.0e+08 x + 3.1e+09: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -4.0e+08 x + 3.1e+09: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.017953622416932366)=4.752535631939709; dx=1.5899217791680924E31 evalInputDelta=1.1278609200699492
Input 0 for key => -6.6e+07 x + 5.1e+08: 
[3]
[3]
[3]
[3]
[3]
Output for key => -6.6e+07 x + 5.1e+08: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -6.6e+07 x + 5.1e+08: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -6.6e+07 x + 5.1e+08: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(0.002992270402822061)=4.752535631939709; dx=2.6498695901295666E30 evalInputDelta=1.1278609200699492
Feedback Input for key => -9.4e+06 x + 7.4e+07: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -9.4e+06 x + 7.4e+07: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(4.2746720040315154E-4)=4.752535631939709; dx=3.7855275557790585E29 evalInputDelta=1.1278609200699492
Feedback Input for key => -1.2e+06 x + 9.2e+06: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+06 x + 9.2e+06: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(5.343340005039394E-5)=4.752535631939709; dx=4.731905053912201E28 evalInputDelta=1.1278609200699492
Input 0 for key => -1.3e+05 x + 1.0e+06: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.3e+05 x + 1.0e+06: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.3e+05 x + 1.0e+06: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.3e+05 x + 1.0e+06: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(5.9370444500437714E-6)=4.752535631939709; dx=5.257627677054216E27 evalInputDelta=1.1278609200699492
Input 0 for key => -1.3e+04 x + 1.0e+05: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.3e+04 x + 1.0e+05: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.3e+04 x + 1.0e+05: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.3e+04 x + 1.0e+05: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(5.937044450043771E-7)=4.752535631939709; dx=5.2571760507159034E26 evalInputDelta=1.1278609200699492
Feedback Input for key => -1.2e+03 x + 9.3e+03: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+03 x + 9.3e+03: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(5.397313136403428E-8)=4.752535631939709; dx=4.774689072991091E25 evalInputDelta=1.1278609200699492
Input 0 for key => -9.8e+01 x + 7.7e+02: 
[3]
[3]
[3]
[3]
[3]
Output for key => -9.8e+01 x + 7.7e+02: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -9.8e+01 x + 7.7e+02: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -9.8e+01 x + 7.7e+02: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(4.4977609470028565E-9)=4.752535631939709; dx=3.932908581923625E24 evalInputDelta=1.1278609200699492
Feedback Input for key => -6.6e+00 x + 6.0e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -6.6e+00 x + 6.0e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 4.752535631939709 > 3.8683429562299962
Armijo: th(3.4598161130791205E-10)=3.8683429562299962; dx=2.5451701452944873E23 evalInputDelta=2.0120535957796624
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 3.8683429562299962 > 0.0
Armijo: th(2.4712972236279432E-11)=0.0; dx=-1.2923455509229854E11 evalInputDelta=5.880396552009659
Feedback Input for key => 9.6e-01 x + 2.8e-01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 9.6e-01 x + 2.8e-01: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.6475314824186289E-12)=0.6251492507053654; dx=-3.733782218028843E11 evalInputDelta=5.255247301304293
Feedback Input for key => 1.0e+00 x + 1.8e-02: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 1.0e+00 x + 1.8e-02: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.029707176511643E-13)=5.7929008975293605; dx=-5.008951631617659E22 evalInputDelta=0.08749565448029806
Input 0 for key => 1.0e+00 x + 1.0e-03: 
[3]
[3]
[3]
[3]
[3]
Output for key => 1.0e+00 x + 1.0e-03: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 1.0e+00 x + 1.0e-03: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 1.0e+00 x + 1.0e-03: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(6.057101038303783E-15)=5.874763029284557; dx=-5.01753402612994E22 evalInputDelta=0.005633522725101869
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
MIN ALPHA (3.3650561323909904E-16): th(2.4712972236279432E-11)=0.0
Fitness changed from 5.880396552009659 to 0.0
Iteration 1 complete. Error: 0.0 Total: 0.0316; Orientation: 0.0003; Line Search: 0.0274
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
th(0)=0.0;dx=-1.0389070767393012
Input 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(2.154434690031884E-15)=0.0; dx=-1.0389070767393012 evalInputDelta=0.0
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Armijo: th(1.077217345015942E-15)=0.0; dx=-1.0389070767393012 evalInputDelta=0.0
Input 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
MIN ALPHA (3.5907244833864734E-16): th(0.0)=0.0
Fitness changed from 0.0 to 0.0
Static Iteration Total: 0.0067; Orientation: 0.0004; Line Search: 0.0051
Iteration 2 failed. Error: 0.0
Previous Error: 0.0 -> 0.0
Optimization terminated 2
Final threshold in iteration 2: 0.0 (> 0.0) after 0.039s (< 30.000s)

Returns

    0.0

Training Converged

Conjugate Gradient Descent

First, we use a conjugate gradient descent method, which converges the fastest for purely linear functions.

TrainingTester.java:452 executed in 0.19 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new QuadraticSearch());
      iterativeTrainer.setOrientation(new GradientDescent());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 2574451042618
Input 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Output for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Reset training subject: 2574452099813
Input 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Output for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Constructing line search parameters: GD
Input 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Output for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
F(0.0) = LineSearchPoint{point=PointSample{avg=5.880396552009659}, derivative=-5.018070425787161E22}
Input 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 5.880396552009659 > 0.08851236944590321
F(1.0E-10) = LineSearchPoint{point=PointSample{avg=0.08851236944590321}, derivative=-2.532548755738045E10}, evalInputDelta = -5.791884182563756
Feedback Input for key => -1.4e+01 x + 1.2e+02: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.4e+01 x + 1.2e+02: 
[3]
[3]
[3]
[3]
[3]
F(7.000000000000001E-10) = LineSearchPoint{point=PointSample{avg=4.752535631939709}, derivative=5.69719404525844E23}, evalInputDelta = -1.1278609200699492
4.752535631939709 <= 5.880396552009659
Input 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(1.0E-10) = LineSearchPoint{point=PointSample{avg=0.08851236944590321}, derivative=-2.532548755738045E10}, evalInputDelta = -5.791884182563756
Left bracket at 1.0E-10
Converged to left
Fitness changed from 5.880396552009659 to 0.08851236944590321
Iteration 1 complete. Error: 0.08851236944590321 Total: 0.0115; Orientation: 0.0003; Line Search: 0.0082
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(0.0) = LineSearchPoint{point=PointSample{avg=0.08851236944590321}, derivative=-15.984548423445732}
Input 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.08851236944590321 > 0.08851236799887022
F(1.0E-10) = LineSearchPoint{point=PointSample{avg=0.08851236799887022}, derivative=-15.984548273742567}, evalInputDelta = -1.447032993429076E-9
Input 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.08851236799887022 > 0.08851235931667155
F(7.000000000000001E-10) = LineSearchPoint{point=PointSample{avg=0.08851235931667155}, derivative=-15.984547375523551}, evalInputDelta = -1.012923166177071E-8
Input 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.08851235931667155 > 0.08851229854129977
F(4.900000000000001E-9) = LineSearchPoint{point=PointSample{avg=0.08851229854129977}, derivative=-15.98454108799396}, evalInputDelta = -7.090460343861515E-8
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.08851229854129977 > 0.0885118731144314
F(3.430000000000001E-8) = LineSearchPoint{point=PointSample{avg=0.0885118731144314}, derivative=-15.984497075439092}, evalInputDelta = -4.963314718109402E-7
Input 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.0885118731144314 > 0.08850889516256577
F(2.4010000000000004E-7) = LineSearchPoint{point=PointSample{avg=0.08850889516256577}, derivative=-15.98418899504247}, evalInputDelta = -3.474283337440154E-6
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.08850889516256577 > 0.08848805127372741
F(1.6807000000000003E-6) = LineSearchPoint{point=PointSample{avg=0.08848805127372741}, derivative=-15.9820327990851}, evalInputDelta = -2.4318172175796793E-5
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.08848805127372741 > 0.08834223091819844
F(1.1764900000000001E-5) = LineSearchPoint{point=PointSample{avg=0.08834223091819844}, derivative=-15.966957379715451}, evalInputDelta = -1.70138527704769E-4
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.08834223091819844 > 0.08732572094693006
F(8.235430000000001E-5) = LineSearchPoint{point=PointSample{avg=0.08732572094693006}, derivative=-15.862301703885615}, evalInputDelta = -0.001186648498973153
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.08732572094693006 > 0.08040968529712203
F(5.764801000000001E-4) = LineSearchPoint{point=PointSample{avg=0.08040968529712203}, derivative=-15.170055738250195}, evalInputDelta = -0.00810268414878118
Input 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.08040968529712203 > 0.03971102344863116
F(0.004035360700000001) = LineSearchPoint{point=PointSample{avg=0.03971102344863116}, derivative=-11.720942003130519}, evalInputDelta = -0.04880134599727205
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
New Minimum: 0.03971102344863116 > 0.0
F(0.028247524900000005) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-9.173222495908595}, evalInputDelta = -0.08851236944590321
Feedback Input for key => -4.4e-01 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -4.4e-01 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(0.19773267430000002) = LineSear

...skipping 36218 bytes...

.2e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 1.2e+01 x + 2.2e+01: 
[3]
[3]
[3]
[3]
[3]
F(6.0892973007599664) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.5109788522685657}, evalInputDelta = 0.0
Feedback Input for key => 9.1e+01 x + 5.0e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 9.1e+01 x + 5.0e+01: 
[3]
[3]
[3]
[3]
[3]
F(42.625081105319765) = LineSearchPoint{point=PointSample{avg=15.473371824919985}, derivative=1.4892585448435953E13}, evalInputDelta = 15.473371824919985
Loops = 52
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(1.0E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206648053632}, evalInputDelta = 0.0
Left bracket at 1.0E-10
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(1.1531406434841089E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206648046489}, evalInputDelta = 0.0
Left bracket at 1.1531406434841089E-10
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(1.3063113514120116E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206648039344}, evalInputDelta = 0.0
Left bracket at 1.3063113514120116E-10
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(1.459482059339804E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206648032201}, evalInputDelta = 0.0
Left bracket at 1.459482059339804E-10
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(1.6125968655492648E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206648025058}, evalInputDelta = 0.0
Left bracket at 1.6125968655492648E-10
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(1.7657675734768372E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206648017914}, evalInputDelta = 0.0
Left bracket at 1.7657675734768372E-10
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(1.9189382814042997E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206648010771}, evalInputDelta = 0.0
Left bracket at 1.9189382814042997E-10
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(2.0721089893316519E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206648003625}, evalInputDelta = 0.0
Left bracket at 2.0721089893316519E-10
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(2.225279697258894E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206647996482}, evalInputDelta = 0.0
Left bracket at 2.225279697258894E-10
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(2.3784504051860263E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206647989337}, evalInputDelta = 0.0
Left bracket at 2.3784504051860263E-10
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(2.531621113113048E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206647982194}, evalInputDelta = 0.0
Left bracket at 2.531621113113048E-10
Input 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.1e+00 x + 1.7e+01: 
[3]
[3]
[3]
[3]
[3]
F(2.68479182103996E-10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-5.351206647975048}, evalInputDelta = 0.0
Loops = 12
Fitness changed from 0.0 to 0.0
Static Iteration Total: 0.1038; Orientation: 0.0003; Line Search: 0.1025
Iteration 3 failed. Error: 0.0
Previous Error: 0.0 -> 0.0
Optimization terminated 3
Final threshold in iteration 3: 0.0 (> 0.0) after 0.189s (< 30.000s)

Returns

    0.0

Training Converged

Limited-Memory BFGS

Next, we apply the same optimization using L-BFGS, which is nearly ideal for purely second-order or quadratic functions.

TrainingTester.java:509 executed in 0.04 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new ArmijoWolfeSearch());
      iterativeTrainer.setOrientation(new LBFGS());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setIterationsPerSample(100);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 2574646031652
Input 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Output for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Reset training subject: 2574647023630
Input 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Output for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Input 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Output for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Adding measurement 539fac66 to history. Total: 0
LBFGS Accumulation History: 1 points
Constructing line search parameters: GD
Feedback Input for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => x + 0.0e+00!: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 5.880396552009659 < 5.880396552009659. Total: 1
th(0)=5.880396552009659;dx=-5.018070425787161E22
Input 0 for key => -4.7e+10 x + 3.7e+11: 
[3]
[3]
[3]
[3]
[3]
Output for key => -4.7e+10 x + 3.7e+11: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -4.7e+10 x + 3.7e+11: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -4.7e+10 x + 3.7e+11: 
[3]
[3]
[3]
[3]
[3]
Adding measurement 1171571b to history. Total: 1
New Minimum: 5.880396552009659 > 4.752535631939709
Armijo: th(2.154434690031884)=4.752535631939709; dx=1.9079061409732146E33 evalInputDelta=1.1278609200699492
Feedback Input for key => -2.4e+10 x + 1.9e+11: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -2.4e+10 x + 1.9e+11: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(1.077217345015942)=4.752535631939709; dx=9.539530704615169E32 evalInputDelta=1.1278609200699492
Feedback Input for key => -7.9e+09 x + 6.2e+10: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -7.9e+09 x + 6.2e+10: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(0.3590724483386473)=4.752535631939709; dx=3.1798435678705186E32 evalInputDelta=1.1278609200699492
Feedback Input for key => -2.0e+09 x + 1.5e+10: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -2.0e+09 x + 1.5e+10: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(0.08976811208466183)=4.752535631939709; dx=7.949608915912743E31 evalInputDelta=1.1278609200699492
Feedback Input for key => -4.0e+08 x + 3.1e+09: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -4.0e+08 x + 3.1e+09: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(0.017953622416932366)=4.752535631939709; dx=1.5899217791680924E31 evalInputDelta=1.1278609200699492
Input 0 for key => -6.6e+07 x + 5.1e+08: 
[3]
[3]
[3]
[3]
[3]
Output for key => -6.6e+07 x + 5.1e+08: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -6.6e+07 x + 5.1e+08: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -6.6e+07 x + 5.1e+08: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(0.002992270402822061)=4.752535631939709; dx=2.6498695901295666E30 evalInputDelta=1.1278609200699492
Feedback Input for key => -9.4e+06 x + 7.4e+07: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -9.4e+06 x + 7.4e+07: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(4.2746720040315154E-4)=4.752535631939709; dx=3.7855275557790585E29 evalInputDelta=1.1278609200699492
Input 0 for key => -1.2e+06 x + 9.2e+06: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+06 x + 9.2e+06: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+06 x + 9.2e+06: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+06 x + 9.2e+06: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(5.343340005039394E-5)=4.752535631939709; dx=4.731905053912201E28 evalInputDelta=1.1278609200699492
Feedback Input for key => -1.3e+05 x + 1.0e+06: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.3e+05 x + 1.0e+06: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(5.9370444500437714E-6)=4.752535631939709; dx=5.257627677054216E27 evalInputDelta=1.1278609200699492
Feedback Input for key => -1.3e+04 x + 1.0e+05: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.3e+04 x + 1.0e+05: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(5.937044450043771E-7)=4.752535631939709; dx=5.2571760507159034E26 evalInputDelta=1.1278609200699492
Input 0 for key => -1.2e+03 x + 9.3e+03: 
[3]
[3]
[3]
[3]
[3]
Output for key => -1.2e+03 x + 9.3e+03: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -1.2e+03 x + 9.3e+03: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -1.2e+03 x + 9.3e+03: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(5.397313136403428E-8)=4.752535631939709; dx=4.774689072991091E25 evalInputDelta=1.1278609200699492
Input 0 for key => -9.8e+01 x + 7.7e+02: 
[3]
[3]
[3]
[3]
[3]
Output for key => -9.8e+01 x + 7.7e+02: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => -9.8e+01 x + 7.7e+02: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -9.8e+01 x + 7.7e+02: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 4.752535631939709 < 4.752535631939709. Total: 2
Armijo: th(4.4977609470028565E-9)=4.752535631939709; dx=3.9329085819236244E24 evalInputDelta=1.1278609200699492
Feedback Input for key => -6.6e+00 x + 6.0e+01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => -6.6e+00 x + 6.0e+01: 
[3]
[3]
[3]
[3]
[3]
Adding measurement 38a77a69 to history. Total: 2
New Minimum: 4.752535631939709 > 3.8683429562299962
Armijo: th(3.4598161130791205E-10)=3.8683429562299962; dx=2.5451701452944873E23 evalInputDelta=2.0120535957796624
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Adding measurement 42301acd to history. Total: 3
New Minimum: 3.8683429562299962 > 0.0
Armijo: th(2.4712972236279432E-11)=0.0; dx=-1.2923455509229854E11 evalInputDelta=5.880396552009659
Input 0 for key => 9.6e-01 x + 2.8e-01: 
[3]
[3]
[3]
[3]
[3]
Output for key => 9.6e-01 x + 2.8e-01: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 9.6e-01 x + 2.8e-01: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 9.6e-01 x + 2.8e-01: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.6251492507053654 < 0.0. Total: 4
Armijo: th(1.6475314824186289E-12)=0.6251492507053654; dx=-3.733782218028842E11 evalInputDelta=5.255247301304293
Input 0 for key => 1.0e+00 x + 1.8e-02: 
[3]
[3]
[3]
[3]
[3]
Output for key => 1.0e+00 x + 1.8e-02: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 1.0e+00 x + 1.8e-02: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 1.0e+00 x + 1.8e-02: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 5.7929008975293605 < 0.0. Total: 4
Armijo: th(1.029707176511643E-13)=5.7929008975293605; dx=-5.008951631617659E22 evalInputDelta=0.08749565448029806
Feedback Input for key => 1.0e+00 x + 1.0e-03: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 1.0e+00 x + 1.0e-03: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 5.874763029284557 < 0.0. Total: 4
Armijo: th(6.057101038303783E-15)=5.874763029284557; dx=-5.01753402612994E22 evalInputDelta=0.005633522725101869
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
MIN ALPHA (3.3650561323909904E-16): th(2.4712972236279432E-11)=0.0
Fitness changed from 5.880396552009659 to 0.0
Iteration 1 complete. Error: 0.0 Total: 0.0288; Orientation: 0.0007; Line Search: 0.0255
Input 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Rejected: LBFGS Orientation magnitude: 7.266e-11, gradient 1.019e+00, dot -0.646; [6f0ba57d-cb41-4d26-b7d5-b408781a1daf = 1.000/1.000e+00, f9f60bd2-1ccd-4360-b57a-dce4947de667 = 1.000/1.000e+00, 36650ee9-9c57-4e38-8b6e-511f60bc6482 = 1.000/1.000e+00, d68c08cf-c5a7-4190-8eb8-49ba86ffc2c3 = 1.000/1.000e+00, a990eb94-1018-4340-b604-1d242fe0efe3 = 1.000/1.000e+00, a3c76aea-318e-4811-a09d-c9b2f9b9f4d4 = 1.000/1.000e+00]
Orientation rejected. Popping history element from 0.0, 3.8683429562299962, 4.752535631939709, 5.880396552009659
LBFGS Accumulation History: 3 points
Removed measurement 42301acd to history. Total: 3
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Adding measurement 4f8940c to history. Total: 3
th(0)=0.0;dx=-1.0389070767393012
Input 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(2.154434690031884E-15)=0.0; dx=-1.0389070767393012 evalInputDelta=0.0
Input 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
Armijo: th(1.077217345015942E-15)=0.0; dx=-1.038907076739301 evalInputDelta=0.0
Input 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Output for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Input for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Feedback Output 0 for key => 4.6e-01 x + 4.3e+00: 
[3]
[3]
[3]
[3]
[3]
Non-optimal measurement 0.0 < 0.0. Total: 4
MIN ALPHA (3.5907244833864734E-16): th(0.0)=0.0
Fitness changed from 0.0 to 0.0
Static Iteration Total: 0.0136; Orientation: 0.0072; Line Search: 0.0051
Iteration 2 failed. Error: 0.0
Previous Error: 0.0 -> 0.0
Optimization terminated 2
Final threshold in iteration 2: 0.0 (> 0.0) after 0.043s (< 30.000s)

Returns

    0.0

Training Converged

TrainingTester.java:432 executed in 0.01 seconds (0.000 gc):

    return TestUtil.compare(title + " vs Iteration", runs);
Logging
Plotting range=[1.0, 0.0], [2.0, 1.0]; valueStats=DoubleSummaryStatistics{count=1, sum=0.088512, min=0.088512, average=0.088512, max=0.088512}
Only 1 points for GD
Plotting 2 points for CjGD
Only 1 points for LBFGS

Returns

Result

TrainingTester.java:435 executed in 0.01 seconds (0.000 gc):

    return TestUtil.compareTime(title + " vs Time", runs);
Logging
Plotting range=[0.0, -1.0529960331810444], [0.073, 0.0]; valueStats=DoubleSummaryStatistics{count=1, sum=0.088512, min=0.088512, average=0.088512, max=0.088512}
Only 1 points for GD
Plotting 2 points for CjGD
Only 1 points for LBFGS

Returns

Result

Results

TrainingTester.java:255 executed in 0.00 seconds (0.000 gc):

    return grid(inputLearning, modelLearning, completeLearning);

Returns

Result

TrainingTester.java:258 executed in 0.00 seconds (0.000 gc):

    return new ComponentResult(null == inputLearning ? null : inputLearning.value,
        null == modelLearning ? null : modelLearning.value, null == completeLearning ? null : completeLearning.value);

Returns

    {"input":{ "LBFGS": { "type": "Converged", "value": 0.0 }, "CjGD": { "type": "Converged", "value": 0.0 }, "GD": { "type": "Converged", "value": 0.0 } }, "model":{ "LBFGS": { "type": "NonConverged", "value": NaN }, "CjGD": { "type": "NonConverged", "value": NaN }, "GD": { "type": "NonConverged", "value": NaN } }, "complete":{ "LBFGS": { "type": "Converged", "value": 0.0 }, "CjGD": { "type": "Converged", "value": 0.0 }, "GD": { "type": "Converged", "value": 0.0 } }}

LayerTests.java:425 executed in 0.00 seconds (0.000 gc):

    throwException(exceptions.addRef());

Results

detailsresult
{"input":{ "LBFGS": { "type": "Converged", "value": 0.0 }, "CjGD": { "type": "Converged", "value": 0.0 }, "GD": { "type": "Converged", "value": 0.0 } }, "model":{ "LBFGS": { "type": "NonConverged", "value": NaN }, "CjGD": { "type": "NonConverged", "value": NaN }, "GD": { "type": "NonConverged", "value": NaN } }, "complete":{ "LBFGS": { "type": "Converged", "value": 0.0 }, "CjGD": { "type": "Converged", "value": 0.0 }, "GD": { "type": "Converged", "value": 0.0 } }}OK
  {
    "result": "OK",
    "performance": {
      "execution_time": "2.491",
      "gc_time": "0.449"
    },
    "created_on": 1586737160747,
    "file_name": "trainingTest",
    "report": {
      "simpleName": "Basic",
      "canonicalName": "com.simiacryptus.mindseye.layers.java.LoggingWrapperLayerTest.Basic",
      "link": "https://github.com/SimiaCryptus/mindseye-java/tree/93db34cedee48c0202777a2b25deddf1dfaf5731/src/test/java/com/simiacryptus/mindseye/layers/java/LoggingWrapperLayerTest.java",
      "javaDoc": ""
    },
    "training_analysis": {
      "input": {
        "LBFGS": {
          "type": "Converged",
          "value": 0.0
        },
        "CjGD": {
          "type": "Converged",
          "value": 0.0
        },
        "GD": {
          "type": "Converged",
          "value": 0.0
        }
      },
      "model": {
        "LBFGS": {
          "type": "NonConverged",
          "value": "NaN"
        },
        "CjGD": {
          "type": "NonConverged",
          "value": "NaN"
        },
        "GD": {
          "type": "NonConverged",
          "value": "NaN"
        }
      },
      "complete": {
        "LBFGS": {
          "type": "Converged",
          "value": 0.0
        },
        "CjGD": {
          "type": "Converged",
          "value": 0.0
        },
        "GD": {
          "type": "Converged",
          "value": 0.0
        }
      }
    },
    "archive": "s3://code.simiacrypt.us/tests/com/simiacryptus/mindseye/layers/LoggingWrapperLayer/Basic/trainingTest/202004131920",
    "id": "747c1fcd-0d7f-403c-ab85-1da968feb98e",
    "report_type": "Components",
    "display_name": "Comparative Training",
    "target": {
      "simpleName": "LoggingWrapperLayer",
      "canonicalName": "com.simiacryptus.mindseye.layers.LoggingWrapperLayer",
      "link": "https://github.com/SimiaCryptus/mindseye-core/tree/a09d39d97a7eff18f17aef61a4891b6f93a18cbe/src/main/java/com/simiacryptus/mindseye/layers/LoggingWrapperLayer.java",
      "javaDoc": ""
    }
  }