示例#1
0
    void Start()
    {
        runtimeModel = ModelLoader.Load(model);
        worker       = WorkerFactory.CreateWorker(runtimeModel);

#if UNITY_EDITOR
        if (testImages.pixelValueArray.Length == 0)
        {
            testImages.LoadBytesFromPath();
        }
        if (testNetwork)
        {
            int    fails = 0;
            Tensor input = new Tensor(1, 0, 28 * 28, 1);
            for (int i = 0; i < testImages.imageCount; i++)
            {
                for (int j = 0; j < testImages.pixelValueArrayOffset; j++)
                {
                    input[0, 0, j, 0] =
                        testImages.pixelValueArray[i * testImages.pixelValueArrayOffset + j];
                }
                Tensor output       = worker.Execute(input).PeekOutput("Y");
                int    value        = GetResult(output);
                bool   correctGuess = value == testImages.labelValueArray[i];
                fails += correctGuess ? 0 : 1;
            }
            Debug.Log(fails + " fails of " + testImages.imageCount + " images");
            Debug.Log((1 - ((float)fails / testImages.imageCount)) * 100 + "% accuracy");
        }
#endif
        TestRandomImage(true);
    }
示例#2
0
    // 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();
    }
示例#3
0
    // 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);
    }
示例#4
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();
    }