darknet/src/softmax_layer.cl
2014-10-21 14:49:18 -07:00

22 lines
501 B
Common Lisp

__kernel void forward(int n, __global float *input, __global float *output)
{
int b = get_global_id(0);
int i;
float sum = 0;
float largest = -INFINITY;
for(i = 0; i < n; ++i){
int val = input[i+b*n];
largest = (val>largest) ? val : largest;
}
for(i = 0; i < n; ++i){
sum += exp(input[i+b*n]-largest);
}
sum = (sum != 0) ? largest+log(sum) : largest-100;
for(i = 0; i < n; ++i){
output[i+b*n] = exp(input[i+b*n]-sum);
}
}