| | |
| | | { |
| | | int i; |
| | | for(i = 0; i < net.n; ++i){ |
| | | clock_t time = clock(); |
| | | if(net.types[i] == CONVOLUTIONAL){ |
| | | convolutional_layer layer = *(convolutional_layer *)net.layers[i]; |
| | | forward_convolutional_layer_gpu(layer, input); |
| | |
| | | forward_crop_layer_gpu(layer, input); |
| | | input = layer.output_cl; |
| | | } |
| | | check_error(cl); |
| | | //printf("Forw %d %f\n", i, sec(clock() - time)); |
| | | } |
| | | } |
| | | |
| | |
| | | cl_mem prev_input; |
| | | cl_mem prev_delta; |
| | | for(i = net.n-1; i >= 0; --i){ |
| | | clock_t time = clock(); |
| | | if(i == 0){ |
| | | prev_input = input; |
| | | prev_delta = 0; |
| | |
| | | softmax_layer layer = *(softmax_layer *)net.layers[i]; |
| | | backward_softmax_layer_gpu(layer, prev_delta); |
| | | } |
| | | check_error(cl); |
| | | //printf("Back %d %f\n", i, sec(clock() - time)); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | else if(net.types[i] == CONNECTED){ |
| | | connected_layer layer = *(connected_layer *)net.layers[i]; |
| | | cl_read_array(layer.output_cl, layer.output, layer.outputs*layer.batch); |
| | | return layer.output; |
| | | } |
| | | else if(net.types[i] == MAXPOOL){ |