concision_core/ops/mask/
dropout.rs1pub trait DropOut {
3    type Output;
4
5    fn dropout(&self, p: f64) -> Self::Output;
6}
7
8#[cfg(feature = "init")]
9impl<A, S, D> DropOut for ndarray::ArrayBase<S, D>
10where
11    A: num_traits::Num + ndarray::ScalarOperand,
12    D: ndarray::Dimension,
13    S: ndarray::DataOwned<Elem = A>,
14{
15    type Output = ndarray::Array<A, D>;
16
17    fn dropout(&self, p: f64) -> Self::Output {
18        pub use crate::init::Initialize;
19        use ndarray::Array;
20        let dim = self.dim();
21        let mask: Array<bool, D> = Array::bernoulli(dim, p).expect("Failed to create mask");
23        let mask = mask.mapv(|x| if x { A::zero() } else { A::one() });
24
25        self.to_owned() * mask
27    }
28}