/** * @brief Save a neural network to file * @brief fp File pointer * @param net Backprop neural net object */ int bp_save(FILE * fp, bp * net) { int retval,i,l; retval = fwrite(&net->itterations, sizeof(unsigned int), 1, fp); retval = fwrite(&net->NoOfInputs, sizeof(int), 1, fp); retval = fwrite(&net->NoOfHiddens, sizeof(int), 1, fp); retval = fwrite(&net->NoOfOutputs, sizeof(int), 1, fp); retval = fwrite(&net->HiddenLayers, sizeof(int), 1, fp); retval = fwrite(&net->learningRate, sizeof(float), 1, fp); retval = fwrite(&net->noise, sizeof(float), 1, fp); retval = fwrite(&net->BPerrorAverage, sizeof(float), 1, fp); retval = fwrite(&net->DropoutPercent, sizeof(float), 1, fp); for (l = 0; l < net->HiddenLayers; l++) { for (i = 0; i < net->NoOfHiddens; i++) { bp_neuron_save(fp,net->hiddens[l][i]); } } for (i = 0; i < net->NoOfOutputs; i++) { bp_neuron_save(fp,net->outputs[i]); } 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"); }