Compute the softmax of an input vector `x` of length `size` and store it in `o`.
| 470 | |
| 471 | // Compute the softmax of an input vector `x` of length `size` and store it in `o`. |
| 472 | static void softmax(float* o, float* x, int size) { |
| 473 | float score_max = -FLT_MAX; |
| 474 | for (int i = 0; i < size; ++i) { |
| 475 | if (x[i] > score_max) { |
| 476 | score_max = x[i]; |
| 477 | } |
| 478 | } |
| 479 | float score_sum = 0.0f; |
| 480 | for (int i = 0; i < size; ++i) { |
| 481 | o[i] = expf(x[i] - score_max); |
| 482 | score_sum += o[i]; |
| 483 | } |
| 484 | for (int i = 0; i < size; ++i) { |
| 485 | o[i] /= score_sum; |
| 486 | } |
| 487 | } |
| 488 | |
| 489 | inline float sigmoid(float x) { |
| 490 | return 1.0f / (1.0f + expf(-x)); |