public void ResolveClassificationMLP() { object myModel = MyFirstDLLWrapper.mlp_create_model(3, new int[] { 2, 3, 1 }); double[][] inputs = new double[blueSamples.Count + redSamples.Count][]; double[] outputs = new double[blueSamples.Count + redSamples.Count]; int i = 0; foreach (var blue in blueSamples) { inputs[i] = new double[2]; inputs[i][0] = blue.transform.position.x / 10; inputs[i][1] = blue.transform.position.z / 10; outputs[i++] = 1; } foreach (var red in redSamples) { inputs[i] = new double[2]; inputs[i][0] = red.transform.position.x / 10; inputs[i][1] = red.transform.position.z / 10; outputs[i++] = -1; } MyFirstDLLWrapper.mlp_fit_classification_backdrop(myModel, inputs, outputs, 100000, 0.01); foreach (var white in whiteSamples) { Destroy(white); } whiteSamples.Clear(); for (int a = 1; a <= 10; a++) { for (int b = 1; b <= 10; b++) { var rslt = MyFirstDLLWrapper.mlp_classify(myModel, new double[] { a / 10f, b / 10f }); if (rslt[0] > 0) { whiteSamples.Add(Instantiate(bluePrefab, new Vector3(a, 0, b), Quaternion.identity)); } else { whiteSamples.Add(Instantiate(redPrefab, new Vector3(a, 0, b), Quaternion.identity)); } } } }
public void ResolveClassification() { double[,] inputs = new double[blueSamples.Count + redSamples.Count, 2]; double[] outputs = new double[blueSamples.Count + redSamples.Count]; int i = 0; foreach (var blue in blueSamples) { inputs[i, 0] = blue.transform.position.x; inputs[i, 1] = blue.transform.position.z; outputs[i++] = 1; } foreach (var red in redSamples) { inputs[i, 0] = red.transform.position.x; inputs[i, 1] = red.transform.position.z; outputs[i++] = -1; } MyFirstDLLWrapper.linear_fit_classification_rosenblatt(ref myModelClassification, inputs, outputs, 1000, 0.1); foreach (var white in whiteSamples) { Destroy(white); } whiteSamples.Clear(); for (int a = 1; a <= 10; a++) { for (int b = 1; b <= 10; b++) { var rslt = MyFirstDLLWrapper.linear_classify(ref myModelClassification, new double[] { a, b }); if (rslt > 0) { whiteSamples.Add(Instantiate(bluePrefab, new Vector3(a, 0, b), Quaternion.identity)); } else { whiteSamples.Add(Instantiate(redPrefab, new Vector3(a, 0, b), Quaternion.identity)); } } } }
public void GenerateCross() { foreach (var blue in blueSamples) { Destroy(blue); } foreach (var red in redSamples) { Destroy(red); } foreach (var plotPoint in plotSamples) { Destroy(plotPoint); } redSamples.Clear(); blueSamples.Clear(); plotSamples.Clear(); for (var i = 0; i < trainingSetLength; i++) { var xRdm = Random.Range(-10f, 10f); var zRdm = Random.Range(-10f, 10f); if (Mathf.Abs(xRdm) <= 2.5f || Mathf.Abs(zRdm) <= 2.5f) { blueSamples.Add( Instantiate(bluePrefab, new Vector3(xRdm, 0f, zRdm), Quaternion.identity)); } else { redSamples.Add( Instantiate(redPrefab, new Vector3(xRdm, 0f, zRdm), Quaternion.identity)); } } for (var x = -10; x <= 10; x++) { for (var z = -10; z <= 10; z++) { plotSamples.Add( Instantiate(plotPrefab, new Vector3(x, -2f, z), Quaternion.identity)); } } myModelClassification = MyFirstDLLWrapper.linear_create_model(2); }
public void ResolveRegressionMLP() { object myModel = MyFirstDLLWrapper.mlp_create_model(3, new int[] { 2, 20, 1 }); double[][] inputs = new double[blueSamples.Count + redSamples.Count][]; double[] outputs = new double[blueSamples.Count + redSamples.Count]; int i = 0; foreach (var blue in blueSamples) { inputs[i] = new double[2]; inputs[i][0] = blue.transform.position.x / 10; inputs[i][1] = blue.transform.position.z / 10; outputs[i++] = 0; } foreach (var red in redSamples) { inputs[i] = new double[2]; inputs[i][0] = red.transform.position.x / 10; inputs[i][1] = red.transform.position.z / 10; outputs[i++] = 1; } MyFirstDLLWrapper.mlp_fit_regression_backdrop(myModel, inputs, outputs, 10000, 0.1); foreach (var white in whiteSamples) { Destroy(white); } whiteSamples.Clear(); for (int a = 1; a <= 10; a++) { for (int b = 1; b <= 10; b++) { var rslt = MyFirstDLLWrapper.mlp_predict(myModel, new double[] { a / 10f, b / 10f }); var elt = Instantiate(whitePrefab, new Vector3(a, 0f, b), Quaternion.identity); elt.GetComponent <Renderer>().material.color = new Color((float)rslt[0], 0, 1 - (float)rslt[0]); whiteSamples.Add(elt); } } }
public void ResolveLinear() { double[] myModel = MyFirstDLLWrapper.linear_create_model(2); double[,] inputs = new double[blueSamples.Count + redSamples.Count, 2]; double[] outputs = new double[blueSamples.Count + redSamples.Count]; int i = 0; foreach (var blue in blueSamples) { inputs[i, 0] = blue.transform.position.x; inputs[i, 1] = blue.transform.position.z; outputs[i++] = 0; } foreach (var red in redSamples) { inputs[i, 0] = red.transform.position.x; inputs[i, 1] = red.transform.position.z; outputs[i++] = 1; } MyFirstDLLWrapper.linear_fit_regression(ref myModel, inputs, outputs); foreach (var white in whiteSamples) { Destroy(white); } whiteSamples.Clear(); for (int a = 1; a <= 10; a++) { for (int b = 1; b <= 10; b++) { var rslt = MyFirstDLLWrapper.linear_predict(ref myModel, new double[] { a, b }); var elt = Instantiate(whitePrefab, new Vector3(a, 0f, b), Quaternion.identity); elt.GetComponent <Renderer>().material.color = new Color((float)rslt, 0, 1 - (float)rslt); whiteSamples.Add(elt); } } }
// Use this for initialization void Start() { myModelClassification = MyFirstDLLWrapper.linear_create_model(2); }