Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }