コード例 #1
0
    public static double[] TrainRBFodel(MachineLearningController controller, TestCaseParameters param, List <double> outputToTest = null, int outputSize = 0)
    {
        MachineLearningTestCase.lastTestCaseParameters = param;
        if (param.neuronsPerLayer[0] < 3)
        {
            controller.InstantiateSpheresInScene(param.X, param.sampleSize, null);
        }

        int           eachOutputSize  = param.neuronsPerLayer[param.neuronsPerLayer.Count - 1];
        List <double> outputTest      = (outputToTest == null || outputToTest.Count == 0) ? param.X : outputToTest;
        int           outputTotalSize = (outputToTest == null || outputToTest.Count == 0) ? param.sampleSize * eachOutputSize: outputSize;

        IntPtr rawResut;

        rawResut = CppImporter.trainRBFModel(
            param.X.ToArray(),
            param.sampleSize,
            param.neuronsPerLayer[0],
            param.Y.ToArray(),
            param.nbCentroids,
            param.nbClasses,
            param.maxKmeans,
            outputTest.ToArray(),
            param.Y.ToArray(),
            param.gamma,
            outputTotalSize);


        double[] result = new double[outputTotalSize];
        Marshal.Copy(rawResut, result, 0, outputTotalSize);

        Debug.Log("Result rbf ");

        return(result);
    }
コード例 #2
0
    public static double[] ComputeAndSaveCentroids(List <double> X, int nbImages, int nbPixelInImage, int nbCentroid, int maxKmeans)
    {
        IntPtr rawResut;

        rawResut = CppImporter.trainRBFModelGetCentroids(X.ToArray(), nbImages, nbPixelInImage, nbCentroid, maxKmeans);

        double[] result = new double[nbCentroid * nbPixelInImage];
        Marshal.Copy(rawResut, result, 0, nbCentroid * nbPixelInImage);

        return(result);
    }
コード例 #3
0
    public static void ComputeAndSaveWeights(List <double> images, int nbPixelInImage,
                                             int nbImages, List <double> output, int nbCentroid, int nbClasses, int maxKmeans, float gamma, List <double> centroids)
    {
        IntPtr rawResut;

        rawResut = CppImporter.trainRbfModelGetWeights(
            images.ToArray(),
            nbImages,
            nbPixelInImage,
            output.ToArray(),
            nbCentroid,
            nbClasses,
            maxKmeans,
            gamma,
            centroids.ToArray());

//        double[] nbWeigths = new double[1];
//        Marshal.Copy(rawResut, nbWeigths, 0, 1);
//
//        Debug.Log("Size " + nbWeigths[0]);
    }
コード例 #4
0
    public static double[] RunMachineLearningTestCase(bool useLinearModel, TestCaseParameters param, int epochs,
                                                      double learningRate, TestCaseParameters simulateTestCaseParameters, AlgoUsed algoUsed,
                                                      List <double> outputToTest = null, int outputSize = 0)
    {
        lastTestCaseParameters = simulateTestCaseParameters ?? param;

        if (simulateTestCaseParameters == null)
        {
            Debug.Log("Generate new test case");
        }

        if (lastTestCaseParameters == null)
        {
            return(null);
        }

        if (param.neuronsPerLayer[0] < 3)
        {
            mlcInstance.InstantiateSpheresInScene(lastTestCaseParameters.X, lastTestCaseParameters.sampleSize, null);
        }

        List <double> outputTest      = outputToTest == null ? param.X : outputToTest;
        int           outputTotalSize = outputToTest == null ? lastTestCaseParameters.sampleSize * lastTestCaseParameters.neuronsPerLayer[lastTestCaseParameters.nplSize - 1] : outputSize;

        double[] result = new double[outputTotalSize];

        IntPtr rawResut;

        if (useLinearModel)
        {
            rawResut = CppImporter.trainLinearModel(
                lastTestCaseParameters.X.ToArray(),
                lastTestCaseParameters.neuronsPerLayer[0],
                lastTestCaseParameters.Y.ToArray(),
                lastTestCaseParameters.neuronsPerLayer[lastTestCaseParameters.nplSize - 1],
                lastTestCaseParameters.sampleSize,
                epochs,
                learningRate,
                lastTestCaseParameters.isClassification
                );
        }
        else
        {
            rawResut = CppImporter.trainMLPModel(
                lastTestCaseParameters.neuronsPerLayer.ToArray(),
                lastTestCaseParameters.nplSize,
                lastTestCaseParameters.X.ToArray(),
                lastTestCaseParameters.Y.ToArray(),
                lastTestCaseParameters.sampleSize,
                epochs,
                learningRate,
                lastTestCaseParameters.isClassification,
                outputTest.ToArray(),
                outputTotalSize
                );
        }
        Marshal.Copy(rawResut, result, 0, outputTotalSize);

        Debug.Log("Result MLP or Linear");
        return(result);
    }