maidenx_tensor 0.1.0

maidenx tensor
Documentation
mod binary;
mod matmul;
mod reduction;
mod transform;
mod unary;

mod total {
    use maidenx_core::error::Result;
    use maidenx_tensor::Tensor;

    #[test]
    fn test1() -> Result<()> {
        let mut x = Tensor::new(vec![2.0])?;
        let mut y = Tensor::new(vec![3.0])?;
        x.with_grad()?;
        y.with_grad()?;

        let mut matrix1 = Tensor::new(vec![vec![1.0, 2.0], vec![3.0, 4.0]])?;
        let mut matrix2 = Tensor::new(vec![vec![0.5, 0.5], vec![0.5, 0.5]])?;
        matrix1.with_grad()?;
        matrix2.with_grad()?;

        let z1 = x.mul(&y)?;
        let z2 = x.sub(&y)?;
        let z3 = x.add(&y)?;
        let z4 = x.pow(2)?.add(&y.pow(3)?)?;

        let sr = z1.add(&z2)?.add(&z3)?.add(&z4)?;
        let mr = matrix1.matmul(&matrix2)?.sum_all()?;

        let result = sr.add(&mr)?;
        result.backward()?;

        assert_eq!(result.to_flatten_vec::<f32>()?, vec![51.0]);

        if let Some(g) = x.grad()? {
            assert_eq!(g.to_flatten_vec::<f32>()?, vec![9.0]);
        }
        if let Some(g) = y.grad()? {
            assert_eq!(g.to_flatten_vec::<f32>()?, vec![29.0]);
        }

        Ok(())
    }
}