darknet  v3
activation_layer.c
Go to the documentation of this file.
1 #include "activation_layer.h"
2 #include "utils.h"
3 #include "cuda.h"
4 #include "blas.h"
5 #include "gemm.h"
6 
7 #include <math.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11 
12 layer make_activation_layer(int batch, int inputs, ACTIVATION activation)
13 {
14  layer l = {0};
15  l.type = ACTIVE;
16 
17  l.inputs = inputs;
18  l.outputs = inputs;
19  l.batch=batch;
20 
21  l.output = calloc(batch*inputs, sizeof(float*));
22  l.delta = calloc(batch*inputs, sizeof(float*));
23 
26 #ifdef GPU
27  l.forward_gpu = forward_activation_layer_gpu;
28  l.backward_gpu = backward_activation_layer_gpu;
29 
30  l.output_gpu = cuda_make_array(l.output, inputs*batch);
31  l.delta_gpu = cuda_make_array(l.delta, inputs*batch);
32 #endif
33  l.activation = activation;
34  fprintf(stderr, "Activation Layer: %d inputs\n", inputs);
35  return l;
36 }
37 
39 {
40  copy_cpu(l.outputs*l.batch, net.input, 1, l.output, 1);
42 }
43 
45 {
47  copy_cpu(l.outputs*l.batch, l.delta, 1, net.delta, 1);
48 }
49 
50 #ifdef GPU
51 
52 void forward_activation_layer_gpu(layer l, network net)
53 {
54  copy_gpu(l.outputs*l.batch, net.input_gpu, 1, l.output_gpu, 1);
55  activate_array_gpu(l.output_gpu, l.outputs*l.batch, l.activation);
56 }
57 
58 void backward_activation_layer_gpu(layer l, network net)
59 {
60  gradient_array_gpu(l.output_gpu, l.outputs*l.batch, l.activation, l.delta_gpu);
61  copy_gpu(l.outputs*l.batch, l.delta_gpu, 1, net.delta_gpu, 1);
62 }
63 #endif
ACTIVATION activation
Definition: darknet.h:121
ACTIVATION
Definition: darknet.h:56
void(* forward_gpu)(struct layer, struct network)
Definition: darknet.h:126
void(* backward_gpu)(struct layer, struct network)
Definition: darknet.h:127
void(* forward)(struct layer, struct network)
Definition: darknet.h:123
void gradient_array(const float *x, const int n, const ACTIVATION a, float *delta)
Definition: activations.c:143
float * delta
Definition: darknet.h:486
void backward_activation_layer(layer l, network net)
Definition: darknet.h:79
float * delta
Definition: darknet.h:245
int inputs
Definition: darknet.h:134
void(* backward)(struct layer, struct network)
Definition: darknet.h:124
layer make_activation_layer(int batch, int inputs, ACTIVATION activation)
int batch
Definition: darknet.h:131
float * output
Definition: darknet.h:246
void copy_gpu(int N, float *X, int INCX, float *Y, int INCY)
void activate_array(float *x, const int n, const ACTIVATION a)
Definition: activations.c:100
void copy_cpu(int N, float *X, int INCX, float *Y, int INCY)
Definition: blas.c:226
void forward_activation_layer(layer l, network net)
LAYER_TYPE type
Definition: darknet.h:120
float * input
Definition: darknet.h:484
void activate_array_gpu(float *x, int n, ACTIVATION a)
int outputs
Definition: darknet.h:135
void gradient_array_gpu(float *x, int n, ACTIVATION a, float *delta)
Definition: darknet.h:119