static double[][] MakeAllData(int numInput, int numHidden, int numOutput, int numRows, int seed) { Random rnd = new Random(seed); int numWeights = (numInput * numHidden) + numHidden + (numHidden * numOutput) + numOutput; double[] weights = new double[numWeights]; // actually weights & biases for (int i = 0; i < numWeights; ++i) { weights[i] = 20.0 * rnd.NextDouble() - 10.0; // [-10.0 to 10.0] } Console.WriteLine("Generating weights and biases:"); ShowVector(weights, 2, 10, true); double[][] result = new double[numRows][]; // allocate return-result for (int i = 0; i < numRows; ++i) { result[i] = new double[numInput + numOutput]; // 1-of-N in last column } NeuralNetwork gnn = new NeuralNetwork(numInput, numHidden, numOutput); // generating NN gnn.SetWeights(weights); for (int r = 0; r < numRows; ++r) // for each row { // generate random inputs double[] inputs = new double[numInput]; for (int i = 0; i < numInput; ++i) { inputs[i] = 20.0 * rnd.NextDouble() - 10.0; // [-10.0 to -10.0] } // compute outputs double[] outputs = gnn.ComputeOutputs(inputs); // translate outputs to 1-of-N double[] oneOfN = new double[numOutput]; // all 0.0 int maxIndex = 0; double maxValue = outputs[0]; for (int i = 0; i < numOutput; ++i) { if (outputs[i] > maxValue) { maxIndex = i; maxValue = outputs[i]; } } oneOfN[maxIndex] = 1.0; // place inputs and 1-of-N output values into curr row int c = 0; // column into result[][] for (int i = 0; i < numInput; ++i) // inputs { result[r][c++] = inputs[i]; } for (int i = 0; i < numOutput; ++i) // outputs { result[r][c++] = oneOfN[i]; } } // each row return(result); } // MakeAllData