concision_neural/types/
features.rs1#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
7#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
8pub struct ModelFeatures {
9 pub(crate) input: usize,
11 pub(crate) hidden: usize,
13 pub(crate) layers: usize,
15 pub(crate) output: usize,
17}
18
19impl ModelFeatures {
20 pub fn new(input: usize, hidden: usize, layers: usize, output: usize) -> Self {
21 Self {
22 input,
23 hidden,
24 layers,
25 output,
26 }
27 }
28
29 gsw! {
30 input: usize,
31 hidden: usize,
32 layers: usize,
33 output: usize,
34 }
35 pub fn d_input(&self) -> (usize, usize) {
37 (self.input, self.hidden)
38 }
39 pub fn d_hidden(&self) -> (usize, usize) {
41 (self.hidden, self.hidden)
42 }
43 pub fn d_output(&self) -> (usize, usize) {
45 (self.hidden, self.output)
46 }
47 pub fn size(&self) -> usize {
49 self.input * self.hidden
50 + self.hidden * self.hidden * self.layers
51 + self.hidden * self.output
52 }
53 pub fn size_input(&self) -> usize {
55 self.input * self.hidden
56 }
57 pub fn size_hidden(&self) -> usize {
59 self.hidden * self.hidden * self.layers
60 }
61 pub fn size_output(&self) -> usize {
63 self.hidden * self.output
64 }
65}
66
67impl Default for ModelFeatures {
68 fn default() -> Self {
69 Self {
70 input: 16,
71 hidden: 64,
72 layers: 3,
73 output: 16,
74 }
75 }
76}
77
78impl core::fmt::Display for ModelFeatures {
79 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
80 write!(
81 f,
82 "ModelFeatures {{ input: {}, hidden: {}, layers: {}, output: {} }}",
83 self.input, self.hidden, self.layers, self.output
84 )
85 }
86}