concision_core/nn/layer/
impl_layer_ext.rs1use crate::activate::Activator;
7use crate::nn::layer::LayerBase;
8use crate::nn::{RawLayer, RawLayerMut};
9use concision_params::RawParams;
10use concision_traits::Forward;
11
12impl<F, P, A, X, Y> Activator<X> for LayerBase<F, P>
13where
14 F: Activator<X, Output = Y>,
15 P: RawParams<Elem = A>,
16{
17 type Output = F::Output;
18
19 fn activate(&self, input: X) -> Self::Output {
20 self.rho().activate(input)
21 }
22}
23
24impl<F, P, A, X, Y, Z> Forward<X> for LayerBase<F, P>
25where
26 F: Activator<Y, Output = Z>,
27 P: RawParams<Elem = A> + Forward<X, Output = Y>,
28{
29 type Output = F::Output;
30
31 fn forward(&self, input: &X) -> Self::Output {
32 self.rho().activate(self.params().forward(input))
33 }
34}
35
36impl<F, P, A> RawLayer<F, A> for LayerBase<F, P>
37where
38 F: Activator<A>,
39 P: RawParams<Elem = A>,
40{
41 type Params<_T> = P;
42
43 fn rho(&self) -> &F {
44 &self.rho
45 }
46
47 fn params(&self) -> &P {
48 &self.params
49 }
50}
51impl<F, P, A> RawLayerMut<F, A> for LayerBase<F, P>
52where
53 F: Activator<A>,
54 P: RawParams<Elem = A>,
55{
56 fn params_mut(&mut self) -> &mut P {
57 &mut self.params
58 }
59}