public GWNeuralNetwork(List <NeuralNetworkInputNode <InputData> > inputNodes, int[] innerLayers) { Graph = new GWGraph <NeuralNetworkNodeData, NeuralNetworkEdgeData, GWNeuralNetwork <InputData> >(); Graph.GraphStyle = GraphStyle.Directed; InputNodes = inputNodes.ToList(); // init layers Layers = new List <GWNode <NeuralNetworkNodeData, NeuralNetworkEdgeData, GWNeuralNetwork <InputData> > > [innerLayers.Length + 2]; for (int layer = 0; layer < Layers.Length; layer++) { Layers[layer] = new List <GWNode <NeuralNetworkNodeData, NeuralNetworkEdgeData, GWNeuralNetwork <InputData> > >(); } //inputLayer: for (int i = 0; i < InputNodes.Count; i++) { var node = Graph.CreateNode(); node.Data = InputNodes[i]; Layers[0].Add(node); } //create inner layers var random = new Random(); int defConnects = 4; for (int layer = 1; layer <= innerLayers.Length; layer++) { Layers[layer] = new List <GWNode <NeuralNetworkNodeData, NeuralNetworkEdgeData, GWNeuralNetwork <InputData> > >(); for (int i = 0; i < innerLayers[layer - 1]; i++) { var node = Graph.CreateNode(); node.Data = new NeuralNetworkNodeData(); //connect with former layer for (int k = 0; k < defConnects; k++) { var otherNode = Layers[layer - 1].RandomElement(random); var edge = Graph.CreateEdge(otherNode, node); edge.Data = new NeuralNetworkEdgeData(); edge.Data.Weight = random.NextDouble(); } Layers[layer].Add(node); } } //create endingPoint var endnode = Graph.CreateNode(); endnode.Data = new NeuralNetworkNodeData(); for (int i = 0; i < Layers[Layers.Length - 2].Count; i++) { var edge = Graph.CreateEdge(Layers[Layers.Length - 2][i], endnode); edge.Data = new NeuralNetworkEdgeData(); edge.Data.Weight = random.NextDouble(); } Layers[Layers.Length - 1].Add(endnode); }
public static GWGraph <SGLNodeData, SGLEdgeData, SGLGraphData> ParseFile_CRF_Class(string file) { var graph = new GWGraph <SGLNodeData, SGLEdgeData, SGLGraphData>(); graph.Data = new SGLGraphData(); using (var reader = new StreamReader(file)) { //if (reader.ReadLine() != "reflabels:") // throw new IOException("unbekanntes FileFormat - File sollte mit 'numlabels:' beginnen"); //int refLabels = int.Parse(reader.ReadLine()); //if (reader.ReadLine() != "observations:") // throw new IOException("unbekanntes FileFormat - File sollte mit 'numlabels:' beginnen"); //int observations = int.Parse(reader.ReadLine()); if (reader.ReadLine() != "nodes:") { throw new IOException("unbekanntes FileFormat - File sollte 'nodes:' in Zeile 3 enthalten"); } string line = string.Empty; while ((line = reader.ReadLine()) != "edges:" && line.NotNullOrEmpty()) { string[] words = Regex.Split(line, "\\s"); var node = graph.CreateNode(); var scores = new List <double>(); node.Data = new SGLNodeData(); node.Data.ReferenceLabel = int.Parse(words[1]); node.Data.Observation = int.Parse(words[2]); if (words.Length > 3) { node.Data.AssignedLabel = int.Parse(words[3]); } node.Data.Id = words[0]; } while ((line = reader.ReadLine()).NotNullOrEmpty()) { string[] words = Regex.Split(line, "\\s"); string name = words[0] + "_" + words[1]; string check = words[1] + "_" + words[0]; var edge = graph.CreateEdge(graph.Nodes.First((n) => n.Data.Id.Equals(words[0])), graph.Nodes.First((n) => n.Data.Id.Equals(words[1]))); edge.Data = new SGLEdgeData(); } } return(graph); }