darknet  v3
dropout_layer.c
Go to the documentation of this file.
1 #include "dropout_layer.h"
2 #include "utils.h"
3 #include "cuda.h"
4 #include <stdlib.h>
5 #include <stdio.h>
6 
7 dropout_layer make_dropout_layer(int batch, int inputs, float probability)
8 {
9  dropout_layer l = {0};
10  l.type = DROPOUT;
11  l.probability = probability;
12  l.inputs = inputs;
13  l.outputs = inputs;
14  l.batch = batch;
15  l.rand = calloc(inputs*batch, sizeof(float));
16  l.scale = 1./(1.-probability);
19  #ifdef GPU
22  l.rand_gpu = cuda_make_array(l.rand, inputs*batch);
23  #endif
24  fprintf(stderr, "dropout p = %.2f %4d -> %4d\n", probability, inputs, inputs);
25  return l;
26 }
27 
28 void resize_dropout_layer(dropout_layer *l, int inputs)
29 {
30  l->rand = realloc(l->rand, l->inputs*l->batch*sizeof(float));
31  #ifdef GPU
32  cuda_free(l->rand_gpu);
33 
34  l->rand_gpu = cuda_make_array(l->rand, inputs*l->batch);
35  #endif
36 }
37 
39 {
40  int i;
41  if (!net.train) return;
42  for(i = 0; i < l.batch * l.inputs; ++i){
43  float r = rand_uniform(0, 1);
44  l.rand[i] = r;
45  if(r < l.probability) net.input[i] = 0;
46  else net.input[i] *= l.scale;
47  }
48 }
49 
51 {
52  int i;
53  if(!net.delta) return;
54  for(i = 0; i < l.batch * l.inputs; ++i){
55  float r = l.rand[i];
56  if(r < l.probability) net.delta[i] = 0;
57  else net.delta[i] *= l.scale;
58  }
59 }
60 
float * rand
Definition: darknet.h:221
float scale
Definition: darknet.h:212
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
float * delta
Definition: darknet.h:486
void backward_dropout_layer(dropout_layer l, network net)
Definition: dropout_layer.c:50
int train
Definition: darknet.h:488
float probability
Definition: darknet.h:211
int inputs
Definition: darknet.h:134
void(* backward)(struct layer, struct network)
Definition: darknet.h:124
int batch
Definition: darknet.h:131
dropout_layer make_dropout_layer(int batch, int inputs, float probability)
Definition: dropout_layer.c:7
void forward_dropout_layer_gpu(dropout_layer layer, network net)
LAYER_TYPE type
Definition: darknet.h:120
float * input
Definition: darknet.h:484
void resize_dropout_layer(dropout_layer *l, int inputs)
Definition: dropout_layer.c:28
int outputs
Definition: darknet.h:135
void forward_dropout_layer(dropout_layer l, network net)
Definition: dropout_layer.c:38
float rand_uniform(float min, float max)
Definition: utils.c:698
void backward_dropout_layer_gpu(dropout_layer layer, network net)
Definition: darknet.h:119