9 fprintf(stderr,
"route ");
18 for(i = 0; i < n; ++i){
19 fprintf(stderr,
" %d", input_layers[i]);
20 outputs += input_sizes[i];
22 fprintf(stderr,
"\n");
25 l.
delta = calloc(outputs*batch,
sizeof(
float));
26 l.
output = calloc(outputs*batch,
sizeof(
float));;
34 l.delta_gpu = cuda_make_array(l.
delta, outputs*batch);
35 l.output_gpu = cuda_make_array(l.
output, outputs*batch);
49 for(i = 1; i < l->
n; ++i){
66 cuda_free(l->output_gpu);
67 cuda_free(l->delta_gpu);
78 for(i = 0; i < l.
n; ++i){
82 for(j = 0; j < l.
batch; ++j){
93 for(i = 0; i < l.
n; ++i){
97 for(j = 0; j < l.
batch; ++j){
100 offset += input_size;
109 for(i = 0; i < l.
n; ++i){
111 float *input = net.
layers[index].output_gpu;
113 for(j = 0; j < l.
batch; ++j){
114 copy_gpu(input_size, input + j*input_size, 1, l.output_gpu + offset + j*l.
outputs, 1);
116 offset += input_size;
124 for(i = 0; i < l.
n; ++i){
126 float *delta = net.
layers[index].delta_gpu;
128 for(j = 0; j < l.
batch; ++j){
129 axpy_gpu(input_size, 1, l.delta_gpu + offset + j*l.
outputs, 1, delta + j*input_size, 1);
131 offset += input_size;
void backward_route_layer(const route_layer l, network net)
void(* forward_gpu)(struct layer, struct network)
void(* backward_gpu)(struct layer, struct network)
void axpy_gpu(int N, float ALPHA, float *X, int INCX, float *Y, int INCY)
void(* forward)(struct layer, struct network)
void axpy_cpu(int N, float ALPHA, float *X, int INCX, float *Y, int INCY)
void(* backward)(struct layer, struct network)
void copy_gpu(int N, float *X, int INCX, float *Y, int INCY)
void copy_cpu(int N, float *X, int INCX, float *Y, int INCY)
void forward_route_layer(const route_layer l, network net)
route_layer make_route_layer(int batch, int n, int *input_layers, int *input_sizes)
void resize_route_layer(route_layer *l, network *net)