| | |
| | | |
| | | extern void run_imagenet(int argc, char **argv); |
| | | extern void run_yolo(int argc, char **argv); |
| | | extern void run_detector(int argc, char **argv); |
| | | extern void run_coco(int argc, char **argv); |
| | | extern void run_writing(int argc, char **argv); |
| | | extern void run_captcha(int argc, char **argv); |
| | |
| | | for(i = 0; i < net.n; ++i){ |
| | | layer l = net.layers[i]; |
| | | if(l.type == CONVOLUTIONAL){ |
| | | ops += 2 * l.n * l.size*l.size*l.c * l.out_h*l.out_w; |
| | | ops += 2l * l.n * l.size*l.size*l.c * l.out_h*l.out_w; |
| | | } else if(l.type == CONNECTED){ |
| | | ops += 2 * l.inputs * l.outputs; |
| | | ops += 2l * l.inputs * l.outputs; |
| | | } |
| | | } |
| | | printf("Floating Point Operations: %ld\n", ops); |
| | | printf("Floating Point Operations: %.2f Bn\n", (float)ops/1000000000.); |
| | | } |
| | | |
| | | void partial(char *cfgfile, char *weightfile, char *outfile, int max) |
| | |
| | | save_weights(net, outfile); |
| | | } |
| | | |
| | | void reset_normalize_net(char *cfgfile, char *weightfile, char *outfile) |
| | | { |
| | | gpu_index = -1; |
| | | network net = parse_network_cfg(cfgfile); |
| | | if (weightfile) { |
| | | load_weights(&net, weightfile); |
| | | } |
| | | int i; |
| | | for (i = 0; i < net.n; ++i) { |
| | | layer l = net.layers[i]; |
| | | if (l.type == CONVOLUTIONAL && l.batch_normalize) { |
| | | denormalize_convolutional_layer(l); |
| | | } |
| | | if (l.type == CONNECTED && l.batch_normalize) { |
| | | denormalize_connected_layer(l); |
| | | } |
| | | if (l.type == GRU && l.batch_normalize) { |
| | | denormalize_connected_layer(*l.input_z_layer); |
| | | denormalize_connected_layer(*l.input_r_layer); |
| | | denormalize_connected_layer(*l.input_h_layer); |
| | | denormalize_connected_layer(*l.state_z_layer); |
| | | denormalize_connected_layer(*l.state_r_layer); |
| | | denormalize_connected_layer(*l.state_h_layer); |
| | | } |
| | | } |
| | | save_weights(net, outfile); |
| | | } |
| | | |
| | | layer normalize_layer(layer l, int n) |
| | | { |
| | | int j; |
| | | l.batch_normalize=1; |
| | | l.scales = calloc(n, sizeof(float)); |
| | | for(j = 0; j < n; ++j){ |
| | | l.scales[j] = 1; |
| | | } |
| | | l.rolling_mean = calloc(n, sizeof(float)); |
| | | l.rolling_variance = calloc(n, sizeof(float)); |
| | | return l; |
| | | } |
| | | |
| | | void normalize_net(char *cfgfile, char *weightfile, char *outfile) |
| | | { |
| | | gpu_index = -1; |
| | |
| | | if(weightfile){ |
| | | load_weights(&net, weightfile); |
| | | } |
| | | int i, j; |
| | | int i; |
| | | for(i = 0; i < net.n; ++i){ |
| | | layer l = net.layers[i]; |
| | | if(l.type == CONVOLUTIONAL){ |
| | | net.layers[i].batch_normalize=1; |
| | | net.layers[i].scales = calloc(l.n, sizeof(float)); |
| | | for(j = 0; j < l.n; ++j){ |
| | | net.layers[i].scales[i] = 1; |
| | | if(l.type == CONVOLUTIONAL && !l.batch_normalize){ |
| | | net.layers[i] = normalize_layer(l, l.n); |
| | | } |
| | | net.layers[i].rolling_mean = calloc(l.n, sizeof(float)); |
| | | net.layers[i].rolling_variance = calloc(l.n, sizeof(float)); |
| | | if (l.type == CONNECTED && !l.batch_normalize) { |
| | | net.layers[i] = normalize_layer(l, l.outputs); |
| | | } |
| | | if (l.type == GRU && l.batch_normalize) { |
| | | *l.input_z_layer = normalize_layer(*l.input_z_layer, l.input_z_layer->outputs); |
| | | *l.input_r_layer = normalize_layer(*l.input_r_layer, l.input_r_layer->outputs); |
| | | *l.input_h_layer = normalize_layer(*l.input_h_layer, l.input_h_layer->outputs); |
| | | *l.state_z_layer = normalize_layer(*l.state_z_layer, l.state_z_layer->outputs); |
| | | *l.state_r_layer = normalize_layer(*l.state_r_layer, l.state_r_layer->outputs); |
| | | *l.state_h_layer = normalize_layer(*l.state_h_layer, l.state_h_layer->outputs); |
| | | net.layers[i].batch_normalize=1; |
| | | } |
| | | } |
| | | save_weights(net, outfile); |
| | |
| | | average(argc, argv); |
| | | } else if (0 == strcmp(argv[1], "yolo")){ |
| | | run_yolo(argc, argv); |
| | | } else if (0 == strcmp(argv[1], "detector")){ |
| | | run_detector(argc, argv); |
| | | } else if (0 == strcmp(argv[1], "cifar")){ |
| | | run_cifar(argc, argv); |
| | | } else if (0 == strcmp(argv[1], "go")){ |
| | |
| | | change_rate(argv[2], atof(argv[3]), (argc > 4) ? atof(argv[4]) : 0); |
| | | } else if (0 == strcmp(argv[1], "rgbgr")){ |
| | | rgbgr_net(argv[2], argv[3], argv[4]); |
| | | } else if (0 == strcmp(argv[1], "reset")){ |
| | | reset_normalize_net(argv[2], argv[3], argv[4]); |
| | | } else if (0 == strcmp(argv[1], "denormalize")){ |
| | | denormalize_net(argv[2], argv[3], argv[4]); |
| | | } else if (0 == strcmp(argv[1], "normalize")){ |