protected override ICollection<ConnectableLayer> CreateLayers() { int hiddenLayersCount = HiddenLayers != null ? HiddenLayers.Count : 0; var layers = new List<ConnectableLayer>(1 + hiddenLayersCount + 1); var inputLayer = new InputLayer(InputSize).Connectable(); layers.Add(inputLayer); var prevLayer = inputLayer; if (hiddenLayersCount != 0) { foreach (var hl in HiddenLayers) { var hiddenLayer = hl.Connectable(); prevLayer.LowerLayers.Add(hiddenLayer); layers.Add(hiddenLayer); prevLayer = hiddenLayer; } } var outputLayer = OutputLayer.Connectable(); prevLayer.LowerLayers.Add(outputLayer); layers.Add(outputLayer); return layers; }
private static void TestNet() { var initRule = new NoisedWeightInitializationRule(); var gdRule = new GradientDescentRule(); var input = new InputLayer(6).Connectable(); var mid1 = new ActivationLayer(9, new SigmoidActivationFunction(), initRule, gdRule).Connectable(); var mid2 = new ActivationLayer(11, new SigmoidActivationFunction(), initRule, gdRule).Connectable(); var mid3 = new ActivationLayer(5, new SigmoidActivationFunction(), initRule, gdRule).Connectable(); var output = new ActivationLayer(2, new LinearActivationFunction(), initRule, gdRule).Connectable(); input.LowerLayers.Add(mid1); input.LowerLayers.Add(mid2); mid1.LowerLayers.Add(output); mid3.LowerLayers.Add(output); mid2.LowerLayers.Add(mid3); var layers = new[] { input, mid1, mid2, mid3, output }; var groups = new GroupedLayers(layers); Console.WriteLine(string.Join(" - ", from g in groups.LayerGroups select string.Join(",", g.Select(l => l.Size)))); var cpuNN = new CPUNeuralNetwork(layers); cpuNN.Iteration(); }