darknet  v3
avgpool_layer.c
Go to the documentation of this file.
1 #include "avgpool_layer.h"
2 #include "cuda.h"
3 #include <stdio.h>
4 
5 avgpool_layer make_avgpool_layer(int batch, int w, int h, int c)
6 {
7  fprintf(stderr, "avg %4d x%4d x%4d -> %4d\n", w, h, c, c);
8  avgpool_layer l = {0};
9  l.type = AVGPOOL;
10  l.batch = batch;
11  l.h = h;
12  l.w = w;
13  l.c = c;
14  l.out_w = 1;
15  l.out_h = 1;
16  l.out_c = c;
17  l.outputs = l.out_c;
18  l.inputs = h*w*c;
19  int output_size = l.outputs * batch;
20  l.output = calloc(output_size, sizeof(float));
21  l.delta = calloc(output_size, sizeof(float));
24  #ifdef GPU
27  l.output_gpu = cuda_make_array(l.output, output_size);
28  l.delta_gpu = cuda_make_array(l.delta, output_size);
29  #endif
30  return l;
31 }
32 
33 void resize_avgpool_layer(avgpool_layer *l, int w, int h)
34 {
35  l->w = w;
36  l->h = h;
37  l->inputs = h*w*l->c;
38 }
39 
41 {
42  int b,i,k;
43 
44  for(b = 0; b < l.batch; ++b){
45  for(k = 0; k < l.c; ++k){
46  int out_index = k + b*l.c;
47  l.output[out_index] = 0;
48  for(i = 0; i < l.h*l.w; ++i){
49  int in_index = i + l.h*l.w*(k + b*l.c);
50  l.output[out_index] += net.input[in_index];
51  }
52  l.output[out_index] /= l.h*l.w;
53  }
54  }
55 }
56 
58 {
59  int b,i,k;
60 
61  for(b = 0; b < l.batch; ++b){
62  for(k = 0; k < l.c; ++k){
63  int out_index = k + b*l.c;
64  for(i = 0; i < l.h*l.w; ++i){
65  int in_index = i + l.h*l.w*(k + b*l.c);
66  net.delta[in_index] += l.delta[out_index] / (l.h*l.w);
67  }
68  }
69  }
70 }
71 
int w
Definition: darknet.h:140
void(* forward_gpu)(struct layer, struct network)
Definition: darknet.h:126
void(* backward_gpu)(struct layer, struct network)
Definition: darknet.h:127
void resize_avgpool_layer(avgpool_layer *l, int w, int h)
Definition: avgpool_layer.c:33
void(* forward)(struct layer, struct network)
Definition: darknet.h:123
int out_w
Definition: darknet.h:141
float * delta
Definition: darknet.h:486
avgpool_layer make_avgpool_layer(int batch, int w, int h, int c)
Definition: avgpool_layer.c:5
int out_c
Definition: darknet.h:141
void backward_avgpool_layer(const avgpool_layer l, network net)
Definition: avgpool_layer.c:57
int h
Definition: darknet.h:140
float * delta
Definition: darknet.h:245
int out_h
Definition: darknet.h:141
int inputs
Definition: darknet.h:134
void(* backward)(struct layer, struct network)
Definition: darknet.h:124
int batch
Definition: darknet.h:131
float * output
Definition: darknet.h:246
int c
Definition: darknet.h:140
LAYER_TYPE type
Definition: darknet.h:120
float * input
Definition: darknet.h:484
void forward_avgpool_layer_gpu(avgpool_layer layer, network net)
void backward_avgpool_layer_gpu(avgpool_layer layer, network net)
int outputs
Definition: darknet.h:135
void forward_avgpool_layer(const avgpool_layer l, network net)
Definition: avgpool_layer.c:40
Definition: darknet.h:119