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); } }