esp_idf_unda/network/serialize/
ser_layer.rs1use crate::network::{layer::{layers::Layer, dense::Dense}, input::Input, activations::Activations};
2
3pub struct SerializedLayer {
4 pub name: char,
5 pub rows: usize,
6 pub cols: usize,
7 pub weights: String,
8 pub bias: String
9}
10
11impl SerializedLayer {
12 pub fn from(&self, activation: Activations) -> Box<dyn Layer> {
13 match self.name {
14 'D' => {
15 let weights_f32: Vec<f32> = self.weights.split(" ").into_iter().map(|val| val.parse().unwrap()).collect();
16 let bias_f32: Vec<f32> = self.bias.split(" ").into_iter().map(|val| val.parse().unwrap()).collect();
17 let dense_layer: Dense = Dense::new_ser(self.rows, self.cols, weights_f32, bias_f32, activation);
18 return Box::new(dense_layer)
19 },
20 _ => panic!("Not a supported type"),
21 };
22 }
23 fn flatten_string(data: &Vec<Vec<f32>>) -> String {
24 data.to_param()
25 .into_iter()
26 .map(|d| d.to_string() + " ")
27 .collect::<String>().trim_end().to_string()
28 }
29 pub fn to_string(&self) -> String {
30 format!("{}|{}|{}|{}|{}", self.name, self.rows, self.cols, self.weights, self.bias)
31 }
32 pub fn from_string(data: String) -> Self {
33 let mut parse_res = data.split("|");
34 let name: char = parse_res.next().unwrap().chars().next().unwrap();
35 let rows: usize = str::parse(parse_res.next().unwrap()).unwrap();
36 let cols: usize = str::parse(parse_res.next().unwrap()).unwrap();
37 let weights = parse_res.next().unwrap().to_string();
38 let bias = parse_res.next().unwrap().to_string();
39
40 Self { name, rows, cols, weights, bias }
41 }
42}
43