| | |
| | | for(i = 0; i < N; ++i) Y[i*INCY] = X[i*INCX]; |
| | | } |
| | | |
| | | void smooth_l1_cpu(int n, float *pred, float *truth, float *delta) |
| | | void smooth_l1_cpu(int n, float *pred, float *truth, float *delta, float *error) |
| | | { |
| | | int i; |
| | | for(i = 0; i < n; ++i){ |
| | | float diff = truth[i] - pred[i]; |
| | | if(fabs(diff) > 1) delta[i] = diff; |
| | | else delta[i] = (diff > 0) ? 1 : -1; |
| | | float abs_val = fabs(diff); |
| | | if(abs_val < 1) { |
| | | error[i] = diff * diff; |
| | | delta[i] = diff; |
| | | } |
| | | else { |
| | | error[i] = 2*abs_val - 1; |
| | | delta[i] = (diff < 0) ? -1 : 1; |
| | | } |
| | | } |
| | | } |
| | | |
| | | void l2_cpu(int n, float *pred, float *truth, float *delta, float *error) |
| | | { |
| | | int i; |
| | | for(i = 0; i < n; ++i){ |
| | | float diff = truth[i] - pred[i]; |
| | | error[i] = diff * diff; |
| | | delta[i] = diff; |
| | | } |
| | | } |
| | | |