/** * @brief compares two networks and returns a greater than * zero value if they are the same * @param net1 The first backprop neural net object * @param net2 The second backprop neural net object */ int bp_compare(bp * net1, bp * net2) { int retval,i,l; if (net1->NoOfInputs != net2->NoOfInputs) { return -1; } if (net1->NoOfHiddens != net2->NoOfHiddens) { return -2; } if (net1->NoOfOutputs != net2->NoOfOutputs) { return -3; } if (net1->HiddenLayers != net2->HiddenLayers) { return -4; } if (net1->learningRate != net2->learningRate) { return -5; } if (net1->noise != net2->noise) { return -6; } for (l = 0; l < net1->HiddenLayers; l++) { for (i = 0; i < net1->NoOfHiddens; i++) { retval = bp_neuron_compare(net1->hiddens[l][i], net2->hiddens[l][i]); if (retval == 0) return -7; } } for (i = 0; i < net1->NoOfOutputs; i++) { retval = bp_neuron_compare(net1->outputs[i], net2->outputs[i]); if (retval == 0) return -8; } if (net1->itterations != net2->itterations) { return -9; } if (net1->BPerrorAverage != net2->BPerrorAverage) { return -9; } if (net1->DropoutPercent!= net2->DropoutPercent) { return -10; } return 1; }
static void test_backprop_neuron_save_load() { bp_neuron n1, n2; int no_of_inputs=10; unsigned int random_seed = 123; char filename[256]; FILE * fp; printf("test_backprop_neuron_save_load..."); /* create neurons */ bp_neuron_init(&n1, no_of_inputs, &random_seed); bp_neuron_init(&n2, no_of_inputs, &random_seed); sprintf(filename,"%stemp_deep.dat",DEEPLEARN_TEMP_DIRECTORY); /* save the first neuron */ fp = fopen(filename,"wb"); assert(fp!=0); bp_neuron_save(fp, &n1); fclose(fp); /* load into the second neuron */ fp = fopen(filename,"rb"); assert(fp!=0); bp_neuron_load(fp, &n2); fclose(fp); /* compare the two */ assert(bp_neuron_compare(&n1, &n2)==1); /* free memory */ bp_neuron_free(&n1); bp_neuron_free(&n2); printf("Ok\n"); }
static void test_backprop_neuron_copy() { bp_neuron n1, n2; int retval, no_of_inputs=10; unsigned int random_seed = 123; printf("test_backprop_neuron_copy..."); bp_neuron_init(&n1, no_of_inputs, &random_seed); bp_neuron_init(&n2, no_of_inputs, &random_seed); bp_neuron_copy(&n1, &n2); retval = bp_neuron_compare(&n1, &n2); if (retval != 1) { printf("\nretval %d\n", retval); } assert(retval == 1); bp_neuron_free(&n1); bp_neuron_free(&n2); printf("Ok\n"); }