2015-01-23 03:38:24 +03:00
|
|
|
extern "C" {
|
|
|
|
#include "dropout_layer.h"
|
|
|
|
#include "cuda.h"
|
|
|
|
#include "utils.h"
|
2015-03-12 08:20:15 +03:00
|
|
|
#include "params.h"
|
2015-01-23 03:38:24 +03:00
|
|
|
}
|
|
|
|
|
2015-03-12 08:20:15 +03:00
|
|
|
__global__ void yoloswag420blazeit360noscope(float *input, int size, float *rand, float prob, float scale)
|
2015-01-23 03:38:24 +03:00
|
|
|
{
|
|
|
|
int id = (blockIdx.x + blockIdx.y*gridDim.x) * blockDim.x + threadIdx.x;
|
2015-03-12 08:20:15 +03:00
|
|
|
if(id < size) input[id] = (rand[id] < prob) ? 0 : input[id]*scale;
|
2015-01-23 03:38:24 +03:00
|
|
|
}
|
|
|
|
|
2015-03-23 07:28:45 +03:00
|
|
|
void forward_dropout_layer_gpu(dropout_layer layer, network_state state)
|
2015-01-23 03:38:24 +03:00
|
|
|
{
|
2015-03-12 08:20:15 +03:00
|
|
|
if (!state.train) return;
|
2015-01-23 03:38:24 +03:00
|
|
|
int size = layer.inputs*layer.batch;
|
2015-03-21 22:25:14 +03:00
|
|
|
cuda_random(layer.rand_gpu, size);
|
2015-03-27 05:13:59 +03:00
|
|
|
int i;
|
|
|
|
for(i = 0; i < size; ++i){
|
|
|
|
layer.rand[i] = rand_uniform();
|
|
|
|
}
|
|
|
|
cuda_push_array(layer.rand_gpu, layer.rand, size);
|
2015-01-23 03:38:24 +03:00
|
|
|
|
2015-03-12 08:20:15 +03:00
|
|
|
yoloswag420blazeit360noscope<<<cuda_gridsize(size), BLOCK>>>(state.input, size, layer.rand_gpu, layer.probability, layer.scale);
|
2015-01-23 03:38:24 +03:00
|
|
|
check_error(cudaPeekAtLastError());
|
|
|
|
}
|
|
|
|
|
2015-03-23 07:28:45 +03:00
|
|
|
void backward_dropout_layer_gpu(dropout_layer layer, network_state state)
|
2015-01-23 03:38:24 +03:00
|
|
|
{
|
2015-03-12 08:20:15 +03:00
|
|
|
if(!state.delta) return;
|
2015-01-23 03:38:24 +03:00
|
|
|
int size = layer.inputs*layer.batch;
|
|
|
|
|
2015-03-12 08:20:15 +03:00
|
|
|
yoloswag420blazeit360noscope<<<cuda_gridsize(size), BLOCK>>>(state.delta, size, layer.rand_gpu, layer.probability, layer.scale);
|
2015-01-23 03:38:24 +03:00
|
|
|
check_error(cudaPeekAtLastError());
|
|
|
|
}
|