void RegressionPredict(IntPtr model) { Debug.Log("Predict Model"); foreach (var testSpheresTransform in testSpheresTransforms) { double [] inputs = new double[2]; inputs[0] = testSpheresTransform.position.x; inputs[1] = testSpheresTransform.position.z; double result = VisualStudioLibWrapper.linear_model_predict_regression(model, inputs, inputs.Length); testSpheresTransform.position = new Vector3( testSpheresTransform.position.x, (float)result, testSpheresTransform.position.z ); Debug.Log("Result Predict Model = " + result); } //double[] inputs = input_array.ToArray(); // Debug.Log("Taille tableau d'inputs " + inputs.Length); //double result = VisualStudioLibWrapper.linear_model_predict_regression(model, inputs, inputs.Length); //Debug.Log("Result Predict Model = " + result); }
IntPtr CreateModel(int size) { Debug.Log("Create Model"); var modelPtr = VisualStudioLibWrapper.linear_model_create(size); /*double[] model = new double[size+1]; * Marshal.Copy(modelPtr, model, 0, size + 1); * Debug.Log(model[size]);*/ return(modelPtr); }
// Start is called before the first frame update void Start() { Debug.Log("With CLion DLL : "); Debug.Log(CLionLibWrapper.my_add(42, 51)); Debug.Log(CLionLibWrapper.my_mul(2, 3)); Debug.Log(CLionLibWrapper.my_test(10, 100, 100)); Debug.Log("With Visual Studio DLL : "); Debug.Log(VisualStudioLibWrapper.my_add(42, 51)); Debug.Log(VisualStudioLibWrapper.my_mul(2, 3)); }
public unsafe void TrainAndTest() { Debug.Log("Training and Testing"); var Y = new double[trainSpheresTransforms.Length]; IntPtr model; var linear_inputs = new double[trainSpheresTransforms.Length * 2]; for (int i = 0; i < trainSpheresTransforms.Length; i++) { var position = new Vector3(); if (transfo != -1) { position = AppliTransfo(trainSpheresTransforms[i].position); } else { position = trainSpheresTransforms[i].position; } Y[i] = position.y; linear_inputs[i * 2] = position.x; linear_inputs[(i * 2) + 1] = position.z; } // Create Model model = VisualStudioLibWrapper.linear_model_create(2); // Train Model VisualStudioLibWrapper.linear_model_train_regression(model, linear_inputs, trainSpheresTransforms.Length, 2, Y, Y.Length, 1000000, 0.01f); // For each testSphere : Predict foreach (var testSpheres in testSpheresTransforms) { var position = new Vector3(); if (transfo != -1) { position = AppliTransfo(testSpheres.position); } else { position = testSpheres.position; } double[] input = { position.x, position.z }; float y = (float)VisualStudioLibWrapper.linear_model_predict_regression(model, input, 2); testSpheres.position = new Vector3( position.x, y, position.z ); } }
public unsafe void TrainAndTest() { Debug.Log("Training and Testing"); int count = 0; int blue_count = 0; int red_count = 0; // Créer dataset_inputs // Créer dataest_expected_outputs var Y = new double[trainSpheresTransforms.Length]; IntPtr model; var linear_inputs = new double[trainSpheresTransforms.Length * 2]; for (int i = 0; i < trainSpheresTransforms.Length; i++) { Y[i] = trainSpheresTransforms[i].position.y > 0 ? 1 : -1; linear_inputs[i * 2] = trainSpheresTransforms[i].position.x; linear_inputs[(i * 2) + 1] = trainSpheresTransforms[i].position.z; } var matrix_inputs = RBFEntriesD(0.5, Y); // Create Model model = VisualStudioLibWrapper.linear_model_create(trainSpheresTransforms.Length); // Train Model VisualStudioLibWrapper.linear_model_train_classification(model, matrix_inputs, trainSpheresTransforms.Length, 2, Y, Y.Length, 1000000, 0.01f); //double* model = {-0.4, 0.4, 0.2}; //double[] model = new double [] {-0.4, 0.4, 0.2}; // For each testSphere : Predict foreach (var testSpheres in testSpheresTransforms) { double[] input = { testSpheres.position.x, testSpheres.position.z }; //double y = (float)(-model[1] / model[2] * testSpheresTransform.position.x - model[0] / model[2]); float y = (float)VisualStudioLibWrapper.linear_model_predict_classification(model, input, 2); testSpheres.position = new Vector3( testSpheres.position.x, y, testSpheres.position.z ); } // Delete Model //VisualStudioLibWrapper.clearArray(model); }
void RegressionTrain(IntPtr model) { Debug.Log("Train Model"); List <double> inputs = new List <double>(); List <double> expecteds = new List <double>(); foreach (var trainSpheresTransform in trainSpheresTransforms) { inputs.Add(trainSpheresTransform.position.x); inputs.Add(trainSpheresTransform.position.z); expecteds.Add(trainSpheresTransform.position.y); } VisualStudioLibWrapper.linear_model_train_regression(model, inputs.ToArray(), inputs.Count() / 2, 2, expecteds.ToArray()); }
void ClassificationTrainForXOR(IntPtr model) { Debug.Log("Train Model"); List <double> inputs = new List <double>(); List <double> expecteds = new List <double>(); foreach (var trainSpheresTransform in trainSpheresTransforms) { inputs.Add(trainSpheresTransform.position.x * trainSpheresTransform.position.z); inputs.Add(trainSpheresTransform.position.z * trainSpheresTransform.position.x); expecteds.Add(trainSpheresTransform.position.y >= 0 ? 1.0 : -1.0); } VisualStudioLibWrapper.linear_model_train_classification(model, inputs.ToArray(), inputs.Count() / 2, 2, expecteds.ToArray(), iterationCount, alpha); }
void ClassificationPredict(IntPtr model) { Debug.Log("Predict Model"); foreach (var testSpheresTransform in testSpheresTransforms) { double[] inputs = new double[2]; inputs[0] = testSpheresTransform.position.x; inputs[1] = testSpheresTransform.position.z; double result = VisualStudioLibWrapper.linear_model_predict_classification(model, inputs, inputs.Length); testSpheresTransform.position = new Vector3( testSpheresTransform.position.x, (float)result, testSpheresTransform.position.z ); Debug.Log("Result Predict Model = " + result); } }
public unsafe void RBFEntries() { double epsilon = 0.8; int count = 0; int blue_count = 0; int red_count = 0; // Créer dataset_inputs // Créer dataest_expected_outputs var Y = new double[trainSpheresTransforms.Length]; IntPtr model; var linear_inputs = new double[trainSpheresTransforms.Length * 2]; for (int i = 0; i < trainSpheresTransforms.Length; i++) { Y[i] = trainSpheresTransforms[i].position.y > 0 ? 1 : -1; linear_inputs[i * 2] = trainSpheresTransforms[i].position.x; linear_inputs[(i * 2) + 1] = trainSpheresTransforms[i].position.z; } var Ox = new double[trainSpheresTransforms.Length, trainSpheresTransforms.Length]; //var Oz = new double[trainSpheresTransforms.Length,trainSpheresTransforms.Length]; var multiY = new double[Y.Length, 1]; for (int i = 0; i < trainSpheresTransforms.Length; i++) { for (int j = 0; j < trainSpheresTransforms.Length; j++) { Ox[i, j] = getRBFValue(epsilon, trainSpheresTransforms[i].position, trainSpheresTransforms[j].position); //Oz[i,j] = getRBFValue(epsilon, trainSpheresTransforms[i].position.z, trainSpheresTransforms[j].position.z); } multiY[i, 0] = Y[i]; } var l = trainSpheresTransforms.Length; Matrix <double> OxMatrix = DenseMatrix.OfArray(Ox); for (int i = 0; i < l; i++) { string str = ""; for (int j = 0; j < l; j++) { // Debug.Log(i + " " + j + ": " + Ox[i, j]); str += OxMatrix[i, j] + "/ "; } Debug.Log(str); } //Matrix<double> OzMatrix = DenseMatrix.OfArray(Oz); //Matrix<double> YMatrix = DenseMatrix.OfArray(Y); // Debug.Log(OxMatrix.RowCount); // Debug.Log(OxMatrix.ColumnCount); Matrix <double> OxInv = OxMatrix.Inverse(); Matrix <double> mY = DenseMatrix.OfArray(multiY); Matrix <double> resMatrix = OxInv.Multiply(mY); Debug.Log("row = " + resMatrix.RowCount); Debug.Log("col = " + resMatrix.ColumnCount); var inputs = new double[resMatrix.RowCount]; for (int i = 0; i < resMatrix.RowCount; i++) { inputs[i] = resMatrix[i, 0]; } model = VisualStudioLibWrapper.linear_model_create(2); // Train Model VisualStudioLibWrapper.linear_model_train_classification(model, inputs, 3, 1, Y, 3, 100000, 0.01f); double *mdl = (double *)model.ToPointer(); for (int i = 0; i < 3; i++) { Debug.Log("model = " + mdl[i]); } var c1 = new Color(1, 2, 3); var c2 = new Color(3, 2, 1); foreach (var testSpheres in testSpheresTransforms) { double[] input = { testSpheres.position.x, testSpheres.position.z }; //double y = (float)(-model[1] / model[2] * testSpheresTransform.position.x - model[0] / model[2]); float y = (float)VisualStudioLibWrapper.linear_model_predict_classification(model, input, 2); // testSpheres.position = new Vector3( // testSpheres.position.x, // y, // testSpheres.position.z // );* testSpheres.GetComponent <MeshRenderer>().material.color = y >= 0 ? c1 : c2; } // IntPtr model = VisualStudioLibWrapper.linear_model_create(2); // VisualStudioLibWrapper.linear_model_train_classification(model, inputs, 3, 1, Y, 3, 100000, 0.01); }
public unsafe void TrainAndTest() { Debug.Log("Training and Testing"); var Y = new double[trainSpheresTransforms.Length]; var inputs = new double[trainSpheresTransforms.Length * 2]; for (int i = 0; i < trainSpheresTransforms.Length; i++) { /*if(trainSpheresTransforms[i].position.y == classSphere[2]) { * Y[i] = classSphere[2]; * } else if (trainSpheresTransforms[i].position.y == classSphere[1] ) { * Y[i] = classSphere[1]; * } else if (trainSpheresTransforms[i].position.y == classSphere[0] ) { * Y[i] = classSphere[0]; * }*/ Y[i] = trainSpheresTransforms[i].position.y >= 0 ? 1 : -1; inputs[i * 2] = trainSpheresTransforms[i].position.x; inputs[(i * 2) + 1] = trainSpheresTransforms[i].position.z; } //int[] npl = {2, 1}; IntPtr model = VisualStudioLibWrapper.create_mlp_model(npl, npl.Length); VisualStudioLibWrapper.mlp_model_train_classification(model, inputs, trainSpheresTransforms.Length, 2, Y, Y.Length, 1000000, 0.001f); // For each testSphere : Predict double max = -2; int idmax = 1; foreach (var testSpheres in testSpheresTransforms) { double[] input = { testSpheres.position.x, testSpheres.position.z }; IntPtr y = VisualStudioLibWrapper.mlp_model_predict_classification(model, input, false); /*double[] res = new double[npl[npl.Length - 1]]; * Marshal.Copy(res, 0, y, res.Length);*/ double *r = (double *)y.ToPointer(); // Debug.Log("size = " + npl[npl.Length - 1]); //Debug.Log(.GetLength(0)); max = r[1]; for (int i = 1; i < classSphere.Length + 1; i++) { //Debug.Log("r =" + r[i]); if (r[i] > max) { max = r[i]; idmax = i; } } if (classSphere.Length == 2) { testSpheres.position = new Vector3( testSpheres.position.x, (float)r[1], testSpheres.position.z ); } else { testSpheres.position = new Vector3( testSpheres.position.x, (float)classSphere[idmax - 1], testSpheres.position.z ); } } VisualStudioLibWrapper.clearArray(model); }
void Delete(IntPtr model) { Debug.Log("Delete Model"); VisualStudioLibWrapper.linear_model_delete(model); }