Skip to main content

tract_linalg/generic/
leaky_relu.rs

1#![allow(clippy::excessive_precision)]
2use tract_data::internal::*;
3use tract_num_traits::Zero;
4
5routine_ew_rust!(generic;
6    f32,
7    generic_leaky_relu_f32_4n,
8    4,
9    4,
10    fn run(x: &mut [f32], alpha: f32) {
11        debug_assert!(x.len() % Self::nr() == 0);
12        debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
13        x.iter_mut().for_each(|px| *px = if *px < 0. { *px * alpha } else { *px });
14    },
15    func(LeakyRelu),
16    param
17);
18
19routine_ew_rust!(generic;
20    f16,
21    generic_leaky_relu_f16_8n,
22    8,
23    8,
24    fn run(x: &mut [f16], alpha: f16) {
25        debug_assert!(x.len() % Self::nr() == 0);
26        debug_assert!(x.as_ptr() as usize % Self::alignment_bytes() == 0);
27        x.iter_mut().for_each(|px| *px = if *px < f16::zero() { *px * alpha } else { *px })
28    },
29    func(LeakyRelu),
30    param
31);