예제 #1
0
파일: backprop.c 프로젝트: chagge/libdeep
/**
* @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;
}
예제 #2
0
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");
}