Example #1
0
        private static void CreateLayerInGraph(ComponentGraph graph, ComponentVertex vertex, RandomNumberGenerator <float> random)
        {
            if (graph.InDegree(vertex) == 0)
            {
                // use some arbitrary layout to start
                // source layer must be input layer that overrides it
                vertex.Layer = Layer.CreateFromArchitecture(new Shape(Shape.BWHC, -1, 100, 100, 100), vertex.Architecture, random);
            }
            else
            {
                IList <Shape> shapes = new List <Shape>();
                foreach (Edge <ComponentVertex> edge in graph.InEdges(vertex))
                {
                    if (edge.Source.Layer == null)
                    {
                        NetworkGraphBuilder.CreateLayerInGraph(graph, edge.Source, random);
                    }

                    shapes.Add(edge.Source.Layer.OutputShape);
                }

                vertex.Layer = shapes.Count == 1 ?
                               Layer.CreateFromArchitecture(shapes[0], vertex.Architecture, random) :
                               Layer.CreateFromArchitecture(shapes, vertex.Architecture, random);
            }
        }