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