// Start is called before the first frame update
    void Start()
    {
        if (trainedNetwork == null || (trainedNetwork != null && !trainedNetwork.networkSet))
        {
            //load data
            trainingImages.LoadBytesFromPath();

            //Create training data array
            trainingData = new TrainingData[trainingImages.imageCount];
            uint pixelCount = trainingImages.pixelWidth * trainingImages.pixelHeight;

            for (int i = 0; i < trainingImages.imageCount; i++)
            {
                trainingData[i].input        = new float[11];           //input nodes
                trainingData[i].targetResult = new float[pixelCount];   //target nodes
                trainingData[i].input[10]    = RandomGaussian();        //Noise

                //Set data
                trainingData[i].input[trainingImages.labelValueArray[i]] = 1f;
                for (int j = 0; j < pixelCount; j++)
                {
                    trainingData[i].targetResult[j] = trainingImages.pixelValueArray[i * trainingImages.pixelValueArrayOffset + j];
                }
            }

            // (inputNodeCount, hiddenNodeCount, outputNodeCount)
            neuralNetwork = new NeuralNetwork_Matrix(
                trainingData[0].input.Length,
                (trainingData[0].input.Length + trainingData[0].targetResult.Length) / 2,
                trainingData[0].targetResult.Length);


            neuralNetwork.TrainNeuralNetwork(trainingData);


            if (trainedNetwork != null)
            {
                trainedNetwork.SetNetworkVariables(neuralNetwork);
            }
        }
        else
        {
            neuralNetwork = new NeuralNetwork_Matrix(trainedNetwork);
        }
        Texture2D tempTex = new Texture2D(28, 28);

        image.sprite = Sprite.Create(tempTex, new Rect(0, 0, 28, 28), Vector2.zero);
        CreateImange();
    }
    // Start is called before the first frame update
    void Start()
    {
        if (trainedNetwork == null || (trainedNetwork != null && !trainedNetwork.networkSet))
        {
            //load data
            trainingImages.LoadBytesFromPath();

            //Create training data array
            trainingData = new TrainingData[trainingImages.imageCount];
            uint pixelCount = trainingImages.pixelWidth * trainingImages.pixelHeight;

            for (int i = 0; i < trainingImages.imageCount; i++)
            {
                trainingData[i].input        = new float[pixelCount]; //input nodes
                trainingData[i].targetResult = new float[11];         //target nodes

                //Set data
                trainingData[i].targetResult[trainingImages.labelValueArray[i]] = 1f;
                trainingData[i].targetResult[10] = 1f;
                for (int j = 0; j < pixelCount; j++)
                {
                    trainingData[i].input[j] = trainingImages.pixelValueArray[i * trainingImages.pixelValueArrayOffset + j];
                }
            }

            // (inputNodeCount, hiddenNodeCount, outputNodeCount)
            discriminator = new NeuralNetwork_Matrix(
                trainingData[0].input.Length,
                (trainingData[0].input.Length + trainingData[0].targetResult.Length) / 2,
                trainingData[0].targetResult.Length);

            generator = new NeuralNetwork_Matrix(11, (11 + 28 * 28) / 2, 28 * 28);


            //if (trainedNetwork != null)
            //{
            //    trainedNetwork.SetNetworkVariables(discriminator);
            //}
        }
        //else
        //{
        //    discriminator = new NeuralNetwork_Matrix(trainedNetwork);
        //}

        testImages.LoadBytesFromPath();
        TrainNetwork(1);
    }
Exemple #3
0
    public void SetNetworkVariables(NeuralNetwork_Matrix neuralNetwork)
    {
        nodeCounts = new int[]
        {
            neuralNetwork.getInputNodeCount,
            neuralNetwork.getHiddenNodeCount,
            neuralNetwork.getOutputNodeCount,
        };

        weightsInputToHidden  = new FlatMatrix(neuralNetwork.getWeightsInputToHidden);
        weightsHiddenToOutput = new FlatMatrix(neuralNetwork.getWeightsHiddenToOutput);
        biasHidden            = neuralNetwork.getBiasHidden;
        biasOutput            = neuralNetwork.getBiasOutput;

        learningRate   = neuralNetwork.getLearningRate;
        activationFunc = neuralNetwork.getActivationFunction;

        networkSet = true;
    }
    // Start is called before the first frame update
    void Start()
    {
        TrainingData[] trainingData = new TrainingData[dataSet.Length];
        for (int i = 0; i < trainingData.Length; i++)
        {
            trainingData[i] = new TrainingData
            {
                input = new float[] {
                    dataSet[i].sepal_length,
                    dataSet[i].sepal_width,
                    dataSet[i].petal_length,
                    dataSet[i].sepal_width
                },
                targetResult = dataSet[i].species,
            };
        }

        //Normalize(trainingData);

        NeuralNetwork_Matrix neuralNetwork = new NeuralNetwork_Matrix(
            trainingData[0].input.Length, 7, trainingData[0].targetResult.Length);

        neuralNetwork.TrainNeuralNetwork(trainingData, 10_000, true);

        int itterations = 100;
        int fails       = 0;

        for (int i = 0; i < itterations; i++)
        {
            int     random = Random.Range(0, trainingData.Length);
            float[] result = neuralNetwork.Guess(trainingData[random].input);

            Debug.Log($"{result[0]} {result[1]} {result[2]} |||| {trainingData[random].targetResult[0]} {trainingData[random].targetResult[1]} {trainingData[random].targetResult[2]}");

            if (!IsResultCorrect(result, trainingData[random].targetResult))
            {
                fails++;
            }
        }
        Debug.Log((1 - (float)fails / (float)itterations) * 100 + " % accurate");
    }
    // Start is called before the first frame update
    void Start()
    {
        if (trainedNetworkA.networkSet)
        {
            neuralNetwork = new NeuralNetwork_Matrix(trainedNetworkA);
        }
        else
        {
            neuralNetwork = new NeuralNetwork_Matrix(2, 4, 1);

            neuralNetwork.TrainNeuralNetwork(trainingData, 100_000, true);


            trainedNetworkA.SetNetworkVariables(neuralNetwork);

            neuralNetwork = new NeuralNetwork_Matrix(trainedNetworkA);

            trainedNetworkB.SetNetworkVariables(neuralNetwork);
        }
        TestNeuralNetwork(10_000);
    }
Exemple #6
0
    // Start is called before the first frame update
    void Start()
    {
        guessText.text = "A";
        if (trainedNetwork == null || (trainedNetwork != null && !trainedNetwork.networkSet))
        {
            trainingImages.LoadBytesFromPath();
            guessText.text = "B";
            //Create training data array
            trainingData = new TrainingData[trainingImages.imageCount + NOISE_TRAINING_AMOUNT];
            uint pixelCount = trainingImages.pixelWidth * trainingImages.pixelHeight;

            guessText.text = "C";
            for (int i = 0; i < trainingImages.imageCount; i++)
            {
                trainingData[i].input        = new float[pixelCount]; //input nodes
                trainingData[i].targetResult = new float[11];         //target nodes

                //Set data
                trainingData[i].targetResult[trainingImages.labelValueArray[i]] = 1f;
                for (int j = 0; j < pixelCount; j++)
                {
                    trainingData[i].input[j] = trainingImages.pixelValueArray[i * trainingImages.pixelValueArrayOffset + j];
                }
            }

            for (int i = 0; i < NOISE_TRAINING_AMOUNT; i++)
            {
                trainingData[trainingImages.imageCount + i].input            = new float[pixelCount]; //input nodes
                trainingData[trainingImages.imageCount + i].targetResult     = new float[11];         //target nodes
                trainingData[trainingImages.imageCount + i].targetResult[10] = 1f;

                for (int j = 0; j < pixelCount; j++)
                {
                    trainingData[trainingImages.imageCount + i].input[j] = Random.Range(0f, 1f);
                }
            }



            guessText.text = "D";
            // (inputNodeCount, hiddenNodeCount, outputNodeCount)
            neuralNetwork = new NeuralNetwork_Matrix(
                trainingData[0].input.Length,
                (trainingData[0].input.Length + trainingData[0].targetResult.Length) / 2,
                trainingData[0].targetResult.Length);


            guessText.text = "E";
            neuralNetwork.TrainNeuralNetwork(trainingData, 70000, true);


            guessText.text = "F";
            if (trainedNetwork != null)
            {
                trainedNetwork.SetNetworkVariables(neuralNetwork);
            }

            guessText.text = "G";
        }
        else
        {
            neuralNetwork = new NeuralNetwork_Matrix(trainedNetwork);
        }
        guessText.text = "H";
#if UNITY_EDITOR
        if (testImages.pixelValueArray.Length == 0)
        {
            testImages.LoadBytesFromPath();
        }
#endif
        if (testNetwork)
        {
            TestNeuralNetwork();
        }
        guessText.text = "I";
        TestRandomImage();
    }