| | |
| | | fwrite(l.filters, sizeof(float), num, fp); |
| | | } |
| | | |
| | | void save_batchnorm_weights(layer l, FILE *fp) |
| | | { |
| | | #ifdef GPU |
| | | if(gpu_index >= 0){ |
| | | pull_batchnorm_layer(l); |
| | | } |
| | | #endif |
| | | fwrite(l.scales, sizeof(float), l.c, fp); |
| | | fwrite(l.rolling_mean, sizeof(float), l.c, fp); |
| | | fwrite(l.rolling_variance, sizeof(float), l.c, fp); |
| | | } |
| | | |
| | | void save_connected_weights(layer l, FILE *fp) |
| | | { |
| | | #ifdef GPU |
| | |
| | | save_convolutional_weights(l, fp); |
| | | } if(l.type == CONNECTED){ |
| | | save_connected_weights(l, fp); |
| | | } if(l.type == BATCHNORM){ |
| | | save_batchnorm_weights(l, fp); |
| | | } if(l.type == RNN){ |
| | | save_connected_weights(*(l.input_layer), fp); |
| | | save_connected_weights(*(l.self_layer), fp); |
| | |
| | | #endif |
| | | } |
| | | |
| | | void load_batchnorm_weights(layer l, FILE *fp) |
| | | { |
| | | fread(l.scales, sizeof(float), l.c, fp); |
| | | fread(l.rolling_mean, sizeof(float), l.c, fp); |
| | | fread(l.rolling_variance, sizeof(float), l.c, fp); |
| | | #ifdef GPU |
| | | if(gpu_index >= 0){ |
| | | push_batchnorm_layer(l); |
| | | } |
| | | #endif |
| | | } |
| | | |
| | | void load_convolutional_weights_binary(layer l, FILE *fp) |
| | | { |
| | | fread(l.biases, sizeof(float), l.n, fp); |
| | |
| | | if(l.type == CONNECTED){ |
| | | load_connected_weights(l, fp, transpose); |
| | | } |
| | | if(l.type == BATCHNORM){ |
| | | load_batchnorm_weights(l, fp); |
| | | } |
| | | if(l.type == CRNN){ |
| | | load_convolutional_weights(*(l.input_layer), fp); |
| | | load_convolutional_weights(*(l.self_layer), fp); |