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(); } }
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); }
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"); } } }
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); }