/// <summary> /// Инициализирует слой по умолчанию с указанным количество нейронов и количеством соединений на один нейрон и количеством весов на слой. /// </summary> /// <param name="neuronsCount"></param> /// <param name="inputsPerNeuron"></param> /// <param name="weightsCount"></param> public Layer(int neuronsCount, int inputsPerNeuron, int weightsCount) { Neurons = new Neuron[neuronsCount]; for (var i = 0; i < Neurons.Length; i++) { Neurons[i] = new Neuron(inputsPerNeuron); } Weights = new Weight[weightsCount]; for (var i = 0; i < Weights.Length; i++) { Weights[i] = new Weight(); } }
public ConvolutionalLayer(int mapsCount, int mapWidth, int mapHeight, int inputsPerNeuron, KernelParams kernel) { // инициализаци¤ вручную. —оздаетс¤ пустой слой, затем карты признаков и из них копируютс¤ ссылки на нейроны и весы самого сло¤ FeatureMaps = new FeatureMap[mapsCount]; Neurons = new Neuron[mapWidth*mapHeight*mapsCount]; Weights = new Weight[inputsPerNeuron*mapsCount]; for (int fi = 0, w = 0, n = 0; fi < FeatureMaps.Length; fi++) { // создаем очередную карту признаков - 2D слой FeatureMaps[fi] = new FeatureMap(mapWidth, mapHeight, inputsPerNeuron); // заполн¤ем из новой карты признаков основные массивы сло¤ - нейроны и веса foreach (var neuron in FeatureMaps[fi].Neurons) Neurons[n++] = neuron; foreach (var weight in FeatureMaps[fi].Weights) Weights[w++] = weight; } _kernel = kernel; }