use flashlight_tensor::prelude::*;
use rand::prelude::*;
use async_trait::async_trait;
pub trait ModelCpu{
fn forward(&mut self, input: Tensor<f32>) -> Tensor<f32>;
fn backward(&mut self, grad_output: Tensor<f32>);
}
#[async_trait]
pub trait ModelGpu{
async fn forward(&mut self, input: Tensor<f32>) -> Tensor<f32>;
async fn backward(&mut self, grad_output: Tensor<f32>);
fn clear_buffers(&mut self);
}
pub fn xavier_weights(input_neurons: u32, output_neurons: u32) -> f32{
(6.0/((input_neurons + output_neurons) as f32)).sqrt()
}