pub struct Layer {
pub weights_t: Matrix,
pub biases: Matrix,
pub relu: bool,
pub output: Matrix,
pub first_moment_weight: Option<Matrix>,
pub first_moment_biase: Option<Matrix>,
pub second_moment_weight: Option<Matrix>,
pub second_moment_biase: Option<Matrix>,
}Fields§
§weights_t: Matrix§biases: Matrix§relu: bool§output: Matrix§first_moment_weight: Option<Matrix>§first_moment_biase: Option<Matrix>§second_moment_weight: Option<Matrix>§second_moment_biase: Option<Matrix>Implementations§
Source§impl Layer
impl Layer
Sourcepub fn init(input_size: u32, size: u32, relu: bool) -> Layer
pub fn init(input_size: u32, size: u32, relu: bool) -> Layer
Examples found in repository?
examples/mnist.rs (line 45)
34pub fn training() {
35 println!("extracting mnist data...");
36 let labels: Matrix = extract_labels("train-labels.idx1-ubyte");
37 let mut images: Matrix = extract_images("train-images.idx3-ubyte");
38 println!("extraction done");
39
40 images.normalize();
41 println!("number of images {}", images.height);
42 println!("number of pixels in each image {}", images.width);
43
44 ModelBuilder::new()
45 .add_layer(Layer::init(28 * 28, 128, true))
46 .add_layer(Layer::init(128, 128, true))
47 .add_layer(Layer::init(128, 10, false))
48 .optimizer(Optimizer::Adam {
49 learning_step: 0.001,
50 beta1: 0.9,
51 beta2: 0.999,
52 })
53 .l2_reg(0.001)
54 .checkpoint(Checkpoint::ValAcc {
55 save_path: "mnist_128x128".to_string(),
56 })
57 .verbose(10, false)
58 .build_and_train(&images, &labels, 128, 10, 2000);
59}More examples
examples/spiral.rs (line 22)
6pub fn main() {
7 // generating the spiral dataset points
8 // 3000 points, spread into three classes (here a class = one spiral)
9 let (data, labels) = generate_spiral_dataset(3000, 3);
10
11 // Layer::init(number_of_inputs: u32, number_of_neurons_for_the_layer: u32, reLu: bool)
12 // if the last arg is true, applies ReLu as the activation function
13 // by default softmax is applied to the last layer
14
15 // One point of the spiral dataset consists of a X and a Y
16 // So the first layer has 2 inputs
17 // The last layer has 3 neurons because we have 3 classes, and therefore we want 3 outputs
18
19 // build and train
20 // (data: &matrix, labels: &matrix, batch_size: u32, number_of_epochs: u32, size_of_the_validation_dataset, usize)
21 let _ = ModelBuilder::new()
22 .add_layer(Layer::init(2, 10, true))
23 .add_layer(Layer::init(10, 10, true))
24 .add_layer(Layer::init(10, 3, false))
25 .optimizer(Optimizer::SGD {
26 learning_step: 0.001,
27 })
28 .l2_reg(0.0001)
29 .build_and_train(&data, &labels, 128, 10, 500);
30}pub fn init_with_data(weights_t: Matrix, biases: Matrix, relu: bool) -> Layer
pub fn init_test(size: u32, relu: bool, weights_t: Matrix) -> Layer
pub fn forward(&mut self, input: &Matrix, predict: bool) -> Matrix
pub fn backprop( &mut self, d_z: &Matrix, z_minus_1: &Matrix, previous_layer_relu: bool, lambda: f64, optimizer: &Optimizer, iteration: i32, is_input_layer: bool, debug: bool, debug_array_d_weights: &mut Option<Vec<Matrix>>, debug_array_d_biaises: &mut Option<Vec<Matrix>>, debug_array_d_outputs: &mut Option<Vec<Matrix>>, ) -> Matrix
pub fn update_weigths( &mut self, input: Matrix, optimizer: &Optimizer, iteration: i32, )
pub fn update_biases( &mut self, input: Matrix, optimizer: &Optimizer, iteration: i32, )
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Layer
impl RefUnwindSafe for Layer
impl Send for Layer
impl Sync for Layer
impl Unpin for Layer
impl UnwindSafe for Layer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more