teeny_core/nn/activation/
elu.rs1use core::marker::PhantomData;
18
19use crate::{
20 dtype::{EagerTensor, Float, Tensor},
21 nn::Layer,
22};
23
24pub struct Elu<D: Float, T, const RANK: usize> {
26 pub alpha: f64,
28 _pd: PhantomData<(D, T)>,
29}
30
31impl<D: Float, T, const RANK: usize> Elu<D, T, RANK> {
32 pub fn new(alpha: f64) -> Self {
34 Self {
35 alpha,
36 _pd: PhantomData,
37 }
38 }
39}
40
41impl<D: Float, T: Tensor<D, RANK> + EagerTensor, const RANK: usize> Layer<T> for Elu<D, T, RANK> {
42 type Output = T;
43 fn call(&self, _input: T) -> Self::Output {
44 todo!()
45 }
46}
47
48pub struct Selu<D: Float, T, const RANK: usize> {
50 _pd: PhantomData<(D, T)>,
51}
52
53impl<D: Float, T, const RANK: usize> Selu<D, T, RANK> {
54 pub fn new() -> Self {
56 Self { _pd: PhantomData }
57 }
58}
59
60impl<D: Float, T, const RANK: usize> Default for Selu<D, T, RANK> {
61 fn default() -> Self {
62 Self::new()
63 }
64}
65
66impl<D: Float, T: Tensor<D, RANK> + EagerTensor, const RANK: usize> Layer<T> for Selu<D, T, RANK> {
67 type Output = T;
68 fn call(&self, _input: T) -> Self::Output {
69 todo!()
70 }
71}
72
73pub struct Celu<D: Float, T, const RANK: usize> {
75 pub alpha: f64,
77 _pd: PhantomData<(D, T)>,
78}
79
80impl<D: Float, T, const RANK: usize> Celu<D, T, RANK> {
81 pub fn new(alpha: f64) -> Self {
83 Self {
84 alpha,
85 _pd: PhantomData,
86 }
87 }
88}
89
90impl<D: Float, T: Tensor<D, RANK> + EagerTensor, const RANK: usize> Layer<T> for Celu<D, T, RANK> {
91 type Output = T;
92 fn call(&self, _input: T) -> Self::Output {
93 todo!()
94 }
95}