gradient_descent.h
1// OpenNN: Open Neural Networks Library
2// www.opennn.net
3//
4// G R A D I E N T D E S C E N T C L A S S H E A D E R
5//
6// Artificial Intelligence Techniques SL
7// artelnics@artelnics.com
8
9#ifndef GRADIENTDESCENT_H
10#define GRADIENTDESCENT_H
11
12// System includes
13
14#include <string>
15#include <sstream>
16#include <iostream>
17#include <fstream>
18#include <algorithm>
19#include <functional>
20#include <limits>
21#include <limits.h>
22#include <cmath>
23#include <ctime>
24
25// OpenNN includes
26
27#include "loss_index.h"
28
29#include "optimization_algorithm.h"
30#include "learning_rate_algorithm.h"
31#include "config.h"
32
33namespace OpenNN
34{
35
36struct GradientDescentData;
37
41
46
48{
49
50public:
51
52 // Constructors
53
54 explicit GradientDescent();
55
56 explicit GradientDescent(LossIndex*);
57
58 // Destructor
59
60 virtual ~GradientDescent();
61
64
65 string get_hardware_use() const;
66
67 // Stopping criteria
68
69 const type& get_minimum_loss_decrease() const;
70 const type& get_loss_goal() const;
71
72 const Index& get_maximum_selection_failures() const;
73
74 const Index& get_maximum_epochs_number() const;
75 const type& get_maximum_time() const;
76
77 // Set methods
78
80
81 void set_learning_rate_algorithm(const LearningRateAlgorithm&);
82
83 void set_default();
84
85 // Stopping criteria
86
87 void set_maximum_epochs_number(const Index&);
88
89
90
91 void set_minimum_loss_decrease(const type&);
92 void set_loss_goal(const type&);
93
94 void set_maximum_selection_failures(const Index&);
95
96 void set_maximum_time(const type&);
97
98 // Training methods
99
100 void calculate_training_direction(const Tensor<type, 1>&, Tensor<type, 1>&) const;
101
103 const DataSetBatch& batch,
104 NeuralNetworkForwardPropagation& forward_propagation,
105 LossIndexBackPropagation& back_propagation,
106 GradientDescentData& optimization_data);
107
109
110 string write_optimization_algorithm_type() const;
111
112 // Serialization methods
113
114 Tensor<string, 2> to_string_matrix() const;
115
116 void from_XML(const tinyxml2::XMLDocument&);
117
118 void write_XML(tinyxml2::XMLPrinter&) const;
119
120private:
121
122 // TRAINING OPERATORS
123
125
127
128 const type first_learning_rate = static_cast<type>(0.01);
129
130 // Stopping criteria
131
133
135
137
139
142
144
146
148
150
152
153};
154
155
157{
159
161 {
162 }
163
164
165 explicit GradientDescentData(GradientDescent* new_gradient_descent_pointer)
166 {
167 set(new_gradient_descent_pointer);
168 }
169
171
173
174 void set(GradientDescent* new_gradient_descent_pointer)
175 {
176 gradient_descent_pointer = new_gradient_descent_pointer;
177
178 LossIndex* loss_index_pointer = gradient_descent_pointer->get_loss_index_pointer();
179
180 NeuralNetwork* neural_network_pointer = loss_index_pointer->get_neural_network_pointer();
181
182 const Index parameters_number = neural_network_pointer->get_parameters_number();
183
184 // Neural network data
185
186 potential_parameters.resize(parameters_number);
187
188 parameters_increment.resize(parameters_number);
189
190 // Optimization algorithm data
191
192 training_direction.resize(parameters_number);
193 }
194
195
196 void print() const
197 {
198 cout << "Training direction:" << endl;
199 cout << training_direction << endl;
200
201 cout << "Learning rate:" << endl;
202 cout << learning_rate << endl;
203 }
204
205 GradientDescent* gradient_descent_pointer = nullptr;
206
207 // Neural network data
208
209 Tensor<type, 1> parameters_increment;
210
211 // Optimization algorithm data
212
213 Index epoch = 0;
214
215 Tensor<type, 0> training_slope;
216
217 type learning_rate = type(0);
218 type old_learning_rate = type(0);
219};
220
221}
222
223#endif
TrainingResults perform_training()
void set_maximum_selection_failures(const Index &)
void set_loss_index_pointer(LossIndex *)
const type & get_maximum_time() const
Returns the maximum training time.
string get_hardware_use() const
Returns the hardware used. Default: Multi-core.
const type & get_loss_goal() const
void from_XML(const tinyxml2::XMLDocument &)
void set_default()
Sets the members of the optimization algorithm object to their default values.
const Index & get_maximum_epochs_number() const
Returns the maximum number of iterations for training.
Tensor< string, 2 > to_string_matrix() const
Writes as matrix of strings the most representative atributes.
type minimum_loss_decrease
Minimum loss improvement between two successive iterations. It is used as a stopping criterion.
LearningRateAlgorithm * get_learning_rate_algorithm_pointer()
Returns a pointer to the learning rate algorithm object inside the gradient descent object.
const LearningRateAlgorithm & get_learning_rate_algorithm() const
Returns a constant reference to the learning rate algorithm object inside the gradient descent object...
void set_maximum_time(const type &)
LearningRateAlgorithm learning_rate_algorithm
Learning rate algorithm object for one-dimensional minimization.
void set_loss_goal(const type &)
type maximum_time
Maximum training time. It is used as a stopping criterion.
void set_maximum_epochs_number(const Index &)
void calculate_training_direction(const Tensor< type, 1 > &, Tensor< type, 1 > &) const
void set_minimum_loss_decrease(const type &)
type training_loss_goal
Goal value for the loss. It is used as a stopping criterion.
Index maximum_epochs_number
Maximum epochs number.
virtual ~GradientDescent()
Destructor.
void write_XML(tinyxml2::XMLPrinter &) const
void update_parameters(const DataSetBatch &batch, NeuralNetworkForwardPropagation &forward_propagation, LossIndexBackPropagation &back_propagation, GradientDescentData &optimization_data)
GradientDescent::update_parameters.
const Index & get_maximum_selection_failures() const
Returns the maximum number of selection error increases during the training process.
const type & get_minimum_loss_decrease() const
Returns the minimum loss improvement during training.
A learning rate that is adjusted according to an algorithm during training to minimize training time.
This abstract class represents the concept of loss index composed of an error term and a regularizati...
Definition: loss_index.h:48
NeuralNetwork * get_neural_network_pointer() const
Returns a pointer to the neural network object associated to the error term.
Definition: loss_index.h:70
Index get_parameters_number() const
virtual ~GradientDescentData()
Destructor.
GradientDescentData()
Default constructor.
This structure contains the optimization algorithm results.