diff --git a/Cargo.toml b/Cargo.toml index 27f53bdf..a8ecfdf4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ flate2 = { version = "1.0", features = ["cloudflare_zlib"], default-features = f shellwords = "1.1.0" blas = "0.22" intel-mkl-src = {version= "0.7.0", default-features = false, features=["download", "mkl-static-lp64-seq"]} - +libm = "0.2.6" [build-dependencies] cbindgen = "0.23.0" diff --git a/src/block_sigmoid.rs b/src/block_sigmoid.rs index 0f91492e..d3beb683 100644 --- a/src/block_sigmoid.rs +++ b/src/block_sigmoid.rs @@ -82,15 +82,15 @@ impl BlockTrait for BlockSigmoid // for now doing the actual slow sigmoid computation. once we establish a baseline, // we can replace with a fast approximation or a lookup table - if x < 0 { - let epx = f32::pow(e, x); - let s = epx / (1 + epx); + if x < 0. { + let epx = f32::powf(e, x); + let s = epx / (1.0 + epx); *pb.tape.get_unchecked_mut(self.output_offset + i) = s; - *pb.tape.get_unchecked_mut(self.input_offset + i) = s * (1 - s); + *pb.tape.get_unchecked_mut(self.input_offset + i) = s * (1.0 - s); } else { - let s = 1 / (1 + f32::pow(e, -x)); + let s = 1.0 / (1.0 + f32::powf(e, -x)); *pb.tape.get_unchecked_mut(self.output_offset + i) = s; - *pb.tape.get_unchecked_mut(self.input_offset + i) = s * (1 - s); + *pb.tape.get_unchecked_mut(self.input_offset + i) = s * (1.0 - s); } } @@ -116,7 +116,7 @@ impl BlockTrait for BlockSigmoid unsafe { for i in 0..self.num_inputs as usize { let x = *pb.tape.get_unchecked_mut(self.input_offset + i); - *pb.tape.get_unchecked_mut(self.output_offset + i) = 1 / (1 + f32::pow(e, -x)); + *pb.tape.get_unchecked_mut(self.output_offset + i) = 1.0 / (1.0 + f32::powf(e, -x)); } block_helpers::forward(further_blocks, fb, pb); } // unsafe end diff --git a/src/block_tanh.rs b/src/block_tanh.rs index 5efb4f3a..798a408c 100644 --- a/src/block_tanh.rs +++ b/src/block_tanh.rs @@ -90,7 +90,7 @@ impl BlockTrait for BlockTanh // we can try to replace with a lookup table let t = tanhf(x); *pb.tape.get_unchecked_mut(self.output_offset + i) = t; - *pb.tape.get_unchecked_mut(self.input_offset + i) = 1 - t*t; // derivative + *pb.tape.get_unchecked_mut(self.input_offset + i) = 1. - t*t; // derivative } block_helpers::forward_backward(further_blocks, fb, pb, update); diff --git a/src/lib.rs b/src/lib.rs index d69bf3f0..ec878cf0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,6 +22,9 @@ mod port_buffer; mod block_neural; mod block_misc; mod block_relu; +mod block_leaky_relu; +mod block_tanh; +mod block_sigmoid; mod block_normalize; mod graph; diff --git a/src/regressor.rs b/src/regressor.rs index 0c995807..45b66405 100644 --- a/src/regressor.rs +++ b/src/regressor.rs @@ -223,7 +223,7 @@ impl Regressor { println!("Tanh layer"); }, NNActivation::Sigmoid => { - output = block_tanh::new_sigmoid_block(&mut bg, &mi, output).unwrap(); + output = block_sigmoid::new_sigmoid_block(&mut bg, &mi, output).unwrap(); println!("Sigmoid layer"); } }