public override void ConnectTo(Layer inputLayer) { foreach (var featureMap in FeatureMaps) { featureMap.ConnectTo(inputLayer); } }
/// <summary> /// Обеспечивает полносвязное соединение слоя с выходами входного слоя /// </summary> /// <param name="inputLayer">Входной слой</param> public virtual void ConnectTo(Layer inputLayer) { // подключение всех нейронов к предыдущему слою for (int neuronIndex = 0, weightIndex = 0; neuronIndex < Neurons.Length; neuronIndex++) { var neuron = Neurons[neuronIndex]; // заполнение входных соединений нейрона: // используем все выходы входного слоя + биас int ci; for (ci = 0; ci < inputLayer.Neurons.Length; ci++) { var inputNeuron = inputLayer.Neurons[ci]; var weidth = Weights[weightIndex++]; neuron.InputConnections[ci] = new InputConnection(inputNeuron, weidth); } var biasWeight = Weights[weightIndex++]; neuron.InputConnections[ci] = new InputConnection(Neuron.Bias, biasWeight); } }
public override void ConnectTo(Layer inputLayer) { throw new InvalidOperationException("Нельзя присоединить карту признаков к линейному слою."); }
public Network() { // 0 слой - входной входных соединений нет InputLayer = new Layer2D(InputImageWidth, InputImageHeight, 0, 0); // 1 слой - сверточный, 156 весов, 26364 входных соединений var layer1 = new ConvolutionalLayer(L1MapsCount, L1MapWidth, L1MapHeight, L1InputsPerNeuron, Kernel); layer1.ConnectTo(InputLayer); // 2 слой - сверточный, 7550 весов, 188750 входных соединений var layer2 = new ConvolutionalLayer(L2MapsCount, L2MapWidth, L2MapHeight, L2InputsPerNeuron, Kernel); layer2.ConnectTo(layer1); // 3 слой - полносвязный, 125100 весов, 125100 соединений var layer3 = new Layer(L3NeuronsCount, L3InputsPerNeuron); layer3.ConnectTo(layer2); // 4 слой - полносвязный, 1010 весов, 1010 соединений OutputLayer = new Layer(L4NeuronsCount, L4InputsPerNeuron); OutputLayer.ConnectTo(layer3); for (int y = 0, n = 0; y < InputLayer.Height; y++) { for (var x = 0; x < InputLayer.Width; x++, n++) { Debug.Assert(InputLayer.Neurons[n] == InputLayer.Neurons2D[y][x], string.Format("n => y, x: {0} => {1}, {2}", n, y, x)); } } Layers = new[] { InputLayer, layer1, layer2, layer3, OutputLayer }; }