00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __NEURALNETWORK_H__
00017 #define __NEURALNETWORK_H__
00018
00019
00020
00021 #include <string>
00022
00023
00024
00025 #include "../utilities/vector.h"
00026 #include "../utilities/matrix.h"
00027
00028 #include "perceptron.h"
00029 #include "perceptron_layer.h"
00030 #include "multilayer_perceptron.h"
00031 #include "scaling_layer.h"
00032 #include "unscaling_layer.h"
00033 #include "bounding_layer.h"
00034 #include "probabilistic_layer.h"
00035 #include "conditions_layer.h"
00036 #include "independent_parameters.h"
00037 #include "inputs_outputs_information.h"
00038
00039
00040 namespace OpenNN
00041 {
00042
00047
00048 class NeuralNetwork
00049 {
00050
00051 public:
00052
00053
00054
00055 explicit NeuralNetwork(void);
00056
00057
00058
00059 explicit NeuralNetwork(const MultilayerPerceptron&);
00060
00061
00062
00063 explicit NeuralNetwork(const Vector<unsigned int>&);
00064
00065
00066
00067 explicit NeuralNetwork(const unsigned int&, const unsigned int&);
00068
00069
00070
00071 explicit NeuralNetwork(const unsigned int&, const unsigned int&, const unsigned int&);
00072
00073
00074
00075
00076
00077
00078
00079 explicit NeuralNetwork(const unsigned int&);
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 explicit NeuralNetwork(const std::string&);
00092
00093
00094
00095 NeuralNetwork(const NeuralNetwork&);
00096
00097
00098
00099 virtual ~NeuralNetwork(void);
00100
00101
00102
00103 NeuralNetwork& operator = (const NeuralNetwork&);
00104
00105
00106
00107 bool operator == (const NeuralNetwork&) const;
00108
00109
00110
00111
00112 MultilayerPerceptron* get_multilayer_perceptron_pointer(void) const;
00113 InputsOutputsInformation* get_inputs_outputs_information_pointer(void) const;
00114 ScalingLayer* get_scaling_layer_pointer(void) const;
00115 UnscalingLayer* get_unscaling_layer_pointer(void) const;
00116 BoundingLayer* get_bounding_layer_pointer(void) const;
00117 ProbabilisticLayer* get_probabilistic_layer_pointer(void) const;
00118 ConditionsLayer* get_conditions_layer_pointer(void) const;
00119 IndependentParameters* get_independent_parameters_pointer(void) const;
00120
00121 const bool& get_multilayer_perceptron_flag(void) const;
00122 const bool& get_scaling_layer_flag(void) const;
00123 const bool& get_unscaling_layer_flag(void) const;
00124 const bool& get_bounding_layer_flag(void) const;
00125 const bool& get_probabilistic_layer_flag(void) const;
00126 const bool& get_conditions_layer_flag(void) const;
00127
00128 const bool& get_display(void) const;
00129
00130
00131
00132 void set(void);
00133
00134 void set(const MultilayerPerceptron&);
00135 void set(const Vector<unsigned int>&);
00136 void set(const unsigned int&, const unsigned int&);
00137 void set(const unsigned int&, const unsigned int&, const unsigned int&);
00138
00139
00140 void set(const unsigned int&);
00141
00142 void set(const std::string&);
00143 void set(const NeuralNetwork&);
00144
00145 virtual void set_default(void);
00146
00147 void set_multilayer_perceptron_pointer(MultilayerPerceptron*);
00148 void set_scaling_layer_pointer(ScalingLayer*);
00149 void set_unscaling_layer_pointer(UnscalingLayer*);
00150 void set_bounding_layer_pointer(BoundingLayer*);
00151 void set_probabilistic_layer_pointer(ProbabilisticLayer*);
00152 void set_conditions_layer_pointer(ConditionsLayer*);
00153 void set_inputs_outputs_information_pointer(InputsOutputsInformation*);
00154 void set_independent_parameters_pointer(IndependentParameters*);
00155
00156 void set_multilayer_perceptron_flag(const bool&);
00157 void set_scaling_layer_flag(const bool&);
00158 void set_unscaling_layer_flag(const bool&);
00159 void set_scaling_unscaling_layers_flag(const bool&);
00160 void set_bounding_layer_flag(const bool&);
00161 void set_probabilistic_layer_flag(const bool&);
00162 void set_conditions_layer_flag(const bool&);
00163
00164 void set_display(const bool&);
00165
00166
00167
00168
00169 void construct_multilayer_perceptron(void);
00170 void construct_scaling_layer(void);
00171 void construct_unscaling_layer(void);
00172 void construct_bounding_layer(void);
00173 void construct_probabilistic_layer(void);
00174 void construct_conditions_layer(void);
00175 void construct_inputs_outputs_information(void);
00176 void construct_independent_parameters(void);
00177
00178 void destruct_multilayer_perceptron(void);
00179 void destruct_scaling_layer(void);
00180 void destruct_unscaling_layer(void);
00181 void destruct_bounding_layer(void);
00182 void destruct_probabilistic_layer(void);
00183 void destruct_conditions_layer(void);
00184 void destruct_inputs_outputs_information(void);
00185 void destruct_independent_parameters(void);
00186
00187 void delete_pointers(void);
00188
00189
00190
00191 void initialize_random(void);
00192
00193
00194
00195 unsigned int count_layers_number(void);
00196
00197
00198
00199 unsigned int count_parameters_number(void) const;
00200 Vector<double> arrange_parameters(void) const;
00201
00202 void set_parameters(const Vector<double>&);
00203
00204
00205
00206 void initialize_parameters(const double&);
00207
00208 void initialize_parameters_uniform(void);
00209 void initialize_parameters_uniform(const double&, const double&);
00210 void initialize_parameters_uniform(const Vector<double>&, const Vector<double>&);
00211 void initialize_parameters_uniform(const Vector< Vector<double> >&);
00212
00213 void initialize_parameters_normal(void);
00214 void initialize_parameters_normal(const double&, const double&);
00215 void initialize_parameters_normal(const Vector<double>&, const Vector<double>&);
00216 void initialize_parameters_normal(const Vector< Vector<double> >&);
00217
00218
00219
00220 double calculate_parameters_norm(void) const;
00221
00222
00223
00224 Vector<double> calculate_outputs(const Vector<double>&) const;
00225 Matrix<double> calculate_Jacobian(const Vector<double>&) const;
00226 Vector< Matrix<double> > calculate_Hessian_form(const Vector<double>&) const;
00227
00228 Vector<double> calculate_parameters_output(const Vector<double>&, const Vector<double>&) const;
00229 Matrix<double> calculate_parameters_Jacobian(const Vector<double>&, const Vector<double>&) const;
00230 Vector< Matrix<double> > calculate_parameters_Hessian_form(const Vector<double>&, const Vector<double>&) const;
00231
00232 Matrix<double> calculate_output_data(const Matrix<double>&) const;
00233
00234
00235
00236 Vector< Vector<std::string> > arrange_inputs_outputs_information(void);
00237
00238 void set_inputs_outputs_information(const Vector< Vector<std::string> >&);
00239
00240
00241
00242 Vector< Vector<double> > arrange_inputs_outputs_statistics(void);
00243
00244 void set_inputs_outputs_statistics(const Vector< Vector<double> >&);
00245
00246 void set_inputs_outputs_minimums_maximums(const Vector< Vector<double> >&);
00247 void set_inputs_outputs_means_standard_deviations(const Vector< Vector<double> >&);
00248
00249 void set_inputs_scaling_outputs_unscaling_methods(const std::string&);
00250
00251
00252
00253 std::string to_string(void) const;
00254
00255 virtual TiXmlElement* to_XML(void) const;
00256 virtual void from_XML(TiXmlElement*);
00257
00258 void print(void) const;
00259 void save(const std::string&) const;
00260 void save_parameters(const std::string&) const;
00261
00262 virtual void load(const std::string&);
00263 void load_parameters(const std::string&);
00264
00265 void save_data(const std::string&) const;
00266
00267
00268
00269 std::string write_expression(void) const;
00270
00271 void save_expression(const std::string&);
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306 protected:
00307
00308
00309
00311
00312 MultilayerPerceptron* multilayer_perceptron_pointer;
00313
00315
00316 ScalingLayer* scaling_layer_pointer;
00317
00319
00320 UnscalingLayer* unscaling_layer_pointer;
00321
00323
00324 BoundingLayer* bounding_layer_pointer;
00325
00327
00328 ProbabilisticLayer* probabilistic_layer_pointer;
00329
00331
00332 ConditionsLayer* conditions_layer_pointer;
00333
00335
00336 InputsOutputsInformation* inputs_outputs_information_pointer;
00337
00339
00340 IndependentParameters* independent_parameters_pointer;
00341
00343
00344 bool multilayer_perceptron_flag;
00345
00347
00348 bool scaling_layer_flag;
00349
00351
00352 bool unscaling_layer_flag;
00353
00355
00356 bool bounding_layer_flag;
00357
00359
00360 bool probabilistic_layer_flag;
00361
00363
00364 bool conditions_layer_flag;
00365
00367
00368 bool display;
00369 };
00370
00371 }
00372
00373 #endif
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393