| 2278 | } |
| 2279 | |
| 2280 | void silu_gradient ( |
| 2281 | tensor& grad, |
| 2282 | const tensor& src, |
| 2283 | const tensor& gradient_input |
| 2284 | ) |
| 2285 | { |
| 2286 | const auto g = grad.host(); |
| 2287 | const auto s = src.host(); |
| 2288 | const auto in = gradient_input.host(); |
| 2289 | if (is_same_object(grad, gradient_input)) |
| 2290 | { |
| 2291 | for (size_t i = 0; i < src.size(); ++i) |
| 2292 | { |
| 2293 | const auto sig_s = impl::sigmoid(s[i]); |
| 2294 | g[i] = in[i] * (sig_s * (1.0f + s[i] * (1.0f - sig_s))); |
| 2295 | } |
| 2296 | } |
| 2297 | else |
| 2298 | { |
| 2299 | for (size_t i = 0; i < src.size(); ++i) |
| 2300 | { |
| 2301 | const auto sig_s = impl::sigmoid(s[i]); |
| 2302 | g[i] += in[i] * (sig_s * (1.0f + s[i] * (1.0f - sig_s))); |
| 2303 | } |
| 2304 | } |
| 2305 | } |
| 2306 | |
| 2307 | // ---------------------------------------------------------------------------------------- |
| 2308 |
no test coverage detected