/** * @brief Load a network from file * @brief fp File pointer * @param net Backprop neural net object * @param random_seed Random number generator seed */ int bp_load(FILE * fp, bp * net, unsigned int * random_seed) { int retval,i,l; int no_of_inputs=0, no_of_hiddens=0, no_of_outputs=0; int hidden_layers=0; float learning_rate=0, noise=0, BPerrorAverage=0; float DropoutPercent=0; unsigned int itterations=0; retval = fread(&itterations, sizeof(unsigned int), 1, fp); retval = fread(&no_of_inputs, sizeof(int), 1, fp); retval = fread(&no_of_hiddens, sizeof(int), 1, fp); retval = fread(&no_of_outputs, sizeof(int), 1, fp); retval = fread(&hidden_layers, sizeof(int), 1, fp); retval = fread(&learning_rate, sizeof(float), 1, fp); retval = fread(&noise, sizeof(float), 1, fp); retval = fread(&BPerrorAverage, sizeof(float), 1, fp); retval = fread(&DropoutPercent, sizeof(float), 1, fp); bp_init(net, no_of_inputs, no_of_hiddens, hidden_layers, no_of_outputs, random_seed); for (l = 0; l < net->HiddenLayers; l++) { for (i = 0; i < net->NoOfHiddens; i++) { bp_neuron_load(fp,net->hiddens[l][i]); } } for (i = 0; i < net->NoOfOutputs; i++) { bp_neuron_load(fp,net->outputs[i]); } net->learningRate = learning_rate; net->noise = noise; net->BPerrorAverage = BPerrorAverage; net->BPerror = BPerrorAverage; net->BPerrorTotal = BPerrorAverage; net->itterations = itterations; net->DropoutPercent = DropoutPercent; return retval; }
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"); }