concision_neural/model/
layout.rs1#[doc(inline)]
2pub use self::features::ModelFeatures;
3
4mod features;
5
6pub trait ModelLayout: Copy + core::fmt::Debug {
7 fn input(&self) -> usize;
9 fn input_mut(&mut self) -> &mut usize;
11 fn hidden(&self) -> usize;
13 fn hidden_mut(&mut self) -> &mut usize;
15 fn layers(&self) -> usize;
17 fn layers_mut(&mut self) -> &mut usize;
19 fn output(&self) -> usize;
21 fn output_mut(&mut self) -> &mut usize;
23 #[inline]
24 fn set_input(&mut self, input: usize) -> &mut Self {
26 *self.input_mut() = input;
27 self
28 }
29 #[inline]
30 fn set_hidden(&mut self, hidden: usize) -> &mut Self {
32 *self.hidden_mut() = hidden;
33 self
34 }
35 #[inline]
36 fn set_layers(&mut self, layers: usize) -> &mut Self {
38 *self.layers_mut() = layers;
39 self
40 }
41 #[inline]
42 fn set_output(&mut self, output: usize) -> &mut Self {
44 *self.output_mut() = output;
45 self
46 }
47 fn dim_input(&self) -> (usize, usize) {
49 (self.input(), self.hidden())
50 }
51 fn dim_hidden(&self) -> (usize, usize) {
53 (self.hidden(), self.hidden())
54 }
55 fn dim_output(&self) -> (usize, usize) {
57 (self.hidden(), self.output())
58 }
59 fn size(&self) -> usize {
61 self.size_input() + self.size_hidden() + self.size_output()
62 }
63 fn size_input(&self) -> usize {
65 self.input() * self.hidden()
66 }
67 fn size_hidden(&self) -> usize {
69 self.hidden() * self.hidden() * self.layers()
70 }
71 fn size_output(&self) -> usize {
73 self.hidden() * self.output()
74 }
75}