void save_weights_double(network net, char *filename) { fprintf(stderr, "Saving doubled weights to %s\n", filename); FILE *fp = fopen(filename, "w"); if(!fp) file_error(filename); fwrite(&net.learning_rate, sizeof(float), 1, fp); fwrite(&net.momentum, sizeof(float), 1, fp); fwrite(&net.decay, sizeof(float), 1, fp); fwrite(net.seen, sizeof(int), 1, fp); int i,j,k; for(i = 0; i < net.n; ++i){ layer l = net.layers[i]; if(l.type == CONVOLUTIONAL){ #ifdef GPU if(gpu_index >= 0){ pull_convolutional_layer(l); } #endif float zero = 0; fwrite(l.biases, sizeof(float), l.n, fp); fwrite(l.biases, sizeof(float), l.n, fp); for (j = 0; j < l.n; ++j){ int index = j*l.c*l.size*l.size; fwrite(l.filters+index, sizeof(float), l.c*l.size*l.size, fp); for (k = 0; k < l.c*l.size*l.size; ++k) fwrite(&zero, sizeof(float), 1, fp); } for (j = 0; j < l.n; ++j){ int index = j*l.c*l.size*l.size; for (k = 0; k < l.c*l.size*l.size; ++k) fwrite(&zero, sizeof(float), 1, fp); fwrite(l.filters+index, sizeof(float), l.c*l.size*l.size, fp); } } } fclose(fp); }
void save_convolutional_weights(layer l, FILE *fp) { if(l.binary){ //save_convolutional_weights_binary(l, fp); //return; } #ifdef GPU if(gpu_index >= 0){ pull_convolutional_layer(l); } #endif int num = l.n*l.c*l.size*l.size; fwrite(l.biases, sizeof(float), l.n, fp); if (l.batch_normalize){ fwrite(l.scales, sizeof(float), l.n, fp); fwrite(l.rolling_mean, sizeof(float), l.n, fp); fwrite(l.rolling_variance, sizeof(float), l.n, fp); } fwrite(l.weights, sizeof(float), num, fp); if(l.adam){ fwrite(l.m, sizeof(float), num, fp); fwrite(l.v, sizeof(float), num, fp); } }
void pull_crnn_layer(layer_t l) { pull_convolutional_layer(*(l.input_layer)); pull_convolutional_layer(*(l.self_layer)); pull_convolutional_layer(*(l.output_layer)); }