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); }
// 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); }
// 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(); }