47 {
"usage", 0, 0,
'u' },
48 {
"mode", 1, 0,
'm' },
49 {
"mean", 1, 0,
'M' },
50 {
"variance", 1, 0,
'V' },
53 {
"minW", 1, 0,
'w' },
54 {
"maxW", 1, 0,
'W' },
55 {
"file", 1, 0,
'f' },
56 {
"fileINPUT", 1, 0,
'i' },
57 {
"fileOUTPUT", 1, 0,
'o' }
61 fprintf( stdout,
"\nUSAGE OPTIONS:\n"
65 " ann initialized file name (default data/ann.dat)\n"
67 " input file name (default data/Input.dat)\n"
69 " desired output file name (defalut/DOutput.dat)\n"
71 " scaling input/output mode: 1 mean-variance (default)\n"
75 " mean value (defaul 0.)\n"
77 " variance value (defaul 1.)\n"
79 " minimum value (defaul -1.)\n"
81 " maximum value (defaul 1.)\n"
83 " random initialization minimum weight value (defaul -0.001)\n"
85 " random initialization maximum weight value (defaul 0.001)\n"
101 static char *
file =
"data/ann.dat";
103 int main(
int argc,
char **argv ){
108 double mean, var, min, max;
109 int N_input, N_output, N_layer, r, N_sample;
110 int *N_neuron = NULL;
118 opt = getopt_long( argc, argv,
"uf:i:o:m:M:V:N:X:w:W:",
options, NULL );
122 case 'f':
file = strdup( optarg );
128 case 'm': MODE = atoi( optarg );
130 case 'M':
MEAN = atof( optarg );
132 case 'V':
VARIANCE = atof( optarg );
134 case 'N':
MIN = atof( optarg );
136 case 'X':
MAX = atof( optarg );
138 case 'w':
minW = atof( optarg );
140 case 'W':
maxW = atof( optarg );
147 srand ( time(NULL) );
150 fprintf( stdout,
"ARTIFICIAL NEURAL NETWORK INITIALIZATION....\n" );
151 fprintf( stdout,
"Output save in %s\n\n",
file );
152 fh = fopen(
file,
"w" );
154 fprintf( stdout,
"*** Network architecture ***\n" );
155 fprintf( stdout,
"\tNetwork inputs' number?\n" );
156 fscanf( stdin,
"%d", &N_input );
158 fprintf( stderr,
"ERROR: Input number must be greater than zero.\n");
161 fprintf( fh,
"%d\n", N_input );
163 fprintf( stdout,
"\tNetwork outputs' number?\n" );
164 fscanf( stdin,
"%d", &N_output );
166 fprintf( stderr,
"ERROR: Output number must be greater than zero.\n");
169 fprintf( fh,
"%d\n", N_output );
171 fprintf( stdout,
"\tHidden layers' number?\n" );
172 fscanf( stdin,
"%d", &N_layer );
174 fprintf( stderr,
"ERROR: Hidden layer number must be not negative.\n");
177 fprintf( fh,
"%d\n", N_layer );
179 fprintf( stdout,
"\tTime step delay's number?\n" );
180 fscanf( stdin,
"%d", &r );
182 fprintf( stderr,
"ERROR Timestep delay number must be not negative.\n");
186 fprintf( fh,
"%d\n", r );
187 N_neuron = (
int *)malloc( (N_layer+2) *
sizeof(
int) );
188 if (N_neuron==NULL) {
193 for( i=0; i<N_layer; i++ ){
194 fprintf( stdout,
"\tNeuron number at %d hidden layer number?\n", i+1 );
195 fscanf( stdin,
"%d", &in );
198 fprintf( stderr,
"ERROR: Neuron number at %d hidden layer must be greater than zero.\n",i+1);
201 fprintf( fh,
"%d ", in );
203 fprintf( stdout,
"\tNeuron number at the visible layer number?\n" );
204 fscanf( stdin,
"%d", &in );
205 N_neuron[N_layer+1] = in;
207 fprintf( stderr,
"ERROR: Neuron number at the visible layer must be not lesser than output number.\n");
210 fprintf( fh,
"%d ", in );
211 N_neuron[0] = N_input + ( r * N_neuron[N_layer+1] );
213 fprintf( fh,
" \n\n\n" );
215 fprintf( stdout,
"*** Activation function definition***\n" );
216 fprintf( stdout,
" 1: Hyperbolic tangent [ y = a*tanh(b*x) ]\n" );
217 fprintf( stdout,
" 2: Linear function [ y = mx +q ]\n" );
218 fprintf( stdout,
"\tChoose activation function [ 1 2 ]\n" );
219 fscanf( stdin,
"%d", &in );
220 fprintf( fh,
"%d\n", in );
221 fprintf( stdout,
"\tActivation function parameters?\n" );
222 fscanf( stdin,
"%lf", &doub );
223 fprintf( fh,
"\n%e ", doub );
224 fscanf( stdin,
"%lf", &doub );
225 fprintf( fh,
" %e\n", doub );
227 fprintf( fh,
" \n\n\n" );
229 fprintf( stdout,
"*** Training parameters***\n" );
230 fprintf( stdout,
"\tLearning rate?\n" );
231 fscanf( stdin,
"%lf", &doub );
233 fprintf( stderr,
"ERROR: Learning rate must be not negative.\n");
236 fprintf( fh,
"%e\n", doub );
237 fprintf( stdout,
"\nMomentum term?\n" );
238 fscanf( stdin,
"%lf", &doub );
239 fprintf( fh,
"%e\n", doub );
241 fprintf( fh,
" \n\n\n" );
243 fprintf( stdout,
"*** Random weight matrices initialization ( Wmin = %f; Wmax = %f )***\n",
minW,
maxW );
244 for( i=0; i<N_layer+1; i++){
251 fprintf( stdout,
"*** Input/Output Scale factor computing ***\n" );
254 fprintf( stderr,
"ERRRO: Error in Input data acquisition\n");
258 fprintf( stderr,
"ERROR: Error in Input data acquisition\n");
263 for( i=0; i<N_input; i++ ){
264 SF_INPUT.
mat[i][0] = 1.0;
266 for( i=0; i<N_output; i++ ){
267 SF_OUTPUT.
mat[i][0] = 1.0;
270 for( i=0; i<INPUT.
Ncolumn; i++ ){
273 fprintf( stdout,
"Input number %d (mean value = %e, variance = %e), do you want ot scale it? [1 = yes, 0 = no]\n", i+1, mean, var );
274 fscanf( stdin,
"%d", &in);
277 SF_INPUT.
mat[i][1] =
MEAN - SF_INPUT.
mat[i][0]*mean;
280 for( i=0; i<OUTPUT.
Ncolumn; i++ ){
284 SF_OUTPUT.
mat[i][1] =
MEAN - SF_OUTPUT.
mat[i][0]*mean;
288 for( i=0; i<INPUT.
Ncolumn; i++ ){
291 fprintf( stdout,
"Input number %d (min value = %e, max = %e), do you want ot scale it? [1 = yes, 0 = no]\n", i+1, min, max );
292 fscanf( stdin,
"%d", &in);
294 SF_INPUT.
mat[i][0] = (
MAX-
MIN)/(max-min);
295 SF_INPUT.
mat[i][1] = (max*
MIN-
MAX*min)/(max-min);
298 for( i=0; i<OUTPUT.
Ncolumn; i++ ){
301 SF_OUTPUT.
mat[i][0] = (
MAX-
MIN)/(max-min);
302 SF_OUTPUT.
mat[i][1] = (max*
MIN-
MAX*min)/(max-min);
mat_res_t matrix_random(matrix *MAT, double min, double max)
mat_res_t matrix_write(matrix *MAT, FILE *fh, unsigned flags)
double variance(matrix *MAT, int column)
ann_res_t ANN_DataRead(matrix *MAT, int *N_sample, char *FileName)
double mean_value(matrix *MAT, int column)
mat_res_t matrix_destroy(matrix *MAT)
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
double maximum(matrix *MAT, int column)
int main(int argc, char **argv)
mat_res_t matrix_init(matrix *MAT, unsigned Nrow, unsigned Ncolumn)
double minimum(matrix *MAT, int column)