Beispiel #1
0
        public static Tensor Forward(Tensor A, AxisZero dim, int copies, int copies2 = 0)
        {
            Matrix m = null;

            if (dim == AxisZero.horizontal)
            {
                m = Matrix.Zeros(A.Data.X, copies);
                Matrix.MatrixLoop((i, j) =>
                {
                    m[i, j] = A.Data[i, 0];
                }, A.Data.X, copies);
            }
            else if (dim == AxisZero.vertical)
            {
                m = Matrix.Zeros(copies, A.Data.Y);
                Matrix.MatrixLoop((i, j) =>
                {
                    m[i, j] = A.Data[0, j];
                }, copies, A.Data.Y);
            }
            else if (dim == AxisZero.none)
            {
                m = Matrix.Zeros(copies, copies2);
                Matrix.MatrixLoop((i, j) =>
                {
                    m[i, j] = A.Data[0, 0];
                }, copies, copies2);
            }

            if (A.AutoGrad)
            {
                var Creators = new List <Tensor>()
                {
                    A
                };
                var Argument = new List <object>()
                {
                    dim
                };
                return(new Tensor(m,
                                  autoGrad: true,
                                  creators: Creators,
                                  arguments: Argument,
                                  backwardCallback: Backward
                                  ));
            }

            return(new Tensor(m));
        }
        //Sumatory
        public static Matrix Sumatory(Matrix m, AxisZero dimension = AxisZero.none)
        {
            double[,] output;
            if (dimension == AxisZero.none)
            {
                output = new double[1, 1];
            }
            else if (dimension == AxisZero.horizontal)
            {
                output = new double[m.X, 1];
            }
            else if (dimension == AxisZero.vertical)
            {
                output = new double[1, m.Y];
            }
            else
            {
                throw new ArgumentException("The dimension must be -1, 0 or 1");
            }

            if (dimension == AxisZero.none)
            {
                MatrixLoop((i, j) =>
                {
                    output[0, 0] += m.GetValue(i, j);
                }, m.X, m.Y);
            }
            else if (dimension == AxisZero.horizontal)
            {
                MatrixLoop((i, j) =>
                {
                    output[i, 0] += m.GetValue(i, j);
                }, m.X, m.Y);
            }
            else if (dimension == AxisZero.vertical)
            {
                MatrixLoop((i, j) =>
                {
                    output[0, j] += m.GetValue(i, j);
                }, m.X, m.Y);
            }
            return(output);
        }
Beispiel #3
0
        public static Tensor Forward(Tensor A, AxisZero dim)
        {
            if (A.AutoGrad)
            {
                var Argument = new List <object>()
                {
                    dim, new int[] { A.Data.X, A.Data.Y }
                };
                var Creators = new List <Tensor>()
                {
                    A
                };
                return(new Tensor(A.Data.Sumatory(dim),
                                  autoGrad: true,
                                  creators: Creators,
                                  arguments: Argument,
                                  backwardCallback: Backward));
            }

            return(new Tensor(A.Data.Sumatory(dim)));
        }
 public Matrix Sumatory(AxisZero dimension = AxisZero.none)
 {
     return(Sumatory(this, dimension));
 }
Beispiel #5
0
 public static Tensor Sum(this Tensor A, AxisZero dim)
 {
     return(Summation.Forward(A, dim));
 }
Beispiel #6
0
 public static Tensor Exp(this Tensor A, AxisZero dim, int copies, int copies2 = 0)
 {
     return(Expand.Forward(A, dim, copies, copies2));
 }