private async Task Validate() { //Console.WriteLine("Validating..."); bool shouldSave = false; WeightStore ws = new WeightStore() { Statistics = new double[32], WeightsHL0 = nnld[0].Weights, WeightsHL1 = nnld[1].Weights, WeightsHL2 = nnld[2].Weights, WeightsOL = nnld[3].Weights }; for (int i = 0; i < valdataSet.Count; i++) { double[] hiddenLayer1 = await neuralNetwork.PerceptronLayer(nnld[0].NumberOfNetworks, valdataSet[i].PublicAddressDouble, nnld[0].Weights, nnld[0].NumberOfInputs, nnld[0].Biases); double[] hiddenLayer2 = await neuralNetwork.PerceptronLayer(nnld[1].NumberOfNetworks, hiddenLayer1, nnld[1].Weights, nnld[1].NumberOfInputs, nnld[1].Biases); double[] hiddenLayer3 = await neuralNetwork.PerceptronLayer(nnld[2].NumberOfNetworks, hiddenLayer2, nnld[2].Weights, nnld[2].NumberOfInputs, nnld[2].Biases); double[] outputlayer = await neuralNetwork.PerceptronLayer(nnld[3].NumberOfNetworks, hiddenLayer3, nnld[3].Weights, nnld[3].NumberOfInputs, nnld[3].Biases); outputlayer = await activationFunctions.ByteOutput(outputlayer, 29180215); ws = await ValidateTest(outputlayer, i, ws); } for (int i = 0; i < ws.Statistics.Length; i++) { if (ws.Statistics[i] > 50) //Means 0.005 based upon validation set of 10000. Adjust as required. Use to determine what gets saved { shouldSave = true; if (ws.Statistics[i] > maxStat) { maxStat = ws.Statistics[i]; Console.WriteLine(string.Format("Current highest stat is: {0}, Probability: {1}", maxStat, maxStat / 10000)); } } } if (shouldSave) { //Console.WriteLine(Environment.NewLine); //SerialiseWeightsAndSaveToDB(ws.Statistics); //Save to DB using entity framework - uncomment to enable - remember to set connection string in WeightsDBContext } }
private async Task <WeightStore> ValidateTest(double[] outputlayer, int index, WeightStore ws) { outputlayer = await ConvertFromBinaryToDouble(outputlayer); for (int i = 0; i < valdataSet[index].PrivateKey.Length; i++) { if (valdataSet[index].PrivateKey[i] == (int)outputlayer[i]) //Check output against private keys { ws.Statistics[i]++; } } return(ws); }