// 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();
    }
Beispiel #2
0
    // 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);
    }
Beispiel #3
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();
    }