| 56 | } |
| 57 | |
| 58 | void softmax(float* input, int n, int stride, float* output) |
| 59 | { |
| 60 | int i; |
| 61 | float sum = 0; |
| 62 | float largest = input[0]; |
| 63 | for(i = 0; i < n; ++i) |
| 64 | { |
| 65 | if(input[i * stride] > largest) |
| 66 | largest = input[i * stride]; |
| 67 | } |
| 68 | for(i = 0; i < n; ++i) |
| 69 | { |
| 70 | float e = exp(input[i * stride] - largest); |
| 71 | sum += e; |
| 72 | output[i * stride] = e; |
| 73 | } |
| 74 | for(i = 0; i < n; ++i) |
| 75 | { |
| 76 | output[i * stride] /= sum; |
| 77 | } |
| 78 | } |
| 79 | |
| 80 | void softmax_cpu(float* input, int n, int batch, int batch_offset, int groups, int stride, float* output) |
| 81 | { |