public NeuralNetwork(int inputNum, int outputNum, int hiddenNum, int layerNum) { rand = new Random(); connections = new List<Connection>(); hiddenLayers = new Node[layerNum][]; outputNodes = new Node[outputNum]; inputNodes = new Node[inputNum]; for (int i = 0; i < inputNum; i++) { inputNodes[i] = new Node(RandStart()); } for (int i = 0; i < outputNum; i++) { outputNodes[i] = new Node(RandStart()); } for (int i = 0; i < layerNum; i++) { hiddenLayers[i] = new Node[hiddenNum]; for (int j = 0; j < hiddenNum; j++) { Node curNode = new Node(RandStart()); hiddenLayers[i][j] = curNode; //hook up connection if (i == 0) //input layer to first hiddden layer { for (int k = 0; k < inputNum; k++) { connections.Add(new Connection(RandStart(), inputNodes[k], curNode)); } } else //hidden layer to hidden layer { for (int k = 0; k < hiddenNum; k++) { connections.Add(new Connection(RandStart(), hiddenLayers[i - 1][k], curNode)); } } //last hidden layer to output layer if (i == layerNum - 1) { for (int k = 0; k < outputNum; k++) { connections.Add(new Connection(RandStart(), curNode, outputNodes[k])); } } } } }
private void NodeToBuilder(Node node, StringBuilder strB) { strB.AppendFormat("{0}: bias={1}\n",node.GetHashCode(), node.Bias); foreach (Connection conn in node.OutCon) { strB.AppendFormat("\t-> {0} = {1}\n", conn.To.GetHashCode(), conn.Weight); } }