BPNN *bpnn_read(char *filename) { char *mem; BPNN *_new; FILE * fd; int n1, n2, n3, i, j, memcnt; fprintf(stderr,"%s",filename); if ((fd = fopen(filename, "wb+")) == NULL) { return (NULL); } fprintf(stderr,"Reading '%s'\n", filename); fflush(stdout); fread((char *) &n1, sizeof(int),1,fd); fread((char *) &n2, sizeof(int),1,fd); fread((char *) &n3, sizeof(int),1,fd); _new = bpnn_internal_create(n1, n2, n3); fprintf(stderr,"'%s' contains a %dx%dx%d network\n", filename, n1, n2, n3); fprintf(stderr,"Reading input weights..."); fflush(stdout); memcnt = 0; mem = (char *) malloc ((unsigned) ((n1+1) * (n2+1) * sizeof(double))); fread( mem, (n1+1) * (n2+1) * sizeof(double),1,fd); for (i = 0; i <= n1; i++) { for (j = 0; j <= n2; j++) { fastcopy(&(_new->input_weights[i][j]), &mem[memcnt], sizeof(double)); memcnt += sizeof(double); } } free(mem); fprintf(stderr,"Done\nReading hidden weights..."); fflush(stdout); memcnt = 0; mem = (char *) malloc ((unsigned) ((n2+1) * (n3+1) * sizeof(double))); fread(mem, (n2+1) * (n3+1) * sizeof(double),1,fd); for (i = 0; i <= n2; i++) { for (j = 0; j <= n3; j++) { fastcopy(&(_new->hidden_weights[i][j]), &mem[memcnt], sizeof(double)); memcnt += sizeof(double); } } free(mem); fclose(fd); fprintf(stderr,"Done\n"); fflush(stdout); bpnn_zero_weights(_new->input_prev_weights, n1, n2); bpnn_zero_weights(_new->hidden_prev_weights, n2, n3); return (_new); }
BPNN *bpnn_read(char *filename) { char *mem; BPNN *new_t; int fd, n1, n2, n3, i, j, memcnt; if ((fd = open(filename, 0, 0644)) == -1) { return (NULL); } printf("Reading '%s'\n", filename); //fflush(stdout); read(fd, (char *) &n1, sizeof(int)); read(fd, (char *) &n2, sizeof(int)); read(fd, (char *) &n3, sizeof(int)); new_t = bpnn_internal_create(n1, n2, n3); printf("'%s' contains a %dx%dx%d network\n", filename, n1, n2, n3); printf("Reading input weights..."); //fflush(stdout); memcnt = 0; mem = (char *) malloc ((unsigned) ((n1+1) * (n2+1) * sizeof(float))); read(fd, mem, (n1+1) * (n2+1) * sizeof(float)); for (i = 0; i <= n1; i++) { for (j = 0; j <= n2; j++) { fastcopy(&(new_t->input_weights[i][j]), &mem[memcnt], sizeof(float)); memcnt += sizeof(float); } } free(mem); printf("Done\nReading hidden weights..."); //fflush(stdout); memcnt = 0; mem = (char *) malloc ((unsigned) ((n2+1) * (n3+1) * sizeof(float))); read(fd, mem, (n2+1) * (n3+1) * sizeof(float)); for (i = 0; i <= n2; i++) { for (j = 0; j <= n3; j++) { fastcopy(&(new_t->hidden_weights[i][j]), &mem[memcnt], sizeof(float)); memcnt += sizeof(float); } } free(mem); close(fd); printf("Done\n"); //fflush(stdout); bpnn_zero_weights(new_t->input_prev_weights, n1, n2); bpnn_zero_weights(new_t->hidden_prev_weights, n2, n3); return (new_t); }
BPNN *bpnn_create(int n_in, int n_hidden, int n_out) { BPNN *newnet; newnet = bpnn_internal_create(n_in, n_hidden, n_out); #ifdef INITZERO bpnn_zero_weights(newnet->input_weights, n_in, n_hidden); #else bpnn_randomize_weights(newnet->input_weights, n_in, n_hidden); #endif bpnn_randomize_weights(newnet->hidden_weights, n_hidden, n_out); bpnn_zero_weights(newnet->input_prev_weights, n_in, n_hidden); bpnn_zero_weights(newnet->hidden_prev_weights, n_hidden, n_out); bpnn_randomize_row(newnet->target, n_out); return (newnet); }