public void AddDimension(double[] p)
        {
            double[] a = new double[1];

            for (int i = 0; i < schwerpunkte.Length; ++i)
            {
                a[0] = Math.Pow(MatrixMafs.ArrMinusArr(p, schwerpunkte[i]).Average(), 2);
                p    = p.Concat(a).ToArray();
            }
        }
        public static double[] GetVectorSchwerpunkt(double[][] p)
        {
            double[] x = new double[p[0].Length];

            for (int i = 0; i < p.Length; ++i)
            {
                x = MatrixMafs.ArrAddArr(x, p[i]);
            }

            return(MatrixMafs.ArrDivNum(x, p.Length));
        }
        public void AddDimension()
        {
            double[] schwerpunkt = GetVectorSchwerpunkt(points.ToArray());
            double[] a           = new double[1];

            for (int i = 0; i < points.Count; ++i)
            {
                a[0]      = Math.Pow(MatrixMafs.ArrMinusArr(points[i], schwerpunkt).Average(), 2);
                points[i] = points[i].Concat(a).ToArray();
            }
        }
Example #4
0
        public static Bitmap Convert2Bitmap(double[] arr0)
        {
            double[] arr = MatrixMafs.ArrMultNum(arr0, 255);
            Bitmap   bmp = new Bitmap(500, 500);

            for (int i = 0; i < 250000; ++i)
            {
                bmp.SetPixel(i % 500, (i - (i % 500)) / 500, Color.FromArgb(Convert.ToByte(arr[i * 3]), Convert.ToByte(arr[i * 3 + 1]), Convert.ToByte(arr[i * 3 + 2])));
            }

            return(bmp);
        }
        public static double[][] AddDimension(double[][] p)
        {
            double[] schwerpunkt = GetVectorSchwerpunkt(p);
            double[] a           = new double[1];

            for (int i = 0; i < p.Length; ++i)
            {
                a[0] = Math.Pow(MatrixMafs.ArrMinusArr(p[i], schwerpunkt).Average(), 2);
                p[i] = p[i].Concat(a).ToArray();
            }

            return(p);
        }
Example #6
0
        public void Train(int cycles, string animiePath, string echtBildPath)
        {
            string[] animieFiles   = Directory.GetFiles(animiePath);
            string[] echtBildFiles = Directory.GetFiles(echtBildPath);

            for (int i = 0; i < cycles; ++i)
            {
                TrainingsCycle(MatrixMafs.ArrDivNum(GetDoubleArr(File.ReadAllBytes(echtBildFiles[i % echtBildFiles.Length])), 255), MatrixMafs.ArrDivNum(GetDoubleArr(File.ReadAllBytes(animieFiles[i % animieFiles.Length])), 255));

                if ((i + 1) % savePer == 0)
                {
                    File.Create(outputPath + i + ".arr");
                    Convert2Bitmap(decoder.GetOutput()).Save(outputPath + i + ".arr");
                }
            }
        }
Example #7
0
        public void TrainDisciminator(int cycles, string animieFolder)
        {
            string[] files = Directory.GetFiles(animieFolder);

            for (int i = 0; i < cycles; ++i)
            {
                discriminator.SetInput(MatrixMafs.ArrDivNum(GetDoubleArr(File.ReadAllBytes(files[i % files.Length])), 255));
                discriminator.OutputBerechnen();
                discriminator.DeltawertBerechen(new double[] { 1 });
                discriminator.Backpropagation();

                discriminator.SetInput(SimpleNet.GetRandArr(750000, 0, 1));
                discriminator.OutputBerechnen();
                discriminator.DeltawertBerechen(new double[] { 0 });
                discriminator.Backpropagation();

                if (i % 1000 == 0)
                {
                    Console.WriteLine("Trainingscycle nr " + i);
                }
            }
        }
        public static double[] GaussisscherAlgorithmus(double[][] p)
        {
            double[][] x = p.Select(a => a.ToArray()).ToArray();
            double[]   y = new double[x.Length];

            Parallel.For(0, y.Length, i =>
            {
                y[i] = -x[i][0];
            });

            Parallel.For(0, y.Length, i0 =>
            {
                for (int i1 = 0; i1 < x[0].Length - 1; ++i1)
                {
                    x[i0][i1] = x[i0][i1 + 1];
                }
                x[i0][x[0].Length - 1] = 1;
            });

            for (int i = 0; i < x.Length; ++i)
            {
                if (x[i][i] == 0)
                {
                    bool weiter = true;
                    for (int j = 0; j < x.Length && weiter; ++j)
                    {
                        if (x[j][i] != 0)
                        {
                            SwitchPosInArr(x, j, i);
                        }
                    }
                }
            }

            for (int i0 = 0; i0 < x.Length; ++i0)
            {
                y[i0] /= x[i0][i0];
                x[i0]  = MatrixMafs.ArrDivNum(x[i0], x[i0][i0]);

                Parallel.For(0, x.Length, i1 =>
                {
                    if (i1 != i0)
                    {
                        y[i1] /= -x[i1][i0];
                        x[i1]  = MatrixMafs.ArrDivNum(x[i1], -x[i1][i0]);

                        x[i1]  = MatrixMafs.ArrAddArr(x[i1], x[i0]);
                        y[i1] += y[i0];
                    }
                });
            }


            Parallel.For(0, x.Length, i =>
            {
                y[i]   /= x[i][i];
                x[i][i] = 1;
            });

            return(y);
        }