MachineIntelligenceCore:NeuralNets
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
AdamTests.cpp
Go to the documentation of this file.
1 
25 #include <gtest/gtest.h>
26 #include <cmath>
27 
29 
30 // Redefine word "public" so every class field/method will be accessible for tests.
31 #define private public
32 #include <optimization/Adam.hpp>
33 
38 TEST_F(Sphere1DLandscape, Adam_Convergence) {
39  // Optimization function - 1d momentum with learning rate = 0.1 (and default 0.9 momentum).
40  mic::neural_nets::optimization::Adam<double> opt(x->rows(), x->cols());
41 
42  // Simulate a simple gradient descent.
43  size_t iteration = 0;
44  double abs_diff = 1.0;
45  while (abs_diff > eps) {
46  mic::types::MatrixPtr<double> dx = fun.calculateGradient(x);
47  opt.update(x, dx, 0.1);
48 
49  // Check whether value of the function is finite.
50  double value = fun.calculateValue(x);
51  ASSERT_EQ(true, std::isfinite(value)) << " at iteration i=" << iteration;
52 
53  // Calculate diff - std:abs!!
54  abs_diff = std::abs(value - fun.minValue());
55  iteration++;
56  }//: while
57  ASSERT_GE(eps, std::abs(fun.calculateValue(x) - fun.minValue()));
58  std::cout << " -> Converged after " << iteration << " iterations\n";
59 }
60 
61 
66 TEST_F(Sphere20DLandscape, Adam_Convergence) {
67  // Optimization function - 20d momentum with learning rate = 0.1 (and default 0.9 momentum).
68  mic::neural_nets::optimization::Adam<double> opt(x->rows(), x->cols());
69 
70  // Simulate a simple gradient descent.
71  size_t iteration = 0;
72  double abs_diff = 1.0;
73  while (abs_diff > eps) {
74  mic::types::MatrixPtr<double> dx = fun.calculateGradient(x);
75  opt.update(x, dx, 0.1);
76 
77  // Check whether value of the function is finite.
78  double value = fun.calculateValue(x);
79  ASSERT_EQ(true, std::isfinite(value)) << " at iteration i=" << iteration;
80 
81  // Calculate diff - std:abs!!
82  abs_diff = std::abs(value - fun.minValue());
83  iteration++;
84  }//: while
85  ASSERT_GE(eps, std::abs(fun.calculateValue(x) - fun.minValue()));
86  std::cout << " -> Converged after " << iteration << " iterations\n";
87 }
88 
93 TEST_F(Beale2DLandscape, Adam_Convergence) {
94  // Optimization function.
95  mic::neural_nets::optimization::Adam<double> opt(x->rows(), x->cols());
96 
97  // Simulate a simple gradient descent.
98  size_t iteration = 0;
99  double abs_diff = 1.0;
100  while (abs_diff > eps) {
101  mic::types::MatrixPtr<double> dx = fun.calculateGradient(x);
102  opt.update(x, dx, 0.1);
103 
104  // Check whether value of the function is finite.
105  double value = fun.calculateValue(x);
106  ASSERT_EQ(true, std::isfinite(value)) << " at iteration i=" << iteration;
107 
108  // Calculate diff - std:abs!!
109  abs_diff = std::abs(value - fun.minValue());
110  iteration++;
111  }//: while
112  ASSERT_GE(eps, std::abs(fun.calculateValue(x) - fun.minValue()));
113  std::cout << " -> Converged after " << iteration << " iterations\n";
114 }
115 
116 
121 TEST_F(Rosenbrock2DLandscape, Adam_Convergence) {
122  // Optimization function.
123  mic::neural_nets::optimization::Adam<double> opt(x->rows(), x->cols());
124 
125  // Simulate a simple gradient descent.
126  size_t iteration = 0;
127  double abs_diff = 1.0;
128  while (abs_diff > eps) {
129  mic::types::MatrixPtr<double> dx = fun.calculateGradient(x);
130  opt.update(x, dx, 0.1);
131 
132  // Check whether value of the function is finite.
133  double value = fun.calculateValue(x);
134  ASSERT_EQ(true, std::isfinite(value)) << " at iteration i=" << iteration;
135 
136  // Calculate diff - std:abs!!
137  abs_diff = std::abs(value - fun.minValue());
138  iteration++;
139  }//: while
140  ASSERT_GE(eps, std::abs(fun.calculateValue(x) - fun.minValue()));
141  std::cout << " -> Converged after " << iteration << " iterations\n";
142 }
Test fixture - artificial landscape - sphere function 20D (square function).
Test fixture - artificial landscape - Rosenbrock function 2D.
Test fixture - artificial landscape - sphere function 1D (square function).
Test fixture - artificial landscape - Beale's function 2D.
TEST_F(Sphere1DLandscape, Adam_Convergence)
Definition: AdamTests.cpp:38
virtual void update(mic::types::MatrixPtr< eT > p_, mic::types::MatrixPtr< eT > dp_, eT learning_rate_, eT decay_=0.0)
Adam - adaptive moment estimation.
Definition: Adam.hpp:39