00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __PERCEPTRONLAYER_H__
00017 #define __PERCEPTRONLAYER_H__
00018
00019
00020
00021 #include <string>
00022
00023
00024
00025 #include "perceptron.h"
00026
00027 #include "../utilities/vector.h"
00028 #include "../utilities/matrix.h"
00029
00030 namespace OpenNN
00031 {
00032
00035
00036 class PerceptronLayer
00037 {
00038
00039 public:
00040
00041
00042
00043 explicit PerceptronLayer(void);
00044
00045
00046
00047 explicit PerceptronLayer(const unsigned int&, const unsigned int&);
00048
00049
00050
00051 PerceptronLayer(const PerceptronLayer&);
00052
00053
00054
00055 virtual ~PerceptronLayer(void);
00056
00057
00058
00059 PerceptronLayer& operator = (const PerceptronLayer&);
00060
00061
00062
00063 bool operator == (const PerceptronLayer&) const;
00064
00065
00066
00067 bool is_empty(void) const;
00068
00069 const Vector<Perceptron>& get_perceptrons(void) const;
00070 const Perceptron& get_perceptron(const unsigned int&) const;
00071
00072 unsigned int count_inputs_number(void) const;
00073 unsigned int count_perceptrons_number(void) const;
00074
00075
00076
00077 Vector<double> arrange_biases(void) const;
00078 Matrix<double> arrange_synaptic_weights(void) const;
00079
00080 unsigned int count_parameters_number(void) const;
00081 Vector<double> arrange_parameters(void) const;
00082
00083 Vector<unsigned int> count_cumulative_parameters_number(void) const;
00084
00085
00086
00087 const Perceptron::ActivationFunction& get_activation_function(void) const;
00088
00089 std::string write_activation_function_name(void) const;
00090
00091
00092
00093 const bool& get_display(void) const;
00094
00095
00096
00097 void set(void);
00098 void set(const Vector<Perceptron>&);
00099 void set(const unsigned int&, const unsigned int&);
00100 void set(const PerceptronLayer&);
00101
00102 void set_default(void);
00103
00104
00105
00106 void set_inputs_number(const unsigned int&);
00107 void set_perceptrons_number(const unsigned int&);
00108
00109 void set_perceptrons(const Vector<Perceptron>&);
00110 void set_perceptron(const unsigned int&, const Perceptron&);
00111
00112
00113
00114 void set_biases(const Vector<double>&);
00115 void set_synaptic_weights(const Matrix<double>&);
00116
00117 void set_parameters(const Vector<double>&);
00118
00119
00120
00121 void set_activation_function(const Perceptron::ActivationFunction&);
00122 void set_activation_function(const std::string&);
00123
00124
00125
00126 void set_display(const bool&);
00127
00128
00129
00130 void grow_input(void);
00131 void grow_perceptron(void);
00132
00133 void prune_input(const unsigned int&);
00134 void prune_perceptron(const unsigned int&);
00135
00136
00137
00138 void initialize_random(void);
00139
00140
00141
00142 void initialize_biases(const double&);
00143 void initialize_synaptic_weights(const double&);
00144
00145 void initialize_parameters(const double&);
00146
00147 void initialize_parameters_uniform(void);
00148 void initialize_parameters_uniform(const double&, const double&);
00149 void initialize_parameters_uniform(const Vector<double>&, const Vector<double>&);
00150 void initialize_parameters_uniform(const Vector< Vector<double> >&);
00151
00152 void initialize_parameters_normal(void);
00153 void initialize_parameters_normal(const double&, const double&);
00154 void initialize_parameters_normal(const Vector<double>&, const Vector<double>&);
00155 void initialize_parameters_normal(const Vector< Vector<double> >&);
00156
00157
00158
00159 double calculate_parameters_norm(void) const;
00160
00161
00162
00163 Vector<double> calculate_combination(const Vector<double>&) const;
00164 Matrix<double> calculate_combination_Jacobian(const Vector<double>&) const;
00165 Vector< Matrix<double> > calculate_combination_Hessian_form(const Vector<double>&) const;
00166
00167 Vector<double> calculate_combination_parameters(const Vector<double>&, const Vector<double>&) const;
00168 Matrix<double> calculate_combination_parameters_Jacobian(const Vector<double>&, const Vector<double>&) const;
00169 Vector< Matrix<double> > calculate_combination_parameters_Hessian_form(const Vector<double>&, const Vector<double>&) const;
00170
00171
00172
00173 Vector<double> calculate_activation(const Vector<double>&) const;
00174 Vector<double> calculate_activation_derivative(const Vector<double>&) const;
00175 Vector<double> calculate_activation_second_derivative(const Vector<double>&) const;
00176
00177 Matrix<double> arrange_activation_Jacobian(const Vector<double>&) const;
00178 Vector< Matrix<double> > arrange_activation_Hessian_form(const Vector<double>&) const;
00179
00180
00181
00182 Vector<double> calculate_outputs(const Vector<double>&) const;
00183 Matrix<double> calculate_Jacobian(const Vector<double>&) const;
00184 Vector< Matrix<double> > calculate_Hessian_form(const Vector<double>&) const;
00185
00186 Vector<double> calculate_parameters_output(const Vector<double>&, const Vector<double>&) const;
00187 Matrix<double> calculate_parameters_Jacobian(const Vector<double>&, const Vector<double>&) const;
00188 Vector< Matrix<double> > calculate_parameters_Hessian_form(const Vector<double>&, const Vector<double>&) const;
00189
00190
00191
00192 std::string write_expression(const Vector<std::string>&, const Vector<std::string>&) const;
00193
00194
00195
00196
00197
00198
00199 protected:
00200
00201
00202
00205
00206 Vector<Perceptron> perceptrons;
00207
00209
00210 bool display;
00211 };
00212
00213 }
00214
00215 #endif
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235